Главная » Статьи » Распаковка

Учимся распаковке 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".

[Image]

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

[Image]

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

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

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


Источник: http://www.dotfix.net/
Категория: Распаковка | Добавил: -=Hellsing=- (17.06.2009) | Автор: GPcH E
Просмотров: 17489 | Комментарии: 1 | Рейтинг: 5.0/1
Всего комментариев: 1
1 Нуриддин  
0
Здравствуйте у меня программа ест sis втутри этого есть *dll файл, в библиотеке ест текст на английском хотел переводить но как роспокават *dll незнаю помагите пожалуйста

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]