Мне нужен Javascript литеральный синтаксический конвертер / инструменты деобфускации - PullRequest
5 голосов
/ 18 января 2012

Я искал в Google конвертер, но ничего не нашел. Есть ли какие-либо инструменты, или я должен сделать один, чтобы расшифровать мой обфусцированный код JavaScript?

Полагаю, такой инструмент есть, но я не ищу в Google правильные ключевые слова. Код длиной 3 страницы, поэтому мне нужны инструменты.

Вот пример кода:

<script>([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()[(!![]+[])[!+[]+!+[]+!+[]]+(+(+[])+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+!+[]+[+[]]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]])(([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+

Спасибо

Ответы [ 2 ]

4 голосов
/ 18 января 2012

Этот код увлекателен, потому что он, кажется, использует только девять символов ("[]()!+,;" и пустое пространство U+0020), но имеет некоторые сложные функции.Кажется, что он использует неявное преобразование типов в JavaScript для приведения массивов к различным примитивным типам и их строковым представлениям, а затем использует символы из этих строк для составления других строк, которые набирают имена функций, которые затем вызываются.следующий фрагмент, который оценивает функцию фильтра массива :

([][
   (![]+[])[+[]]               // => "f"
 + ([![]]+[][[]])[+!+[]+[+[]]] // => "i"
 + (![]+[])[!+[]+!+[]]         // => "l"
 + (!![]+[])[+[]]              // => "t"
 + (!![]+[])[!+[]+!+[]+!+[]]   // => "e"
 + (!![]+[])[+!+[]]            // => "r"
]) // => function filter() { /* native code */ }

Реконструкция кода как таковая занимает много времени и подвержена ошибкам, поэтому автоматическое решение, очевидно, желательно.Тем не менее, поведение этого кода настолько тесно связано со средой выполнения JavaScript, что для его обесцвечивания требуется интерпретатор JS для оценки кода.

Мне не удалось найти какие-либо инструменты, которые будут работатькак правило, с такой кодировкой.Похоже, что вам придется дополнительно изучить код и определить любые шаблоны использования (например, зависимость от методов массива) и выяснить, как отразить их использование (например, оборачивая высокоуровневые функции [такие как Function.prototype.call).]) для отслеживания выполнения кода для вас.

1 голос
/ 18 января 2012

На этот вопрос уже есть принятый ответ, но я все еще буду публиковать, чтобы прояснить некоторые вопросы.

Когда возникнет эта идея, какой-то парень создал генератор , чтобы кодировать JavaScriptпуть.Он основан на выполнении []["sort"]["call"]()["eval"](/* big blob of code here */).Следовательно, вы можете легко декодировать результаты этого кодера, удалив часть sort-call-eval (т.е. первые 1628 байт).В этом случае он выдает:

if (document.cookie=="6ffe613e2919f074e477a0a80f95d6a1"){ alert("bravo"); }
else{ document.location="http://www.youtube.com/watch?v=oHg5SJYRHA0"; }

(достаточно забавно, что создатель этого кода даже не смог правильно сжать его и сохранить килобайт)

Также есть объяснение, почему этокод больше не работает в новом браузере: они изменили Array.prototype.sort, поэтому он не возвращает ссылку на window.Насколько я помню, это был единственный способ получить ссылку на window, поэтому этот код сейчас не работает.

...