[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