Возникла ещё проблема:
Даны 2 вида скриптов:
Код:
1 | eval(unescape("eval( function (p%2ca%2cc%2ck%2ce%2cd)%7bwhile(c--) if (k%5bc%5d)p%3dp . replace(new RegExp( '%5c%5cb' %2bc . toString(a)%2b '%5c%5cb' %2c 'g' )%2ck%5bc%5d)%3breturn p%3b%7d( '6 9(3)%7b7(2(8(3)).4()%3d%3d2(%5c' 5 %5c ').4())1 c%3bb 1 0%7d6 a()%7b1%5c' 5 %5c '%7d' %2c13%2c13%2c '%7creturn%7cString%7cAnswers%7ctoLowerCase%7cОбратимость%7cfunction%7cif%7cGetUserAnswer%7cCheckAnswer%7cGetWriteAnswer%7celse%7c100' .split( '%7c' )))%0a"))
|
После раскодировки:
Код:
1 2 | eval(unescape("eval( function (p,a,c,k,e,d) ( '6 9(3){7(2(8(3)).4()==2(\'5\').4())1 c;b 1 0}6 a(){1\'5\'}' , 13 , 13 , '|return|String|Answers|toLowerCase||u041e|u0431|u0440|u0430|u0442|u0438|u043c|u043e|u0441|u0442|u044c|function|if|GetUserAnswer|CheckAnswer|GetWriteAnswer|else|100' .split( '|' )))
"))
|
Тут всё элементарно. Он просто возвращает строку в Unicode: |u041e|u0431|u0440|u0430|u0442|u0438|u043c|u043e|u 0441|u0442|u044c|
Получается слово "Обратимость"
А вот со вторым видом такая штуковина не прокатывает.
Код:
1 | eval(unescape("eval( function (p%2ca%2cc%2ck%2ce%2cd)%7bwhile(c--) if (k%5bc%5d)p%3dp . replace(new RegExp( '%5c%5cb' %2bc . toString(a)%2b '%5c%5cb' %2c 'g' )%2ck%5bc%5d)%3breturn p%3b%7d( 'o(15(%22o(12(p%2513%2514%25j%2511%25y)%25z(c--)10(k%25i%25f)p%2519.1a(1b 18(%5c' % 257 %25m%5c '%2516.17(a)%25x%5c' % 257 %25m%5c '%25l%5c' g%5c ')%25j%25i%25f)%25w p%25u%25h(%5c' 6 9 ( 3 )%25v( 2 ( 8 ( 3 )). 4 ()%25s%25t(% 257 %5c '5%257%5c' ). 4 ()) 1 c%25r 1 0 %251q a()%251n% 257 %5c '5%257%5c' %25h%5c '%25e%25e%25l%5c' %251g%251e%251c%251h%25n%251l%251m%25b%251k%25q%25d%25q%251i%25b%251j%251d%25d%251f%25b%251t%251v%251x%251w%251u%251o%251s%5c '.1r(%5c' %25n%5c ')))%251p%22))' %2c36%2c70%2c '%7c%7c%7c%7c%7c%7c%7c5c%7c%7c%7c%7cu0435%7c%7cu043d%7c2c13%7c5d%7c%7c7d%7c5bc%7c2ck%7c%7c2c%7c5cb%7c7c%7ceval%7c%7cu0438%7c3bb%7c3d%7c3d2%7c3b%7c7b7%7c3breturn%7c2b%7c2cd%7c7bwhile%7cif%7c2ce%7cfunction%7c2ca%7c2cc%7cunescape%7c2bc%7ctoString%7cRegExp%7c3dp%7creplace%7cnew%7c7cAnswers%7cu044c%7c7cString%7cu044b%7c7creturn%7c7ctoLowerCase%7cu0442%7cu043b%7cu0434%7cu0421%7cu043e%7c7b1%7c7celse%7c0a%7c7d6%7csplit%7c7c100%7c7cfunction%7c7cGetWriteAnswer%7c7cif%7c7cCheckAnswer%7c7cGetUserAnswer' .split( '%7c' )))%0a"))
|
После раскодировки:
Код:
1 2 | eval(unescape("eval( function (p,a,c,k,e,d) ( 'o(15("o(12(p%13%14%j%11%y)%z(c--)10(k%i%f)p%19.1a(1b 18(\'%7%m\'%16.17(a)%x\'%7%m\'%l\'g\')%j%i%f)%w p%u%h(\'6 9(3)%v(2(8(3)).4()%s%t(%7\'5%7\').4())1 c%r 1 0%1q a()%1n%7\'5%7\'%h\'%e%e%l\'%1g%1e%1c%1h%n%1l%1m%b%1k%q%d%q%1i%b%1j%1d%d%1f%b%1t%1v%1x%1w%1u%1o%1s\'.1r(\'%n\')))%1p"))' , 36 , 70 , '|||||||5c||||u0435||u043d|2c13|5d||7d|5bc|2ck||2c|5cb|7c|eval||u0438|3bb|3d|3d2|3b|7b7|3breturn|2b|2cd|7bwhile|if|2ce|function|2ca|2cc|unescape|2bc|toString|RegExp|3dp|replace|new|7cAnswers|u044c|7cString|u044b|7creturn|7ctoLowerCase|u0442|u043b|u0434|u0421|u043e|7b1|7celse|0a|7d6|split|7c100|7cfunction|7cGetWriteAnswer|7cif|7cCheckAnswer|7cGetUserAnswer' .split( '|' )))
"))
|
Здесь получается, если делать как в предыдущем, собирать Unicode символы, слово "ениьытлдСо"
Видно, что зашифрован цикл.
Слово должно получиться "Соединительные"
Я никак не могу понять, по какому принципу работает этот цикл...
Как его вытащить отсюда, чтобы разработать алгоритм?
Заметил, что в скрипте с циклом количество символов в слове всегда чётное.
Попробовал раскодировать внутренний текст, получилось примерно такое:
Код:
1 | \u0435 u043d, 13 ] } [c,k,\b eval u0438; b== 2 ; 6 split 100 function GetWriteAnswer if CheckAnswer GetUserAnswer
|