Главная » Статьи » Распаковка |
Учимся распаковке 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 входа нетрудно догадаться, что программа запакована UPX’ом, поэтому ищем следующие команды ниже: POPADкак ни странно все стандартно: 100049E3 . 74 22 JE SHORT GenOEP.10004A07 Ставим бряк на 10004A08 адрес, дважды щелкнув по
строчке байт и запускаем DLL. Да, да, именно запускаем, так как она
будет запущена с помощью специальной утилиты Olly, которая как бы
эмулирует вызов этой библиотеки из EXE. Брякнулись? Запускаем Lord PE,
выбираем в списке процессов loaddll.exe и видим в списке ниже гору
библиотек. Найдем среди этого списка нужный нам плагин (genoep.dll),
далее щелкаем правой кнопкой и выбираем пункт "Dump full". Теперь мы
имеем нормальный дамп Dll’ки, правда пока не работоспособный. [Восстановление импорта] Надеюсь, что вы еще не закрыли Olly, так как
брякнутый на OEP процесс нам еще понадобится, для получения из него
импорта. запускаем ImpREC и выбираем в списке процессов "loaddll.exe".
Теперь посмотрите чуть правее. Как вы думаете, для чего нужна кнопка
"Pick dll"? Как ни странно именно для выбора DLL. Щелкнем по ней и
выберем в полученном списке наш плагин (скорее всего он будет первым в
списке) и щелкнем по кнопке "OK".
Теперь осталось только вбить найденный нами OEP (а
это как вы помните адрес, по которому jmp’ается прога после
восстановления регистров (POPAD)) в строку "OEP". Не забудем вычесть из
него значение Image Base (для данной DLL библиотеки оно равно 10000000.
Щелкаем по кнопке "IAT AutoSearch". Далее как обычно - жмем "Get
Imports" и получаем список функций. Они восстановились нормально, так
как мы имеем дело не с армой, а с обычным UPX.
Щелкаем по кнопке "Fix Dump", выбираем сдампенную
в предыдущем шаге DLL и получаем полноценный рабочий дамп, который
можно проверить запустив PEiD и найдя этот плагин в списке плагинов.
[Заключение] Вот мы с Вами и научились распаковывать DLL. Как
видите это не намного сложнее распаковки EXE файлов, но немного
поинтереснее. Думаю Вы без труда найдете практическое применение
полученным знаниям. Это поможет локализаторам программ на русский язык,
которые обычно не русифицируют плагины, так как редакторы ресурсов не
могут отобразить запакованные ресурсы программ. Ну и конечно это
пригодится исследователям программных защит, особенно когда защита
разнесена
по нескольким DLL, которые еще к тому же упакованы. Источник: http://www.dotfix.net/ | |
Просмотров: 17590 | Комментарии: 1 | Рейтинг: 5.0/1 |
Всего комментариев: 1 | ||
| ||