[Moscow.pm] Обфускатор JavaScript
Alexander Lourier
aml на rulezz.ru
Ср Дек 16 09:56:23 PST 2009
On Wednesday 16 December 2009 20:44:04 Михаил Монашёв wrote:
> Здравствуйте, Александр.
>
> >> AK> Поскольку задача явно редкая, вряд ли есть готовые публичные
> >> решения.
> >> AK>
> >> AK> Это полиморфизм для генерации дорвеев, что ли?
> >>
> >> С точностью до наоборот. Для борьбы со спамерами.
>
> AL> Я вот антиобфускатор писал. Основан на модуле JavaScript из CPAN.
> AL> Понимает любой навороченности JavaScript-конструкции и отлично
> AL> антиобфуцирует скрипты, пользующиеся document.write. Не
> AL> поддерживает более хитрые способы формирования текста, например,
> AL> работающие через DOM. Но живых обфускаторов, которые это умеют
> AL> делать, не встречал.
>
> AL> Можешь потестировать свой обфускатор :)
>
> Огромное спасибо.
> Значит надо накрепко привязывать JS-код к браузеру. Вот только как это
> сделать? Пока в голову приходит только использовать DOM-объекты для
> хранения значений переменных. Плюс вместо вызова функций использовать
> их вызов по таймауту. Но этого мало...
Вообще, это заведомо проигрышная война. Любую хитрость можно проанализировать
и реализовать в эмуляторе браузера (коим и является jsextract). Грубо говоря,
ты делаешь document.write('<div id="aaa1"></div>');
document.getElementById('aaa1').innerHTML='blah-blah', а я учу антиобфускатор
парсить html, запоминать ID дивов, а потом реализую для них innerHTML ну и
т.д.
Тут можно только сколь угодно сильно затруднять анализ. Максимум приёмов,
которые ещё желательно периодически чередовать и обновлять. Привязка к
браузеру, подгрузка через ajax, проверка каких-нибудь переменных браузера,
связь с куками, таймеры и т.д. и т.п. Просто чтобы враги за##ались каждый раз
подстраиваться.
Если встанет задача разобрать заведомо любую обфускацию, я бы взял
какой-нибудь firefox и выковырил из него парсер. Если ты делаешь все это,
чтобы капчу спрятать, то искать её уже со скриншота окна firefox, а не
разбираясь в хитросплетениях JS.
Подробная информация о списке рассылки Moscow-pm