Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Обратная инженерия

Антон Hex Кукоба (xtin@ua.fm)

Спецвыпуск: Хакер, номер #057, стр. 057-012-1


Пособие по реверсингу для начинающего

Для многих реверсинг и крэкинг – слова-синонимы. На самом деле реверсинг – это всего лишь один из методов, которым пользуются крэкеры, да и то не все.

Из мудрых справочников ты узнаешь, что реверсивная инженерия – это "процесс восстановления спецификации из кода". Спецификация - техническое задание, бумажка, выдаваемая программистам, с указаниями о том, как должна выглядеть и работать система. А реверсивная инженерия в полном объеме - это восстановление всех знаний о системе. Например, полноценный реверсинг программного обеспечения подразумевает дизассемблирование, декомпиляцию, анализ функционирования системы и восстановление спецификации.

Докопаться до истины

Согласно широкому взгляду, реверсивная инженерия представляет собой подход к созданию новых систем на основе существующих. Часто ее используют в промышленном шпионаже, и это не слепое спионеривание, а анализ продукта, созданного конкурентами. Также реверсинг применяется для переработки собственных систем, если код программы уже настолько сложен, что проще восстановить всю систему, чем вчитываться в тонны документации. Тот же метод применяется в ре-инженерии (повторной инженерии), при анализе собственного продукта, чтобы определить узкие места реализации. Кто-то использует реверсивную инженерию программного обеспечения для написания антивирусов, кто-то реверсит антивирусы, чтобы писать не видимые для них вирусы. Плоха или хороша реверсивная инженерия, как обычно, зависит от контекста: для родины ты разведчик, для врагов - шпион. И тяга к ней у человека проявляется с раннего детства, когда он разламывает игрушки, чтобы понять, как они сделаны :).

В этой статье мы разберем два важных этапа реверсинга: дизассемблирование и декомпиляцию.

Инструменты

Реверсить голыми руками у нас умеют только уникумы, которые, как в фильме "Хакеры", смотрят на шестнадцатеричный дамп и сразу все понимают. Большинству нормальных людей все-таки нужны инструменты. Твой выбор будет зависеть от поставленной задачи, я же приведу список утилит, нужных для реверсинга Win32-программ.

Первый, главный и незаменимый инструмент - это дизассемблер. Тут без вариантов: Interactive Disassembler Pro (дальше IDA Pro), на текущий момент единственный действительно интерактивный дизассемблер, просто незаменимая вещь. В нем проводится 95% работ.

Редактор PE-файлов - любой имеющийся у тебя PE-редактор. Главное, чтобы он также умел выводить список процессов и модулей: PE Tools, Lord PE, PEditor.

Редактор ресурсов PE-файлов: ResHacker или ExeScope. Бывает очень нужен, когда все текстовые строки вынесены из кода в секцию ресурсов или специальную DLL.

Декомпиляторы: Dede, Dj java decompiler, SWF Decompiler и т.д. Если ты занимаешься реверсингом большого продукта, будь готов к тому, что он окажется составленным из кучи EXE, DLL, ActiveX, причем все они будут написаны на разных, самых неожиданных языках.

Различные информационные инструменты: Filemon, Regmon, HDD Serial/USB Monitor, Greatis Windowse, Spy++, OLE/COM object viewer. Очень помогает плагин KANAL к PeID: он позволяет находить криптоалгоритмы, используемые в программе. В общем, нужно иметь как можно больше инструментов, которые предоставляют какую-то неочевидную информацию о программе.

Содержание  Вперед на стр. 057-012-2