Возможности:
Полный лог выполняемых инструкций AVM1/AVM2 flash-плеера, включая строки и параметры
Для SWF > 8.5 дамп данных флеша (теги и данные тега doABC)
Описание работы:
Не секрет, что флеш плеер AVM1 (ActionScript2) является интерпретатором.
Это очень хорошо для создания монитора инструкций.
Нужно в Flash-плеере найти место, где происходит выборка/декодирование опкодов , прикрутить дизассемблер инструкций, парсинг параметров,
и получим более-менее рабочий логгер, что и было проделано
Для ActionScript3 (AVM2) разработчиками было проведена оптимизация по скорости за счет JIT (Just In Time compilation). Для скорости хорошо, для монитора плохо.
Порядок преобразования кода плеером при компиляции такой:
AVM2 ==> MIR ==> Код целевого процессора
Было потрачено много времени на обдумывание монитора AVM2
Была идея внедрять код в MIR (Macromedia Intermediate Representation) еще нет кода под целевой процессор, но уже нет и AVM2 кода
Была идея искать место кода генерации под целевой процессор, опять же успеха не имела.
В результате, была использована особенность флеш-плеера, а именно ИНТЕПРЕТИРОВАТЬ AVM2 код. А имеено код инициализации ($init, $cinit)
Было найдено место в плеере где проводился анализ и патч
Конечно для ActionScript3 есть отладочная версия плеера, с настройками и прочими радостями реверсера, но результат мягко говоря
оставлял лучшего (попробуйте прогнать обфусцированный doSWF - половина инструкций проскочит мимо)
Как пользоваться tracer'om:
Трейсер состоит:
injector.exe - внедряет DLL в процесс
intruder.dll - собственно сам tracer
options.ini - настройки
1. Если нет браузера из списка, установить (см. выше)
2. Заменить DLL плеера (см. выше)
3. К сожалению работа плеера не такая простая)) Если мы запустим флеш на исполнение, то это не значит что будет исполнятся только он
Например меню настроек в плеере по правой кнопке мыши, это тоже флеш. Поэтому для отделения других флешек от нашей и получения лога трассировки, нужно провести подготовительные вещи,
а именно нужно в файле с флешем первые 8 байт записать в options.ini
[Options] ;First bytes of target SWF byte0=0x43 byte1=0x57 byte2=0x53 byte3=0x09 byte4=0xc8 byte5=0x05 byte6=0x00 byte7=0x003. В архиве с трасером идет утилита injector.exe - выбираем exe браузера, внедряемся Если все прошло нормально, то на винте появится текстовый файл C:\flash.trace.txt с инструкциями и прочей инфой Будет выглятеть примерно так. (показано для AVM2, вырезано лишнее)
00000588 D0 getlocal0 00000589 30 pushscope 0000058A F1 06 debugfile 6 ("C:\Documents and Settings\user\My Documents\Flex Builder 3\ascccccc\src;;ascccccc.as") 0000058C F0 05 debugline 5 0000058E 65 getscopeobject 00000590 60 0F getlex 15 ("Object") 00000592 30 pushscope 00000593 60 10 getlex 16 ("flash.events::EventDispatcher") 00000595 30 pushscope 00000596 60 11 getlex 17 ("flash.display::DisplayObject") 00000598 30 pushscope 00000599 60 12 getlex 18 ("flash.display::InteractiveObject") 0000059B 30 pushscope 0000059C 60 13 getlex 19 ("flash.display::DisplayObjectContainer") 0000059E 30 pushscope 0000059F 60 02 getlex 2 ("flash.display::Sprite") 000005A1 30 pushscope 000005A2 60 02 getlex 2 ("flash.display::Sprite") 000005A4 58 00 newclass 0 00000484 D0 getlocal0