Современные решения

для защиты Windows приложений

и восстановления исходного кода
Автор: Сергей Чубченко. Дата публикации: 06.09.2004

Учимся распаковке DLL библиотек


[Введение]

В данной статье я расскажу основные приемы, используемые для распаковки DLL библиотек. Несмотря на большое сходство EXE и DLL, многих начинающих исследователей кода распаковка DLL просто отпугивает, а многим из них кажется, что это вообще невозможно. Как ни странно все делается почти также просто, как и распаковка EXE файлов, правда есть определенные тонкости. Распаковку DLL библиотек мы рассмотрим на примере плагина GenOEP.dll из поставки PEiD’а, так как он наверняка найдется у многих.

[Нам понадобятся]

1. Olly Debugger
2. Lord PE
3. ImpREC
4. PEiD
5. Мозги

[Немного исследования]

Откроем наш плагин в Olly. Нам сразу будет предложено использовать программу loaddll.exe из поставки olly. Чтож, неплохая идея, поэтому отвечаем "Да". Просмотрев то, что находится начиная с точки входа

10004880 > $ 807C24 08 01 CMP BYTE PTR SS:[ESP+8],1 10004885 . 0F85 7D010000 JNZ GenOEP.10004A08 1000488B . 60 PUSHAD 1000488C . BE 00400010 MOV ESI,GenOEP.10004000 10004891 . 8DBE 00D0FFFF LEA EDI,DWORD PTR DS:[ESI-3000] 10004897 . 57 PUSH EDI 10004898 . 83CD FF OR EBP,FFFFFFFF 1000489B . EB 0D JMP SHORT GenOEP.100048AA 1000489D 90 NOP 1000489E 90 NOP 1000489F 90 NOP 100048A0 > 8A06 MOV AL,BYTE PTR DS:[ESI]

нетрудно догадаться, что программа запакована UPX’ом, поэтому ищем следующие команды ниже:

POPAD JMP OEP

как ни странно все стандартно:

100049E3 . 74 22 JE SHORT GenOEP.10004A07 100049E5 . 3C EF CMP AL,0EF 100049E7 . 77 11 JA SHORT GenOEP.100049FA 100049E9 > 01C3 ADD EBX,EAX 100049EB . 8B03 MOV EAX,DWORD PTR DS:[EBX] 100049ED . 86C4 XCHG AH,AL 100049EF . C1C0 10 ROL EAX,10 100049F2 . 86C4 XCHG AH,AL 100049F4 . 01F0 ADD EAX,ESI 100049F6 . 8903 MOV DWORD PTR DS:[EBX],EAX 100049F8 .^EB E2 JMP SHORT GenOEP.100049DC 100049FA > 24 0F AND AL,0F 100049FC . C1E0 10 SHL EAX,10 100049FF . 66:8B07 MOV AX,WORD PTR DS:[EDI] 10004A02 . 83C7 02 ADD EDI,2 10004A05 .^EB E2 JMP SHORT GenOEP.100049E9 10004A07 > 61 POPAD 10004A08 >-E9 4ED1FFFF JMP GenOEP.10001B5B ; прыжок на OEP

Ставим бряк на 10004A08 адрес, дважды щелкнув по строчке байт и запускаем DLL. Да, да, именно запускаем, так как она будет запущена с помощью специальной утилиты Olly, которая как бы эмулирует вызов этой библиотеки из EXE. Брякнулись? Запускаем Lord PE, выбираем в списке процессов loaddll.exe и видим в списке ниже гору библиотек. Найдем среди этого списка нужный нам плагин (genoep.dll), далее щелкаем правой кнопкой и выбираем пункт "Dump full". Теперь мы имеем нормальный дамп Dll’ки, правда пока не работоспособный.

[Восстановление импорта]

Надеюсь, что вы еще не закрыли Olly, так как брякнутый на OEP процесс нам еще понадобится, для получения из него импорта. запускаем ImpREC и выбираем в списке процессов "loaddll.exe". Теперь посмотрите чуть правее. Как вы думаете, для чего нужна кнопка "Pick dll"? Как ни странно именно для выбора DLL. Щелкнем по ней и выберем в полученном списке наш плагин (скорее всего он будет первым в списке) и щелкнем по кнопке "OK".

ImpREC Load dll

Теперь осталось только вбить найденный нами OEP (а это как вы помните адрес, по которому jmp’ается прога после восстановления регистров (POPAD)) в строку "OEP". Не забудем вычесть из него значение Image Base (для данной DLL библиотеки оно равно 10000000. Щелкаем по кнопке "IAT AutoSearch". Далее как обычно - жмем "Get Imports" и получаем список функций. Они восстановились нормально, так как мы имеем дело с простым упаковщиком.

ImpREC IAT AutoSearch

Щелкаем по кнопке "Fix Dump", выбираем сдампенную в предыдущем шаге DLL и получаем полноценный рабочий дамп, который можно проверить запустив PEiD и найдя этот плагин в списке плагинов.

[Заключение]

Вот мы с Вами и научились распаковывать DLL. Как видите это не намного сложнее распаковки EXE файлов, но немного поинтереснее. Думаю Вы без труда найдете практическое применение полученным знаниям. Это поможет локализаторам программ на русский язык, которые обычно не русифицируют плагины, так как редакторы ресурсов не могут отобразить запакованные ресурсы программ. Ну и конечно это пригодится для исследования вредоносного кода антивирусным аналитикам, особенно когда код разнесен по нескольким DLL, которые еще к тому же упакованы.

Комментарии

отсутствуют

Добавление комментария


Ваше имя (на форуме):

Ваш пароль (на форуме):

Комментарии могут добавлять только пользователи,
зарегистрированные на форуме данного сайта. Если Вы не
зарегистрированы, то сначала зарегистрируйтесь тут

Комментарий: