Задать вопрос
  • Перспективы ue4 и unity?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Микропетпроджект - домашнее облако homeCloud
    Будущее туманно. А о настоящем - открываем hh.ru и ищем.
    Вопрос поднимался много раз.
    Ответ написан
    Комментировать
  • Почему у меня не преобразуются градусы в радианы?

    dasha_programmist
    @dasha_programmist
    ex Software Engineer at Reddit TS/React/GraphQL/Go
    1 градус = Пи/180 радиан
    соответственно функция получения радиан из градусов будет
    toRad = (val) => val * PI/180;
    Ответ написан
    Комментировать
  • Как узнать страну по ip?

    Stalker_RED
    @Stalker_RED
    Скачать себе базу типа такой: https://dev.maxmind.com/geoip/geoip2/geolite2/ (их есть разные)

    или возможно есть какие то закономерности в формировании ip для каждой страны?
    хахаха.
    Это за 2007 https://www.caida.org/research/id-consumption/whoi...
    С тех пор многие крупные сегменты распродали по частям, и каша стала намного более запутанной.
    И да, адреса выдают организациям, а не странам. Будь в каждой стране по одному провайдеру, и не будь ни одного провайдера работающего на несколько стран, ваше желание было бы чуть ближе к реальности :)
    Ответ написан
    Комментировать
  • Наткнулся на подозрительный скрипт в исходниках одного сайта, не вирус ли?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Данные не слились.

    Хотя теоретически это возможно, если использовалась 0day-уязвимость в самом браузере. Но практически шанс этого настолько мал, что не стоит переживать. Очень много слоев защит в браузере, так что даже переполнение буфера мало что даст.

    Это просто обфусцированный код. А значит, автор просто не хочет, чтобы вы знали, что он делает, но это не обязательно вирус. Что именно он делает см. ниже. Но вообще очень много где встречается обфускация (или хотя бы минификация), и гораздо больших масштабов, на килобайты. Это норма.

    Если хотите практически полностью исключить атаку со стороны JS, отключайте его по-умолчанию. Например, я использую расширение (для хрома) Quick Javascript Switcher. Все сайты у меня без JS и всё прекрасно работает. На известных сайтах типа яндекса гугла, мейла, всё чем нужно пользоваться - включено. Ну и если внезапно надо включить (очень редко) - одним кликом делается. Хотя тема расширений сама по себе интересна с точки зрения ИБ, но это уже другая история (и всегда можно их скачать и использовать локально, особенно мелкие с кодом в 30 строк).

    P.S.
    Распаковка, этап 1
    var arr=[
    	'||x2F|x20|x33|x42|_0x9a4f|x54|hi|x2E|x3A|x74|x31|x52|x37|x4E|x6F|x68|x50|x48|var|x70|x4B|x59|x63|x6C|x67|function|console|x73|x72|x76|x62|x6B|x6D|x6E', //0
    	'split', //1
    	'length', //2
    	'constructor', //3
    	'debugger', //4
    	'toString', //5
    	'replace', //6
    	'\x5cw+', //7
    	'k\x206=[\x22\x5c5\x5cn\x5c3\x5cf\x5c5\x5cd\x5c3\x5c2\x5c2\x5c3\x5cj\x5c7\x5c7\x5ci\x5ca\x5c2\x5c2\x5cf\x5c5\x5cd\x5cc\x5c4\x5c4\x5ce\x5c9\x5c7\x5cm\x5c3\x5c2\x5c2\x5c3\x5ch\x5cb\x5cb\x5cl\x5ct\x5ca\x5c2\x5c2\x5cv\x5cx\x5c9\x5co\x5cg\x5cy\x5c2\x5cz\x5cw\x5cu\x5cc\x5c4\x5c4\x5ce\x22,\x22\x5cp\x5cg\x5cq\x22];r\x208(){s[6[1]](6[0])}8()'
    ];
    
    (function(arr, b) {
      var d = function(c) {
        while (--c) {
          arr['push'](arr['shift']());
        }
      };
      d(++b);
    }(arr, 0x1f4));
    
    var e = function(f) {
      f = f - 0x0;
      var g = arr[f];
      return g;
    };
    
    eval(function(h, nn1, i, j, k, m) {
      k = function(n) {
        return n[e('0x0')](0x24);
      };
      if (!'' [e('0x1')](/^/, String)) {
        while (i--) {
          m[k(i)] = j[i] || k(i);
        }
        j = [function(o) {
          return m[o];
        }];
        k = function() {
          return e('0x2');
        };
        i = 0x1;
      };
      while (i--) {
        if (j[i]) {
          h = h[e('0x1')](new RegExp('\x5cb' + k(i) + '\x5cb', 'g'), j[i]);
        }
      }
      return h;
    }(e('0x3'), 0x24, 0x24, e('0x4')[e('0x5')]('|'), 0x0, {}));
    
    var p = function() {
      function q(r) {
        if (('' + r / r)[e('0x6')] !== 0x1 || r % 0x14 === 0x0) {
          (function() {} [e('0x7')](e('0x8'))());
        } else {
          (function() {} [e('0x7')]('debugger')());
        }
        q(++r);
      }
      try {
        q(0x0);
      } catch (ee) {}
    };
    p();
    setInterval(function() {
      p();
    }, 0xfa0);
    Распаковка, этап 2
    var arr=[
    	'toString', //0
    	'replace', //1
    	'\x5cw+', //2
    	'k\x206=[\x22\x5c5\x5cn\x5c3\x5cf\x5c5\x5cd\x5c3\x5c2\x5c2\x5c3\x5cj\x5c7\x5c7\x5ci\x5ca\x5c2\x5c2\x5cf\x5c5\x5cd\x5cc\x5c4\x5c4\x5ce\x5c9\x5c7\x5cm\x5c3\x5c2\x5c2\x5c3\x5ch\x5cb\x5cb\x5cl\x5ct\x5ca\x5c2\x5c2\x5cv\x5cx\x5c9\x5co\x5cg\x5cy\x5c2\x5cz\x5cw\x5cu\x5cc\x5c4\x5c4\x5ce\x22,\x22\x5cp\x5cg\x5cq\x22];r\x208(){s[6[1]](6[0])}8()',
    	'||x2F|x20|x33|x42|_0x9a4f|x54|hi|x2E|x3A|x74|x31|x52|x37|x4E|x6F|x68|x50|x48|var|x70|x4B|x59|x63|x6C|x67|function|console|x73|x72|x76|x62|x6B|x6D|x6E', //4
    	'split', //5
    	'length', //6
    	'constructor', //7
    	'debugger', //8
    ];
    
    var e = function(num) { //получить строку с номером num (они перемешаны)
      num = num - 0;
      var g = arr[num];
      return g;
    };
    
    function getCode(h, nn1, i, j, k, m) {
      k = function(n) {
        return n.toString(0x24);
      };
      if (!''.replace(/^/, String)) {
        while (i--) {
          m[k(i)] = j[i] || k(i);
        }
        j = [function(o) {
          return m[o];
        }];
        k = function() {
          return '\x5cw+';
        };
        i = 0x1;
      };
      while (i--) {
        if (j[i]) {
          h = h.replace(new RegExp('\x5cb' + k(i) + '\x5cb', 'g'), j[i]);
        }
      }
      return h;
    }
    var code = getCode(e(3), 36, 36, e(4).split('|'), 0, {});
    eval(code);
    
    var p = function() {
      function q(r) {
        if (('' + r / r).length !== 1 || r % 20 === 0) {
          debugger;
        } else {
          debugger;
        }
        q(++r);
      }
      try {
        q(0);
      } catch (ee) {}
    };
    p();
    setInterval(function() {
      p();
    }, 4000);
    Распаковка, этап 3
    //Суть скрипта
    function hi() {
      console['log']('BY NBR // HTTP://NBR1337.TK // https://vk.com/nbr1337')
    }
    hi();
    
    //плюс защита от дебага (удалена)
    Распаковка, этап 4
    console.log('BY NBR // HTTP://NBR1337.TK // https://vk.com/nbr1337');

    Вывод - это просто подпись автора, чтобы он смог доказать авторство в суде, если его код спиратят.
    Ответ написан
    4 комментария
  • Влияет ли издатель сертификата на позицию в поисковых системах?

    CityCat4
    @CityCat4 Куратор тега Цифровые сертификаты
    Жил да был черный кот за углом...
    Нет.

    Если конечно мы говорим об одном и том же типе сертификатов. LE выдает только DV сертфиикаты. Если сравнивать его с DV сертификатом от того же Комодо - скорее всего нифига разницы не будет.

    Если сравнивать с OV или EV сертификатом от Комодо - разница может быть будет. Эта вещь очень сложно доказуема, потому что нужна статистика, которую собрать нереально, если ты не гугл. Но и цена EV сертификата - кусается и пребольно.
    Ответ написан
    Комментировать
  • Как сделать чтобы метки маршрута были поверх обычных меток Яндекс Карты?

    deepblack
    @deepblack
    Для задания начальной, конечной и промежуточных точек используется YMaps.WayPoint
    • wayPointStart - опции отображения начальной путевой точки;
    • wayPointFinish - опции отображения конечной путевой точки;

    WayPoint наследуется от Placemark, у которого есть свойство zindex

    Вот его и используйте.
    Ответ написан
    Комментировать
  • Моя игра не может найти DLL на чужих ПК, при том что они есть, и не работает. Что делать?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Соберите релиз, это первое.

    Вместе с игрой нужно устанавливать пакет Visual Studio Redistributable 2017
    Ответ написан
    1 комментарий
  • Мобильные шейдера, ошибки оптимизации?

    GavriKos
    @GavriKos Куратор тега Unity
    Микропетпроджект - домашнее облако homeCloud
    if-else для шейдеров - плохо, да.
    Но причины падения могут быть самые разные - надо как минимум смотреть код шейдера. Ну и попрофилировать стоит.
    Ответ написан
    Комментировать
  • Являются ли персональными данными имя и первая буква фамилии?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Нет, поскольку с помощью этих данных невозможно однозначно идентифицировать конкретную личность.
    Ответ написан
    2 комментария
  • Почему не получается скомпилировать GNU assembler?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега GCC
    Седой и строгий
    Потому что когда gcc запускает ld, он передаёт ему существенно больше параметров, включая необходимые библиотеки, а не только объектный модуль программы.
    Ответ написан
    4 комментария
  • Какие видеокурсы существуют по шифрования сполняемых файлов?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    Лол, ответ на ваш вопрос изучают в ВУЗах на направлениях "Информационная безопасность" где-то лет пять и над ним ломают головы тысячи высокооплачиваемых специалистов.
    Ответ написан
    Комментировать
  • Как сделать, чтобы фильтр не применялся к объектам на карте?

    0xD34F
    @0xD34F Куратор тега Яндекс.Карты
    .gray {
      -webkit-filter: grayscale(100%);
      -moz-filter: grayscale(100%);
      -o-filter: grayscale(100%);
      filter: grayscale(100%);
    }

    map.panes.get('ground').getElement().classList.add('gray');

    https://jsfiddle.net/8y0t6kjv/
    Ответ написан
    1 комментарий
  • Общение/переговоры с заказчиком занимают много времени, что делать?

    @Stalinko Куратор тега Фриланс
    PHP'шник и фрилансер до мозга костей
    Всё время, которое ты тратишь на проект заказчика, должно быть оплачено заказчиком.
    Все длительные переговоры, естественно, тоже.
    Ответ написан
    3 комментария
  • Можно-ли скачать видео с YouTube используя DevTools?

    Есть такая «секретная» ссылка: www.youtube.com/get_video_info?video_id=XXXXXX
    Вместо XXXXXX подставьте хэш видео, который в ссылке на ролик, типа youtu.be/BWCiWZtrWXU после слеша.

    По этой (первой) ссылке вернутся URL-encoded данные. Распакуйте их и возьмите параметр url_encoded_fmt_stream_map. Его значение опять надо распаковать как URL-параметры. И из результата вытащить параметр url – это ссылка на единый скачивабельный видеофайл.

    Например, в консоли браузера:
    function getUrlParams(search) {
        let hashes = search.slice(search.indexOf('?') + 1).split('&')
        let params = {}
        hashes.map(hash => {
            let [key, val] = hash.split('=')
            params[key] = decodeURIComponent(val)
        })
    
        return params
    }
    var s = '------'; // здесь длиннющая строка из ответа /get_video_info
    var a = getUrlParams(s);
    var b = getUrlParams(a.url_encoded_fmt_stream_map);
    console.log(b.url); // эту ссылку открываем в браузере - это скачиваемый видеофайл


    Очень надеюсь, что вы покопаетесь в этих данных более подробно, разберётесь, как получать прямые ссылки на скачиваемые файлы во всех форматах и размерах, которые предлагает YouTube, и напишете короткий материал на Хабр по результатам, а также опубликуете gist с рабочим кодом для консоли браузера.
    Ответ написан
    3 комментария
  • Почему не отображается балун?

    0xD34F
    @0xD34F Куратор тега Яндекс.Карты
    Потому что настройки балуна относятся к properties, а не к options - читайте документацию.
    Ответ написан
    2 комментария
  • Почему так нельзя сделать?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Assembler
    Седой и строгий
    Потому что в процессорах нет инструкции cmp, у которой и первый и второй операнд - это область памяти. Ну, по крайней мере в процессорах с архитектурой x86.
    Ответ написан
    Комментировать
  • Почему не срабатывает шеллкод?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    при компиляции флаг из реестра не удаляется. В чем может быть проблема?

    В том, что ты засунул бинарный код в параметр функции, в котором должна быть строка с именем программы для запуска и её параметрами. Непонятно, почему ты ожидаешь, что WinExec бросится выполнять машинный код в этой строке. WinExec имеет код возврата, который недвусмысленно тебе сказал бы в чём ошибка (путь или файл для запуска не найдены), если бы ты его проверил.
    И, кстати, байт с кодом 0 по смещению 0x246 -- это тоже часть шелл-кода, терминатор командной строки.

    Байты из зеленой области, как я понял, это информация линкера golink. Так ли это?

    Это заголовок файла формата PE. Да, его туда записал линкер. Нет, это не информация линкера, это информация в основном для загрузчика ОС, а так же для дизассемблера и прочих binutils.
    Ответ написан
    1 комментарий
  • 2500 меток на онлайн карте доступной для всех. Как и где это можно сделать?

    Moskus
    @Moskus
    Сервиса с "конструктором", который бы позволял без программирования сгенерировать страницу с картой, которая отображала бы содержимое базы, с возможностью импорта в базу и поиска по ней, и с кластеризацией маркеров на карте - не существует.

    Есть сервисы с частью описываемого функционала - Mapbox Studio, Nextgis Web (импорт данных, визуализация данных), но не со всем.

    Для того, чтобы получить весь функционал, придется программировать.

    OpenStreetMap к вашему вопросу не имеет почти никакого отношения - этот проект представляет из себя картографическую базу данных всего мира (карту, которая сделана на основе этой базы, можно использовать, как фон для вашей визуализации, на этом связь заканчивается).

    Для облегчения реализации искомого, вы можете использовать, например, фреймворки GeoExt, Leaflet.js
    Как базу - SpatiaLite (SQLite с пространственными расширениями).

    На всякий случай: встречные вопросы "а почему нет таких сервисов" и "где найти программистов, которые помогут", мне задавать не надо. Нет - потому что нет, программистов искать - на биржах фрилансеров.
    Ответ написан
    Комментировать
  • Почему эти строчки записываются в память по-разному?

    @zedxxx
    Потому что в Си, вот эта последовательность "\r" - это управляющая последовательность и в память она записывается как 0xd (один байт). Эту работу выполняет компилятор.

    А в ассемблере как вы строку записали, так она в памяти и лежит, т.е. там символ "\" лежит как 0x5с, и так же лежит рядышком символ "r". Но для HTTP запроса нужен именно перевод строки (последовательность 0xd, 0xa), а не текст "\r".
    Ответ написан
    4 комментария
  • Уязвимости типа переполнение буфера?

    Нет, вы поняли неправильно. Во-первых, эксплуатация переполнения буфера зависит от того, где расположен буфер. Скорей всего вы имеете ввиду переполнение стекового буфера aka stack overrun.
    При "классической" прямой эксплуатации переполнения буфера в стеке "по aleph1" в буфере размещается шел-код, затем сохраненный в стеке адрес возврата перезаписывается адресом, указывающим внутрь буфера (на шелкод), при возврате из функции выполняется шелкод.

    Однако, такие приемы работали до того, как появились технологии защиты стека, неисполняемой памяти и рандомизации размещения в адресном пространстве. Сейчас для эксплуатации переполнений стека на практике обычно требуются приемы ROP (return oriented programming), т.е. ваши знания очень сильно устарели.

    Написать программу и вставить ее код в чистом виде нереально даже в случае классической эксплуатации, т.к. шел-код должен быть привязан к определенному состоянию адресного пространства эксплуатируемого приложения, и попадает в адресное пространство минуя стандартные механизмы загрузки и динамической линковки. Обычно шел-код пишется на ассемблере, либо под определенные фиксированные адреса, либо так, чтобы не иметь привязки к адресному пространству или с учетом необходимых дополнительных операций (например получения адресов вызываемых функций) для привязки к адресному пространству.

    ROP представляет из себя в принципе иной подход к программированию, для разработки шел-кода предварительно необходимо собрать доступные фрагменты кода ("гаджеты"), возможность написания шел-кода зависит от собранных гаджетов и фактически требует трансляции кода в последовательность вызова гаджетов, обычные подходы к разработке кода здесь неприменимы (по крайней мере до того момента, как получен полный контроль над страницами памяти процесса).
    Ответ написан
    1 комментарий