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

Крутой протектор – не беда

Ms-Rem (Ms-Rem@yandex.ru)

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


Для начала рассмотрим простой полиморф и подумаем, как декодировать его. В качестве подопытной программы я взял написанный на ассемблере Hello World и защитил его с помощью DotFix FakeSigner 2.8. В IDA получившийся код выглядит так:

jmp short loc_902003

db 0D8h

jmp short loc_902006

db 0BFh

finit

fprem

inc eax

dec eax

inc eax

dec eax

lea ebx, [ebx+0]

jmp short loc_902015

db 0F6h

xor edx, edx

jmp short loc_902026;

Здесь мы видим пример использования простейшего полиморфа. Инструкции программы разносятся на разное расстояние, соединяются с помощью jmp, а промежутки заполняются мусорными инструкциями. В данном случае весь приведенный код представляет собой мусор, о чем нетрудно догадаться, однако начинающих крэкеров это может сбить с толку. Еще в этом полиморфе можно встретить редкие SEH, но автор даже не пытался их замаскировать - их не увидит только слепой. Для декодирования этого полиморфа необязательно использовать полноценный дизассемблер - достаточно дизассемблера длин и таблицы мусорных шаблонов. Алгоритм такой: проходим дизассемблером длин по инструкциям программы, переходим по jmp и собираем весь код (кроме jmp) где-нибудь в памяти. После этого по шаблонам удаляем мусорные инструкции. Вот и все - полиморф декодирован. FakeSigner, кстати, предназначен для затруднения определения упаковщика, которым сжат исполняемый файл, и, по идее, нельзя определить наличие самого дотфикса. К сожалению, код этого полиморфа настолько специфичен, что написать программу, определяющую его, будет проще простого. Если хочешь потренироваться в разборе полиморфов, рекомендую начать именно с этого.

Несомненно, при взломе сложных защит тебе придется столкнуться с метаморфом, а это штука даже неприятнее, чем простой полиморф. Для декодирования метаморфа нужно написать сложный анализатор, который содержит в себе дизассемблер, разбирающий инструкции, и деморфер, реализующий алгоритм, обратный морферу. Простейший алгоритм разбора метаморфа состоит в анализе близкорасположенных инструкций и определении того, как они в целом повлияют на регистры и память. После этого преобразование повторяется до получения кода наименьшего размера. К примеру, группу add eax, 5/sub eax, 4 можно превратить в inc eax. Этот метод называется многопроходной оптимизацией и применяется для реверсинга простых метаморфов. В более сложных случаях зависимые команды могут быть отделены кучей мусора или перемешаны с кодом протектора. И тут на помощь придет только частичная эмуляция участков кода на виртуальной машине и формирование кода на основе изменений состояния ВМ на определенных отрезках кода.

Назад на стр. 057-056-4  Содержание  Вперед на стр. 057-056-6