Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Unpacking DDeM

Обсудить статью на форуме

Очень удобно, когда все крэкерские инструменты, книги и статьи в одном месте. Используйте сборник от EXELAB - вот тут.

Автор: Nabu <nabu@km.ru>

::Инструменты::
Отладчик (я юзал TRW2000)
Редактор PE файлов (думаю перечислять не надо:) )
и любой Дампер.

::Бредисловие::
DDeM - это протектор, который ставит на свои игрушки компания 7 Wolf Multimedia. Вот по этому сообщению вы можете узнать, что на игрушке висит этот протектор:

_______________________________________________________________
|Для коректной работы игры требуется оригинальный компакт-диск 7Wolf|
|Multimedia. Вставьте, пожалуйста, диск №2 и нажмите ОК
|______"OK"_____________________"Отмена"________________________|


Но о том, что это за хрень и с чем ее едят, я узнал уже потом, когда все было сделано…

Вот как-то на днях мне захотелось отучить какую-нибудь игрушку от CD. Пошарил я у себя на винте и нашел MaxPayne2. Ну, думаю, это и будет мой предмет исследования:)

::Ну что ж, приступим.::
Как и всегда я решил узнать, на чем это наша игрушка написана/ чем упакована/ запротекчена. PEiD мне ничего рассказать не смог. Тогда я воспользовался PESniffer’ом из PETools by NEOx. Он мне выдал вот такую информацию: *** Protector v1.1.11 (DDeM->PE Engine v0.9, DDeM->CI v0.9.2). Ух ты! До этого я еще не встречал ничего подобного. Но ничего, от этого наше исследование станет еще интереснее.

Дизасмить exe’шник нет никакого смасла, так как в лучшем случаи увидим только код распаковщика. Мы для начала будем использовать отладчик. Сразу могу сказать, что для исследования можете использовать любой отладчик , так как никакой защиты от них родимых здесь нет. Отсутствие этой защиты меня натолкнуло на вопрос: «А почему же он называется протектором?». Как выяснилось, при попытке засунуть файл в W32Dasm, последний выдавал ошибку. Также выдают ошибку и некоторые PE-редакторы.

Ну, спросите вы меня, так с чего же начать? Я решил попытаться найти OEP, начав трейсить прогу от EP, и просто проходя через циклы. Для того чтобы прерваться на EP, например в TRW, достаточно загрузить exe’шник - и вы стоите на точке входа. Но этот метод меня ни к чему интересному не привел: ничего похожего на переход к OEP не встречалось и, в конце концов, выскакивало сообщение, просящее вставить диск.

Ладно, подумал я, отложим распаковку в сторону и попытаемся использовать стандартные функции проверки диска, чтобы найти хоть что-нибудь. Ставим бряк на GetDriveTypeA (bpx GetDriveTypeA). Жмем F5 и сразу же попадаем в kernel32. Жмем F12, чтобы оказаться в конце функции. Далее F10 (выполняем команду ret, на которой окажемся после F12) и переходим в код exe’шника, сразу же после вызова GetDriveTypeA. Вот что мы видим:


0056F05C … MOV BYTE [EBX+B0]
………………………вырезано……………………………..
0056F067 … JNL SHORT MaxPayne.0056F1A7
………………………вырезано……………………………..
0056F07B 50 PUSH EAX
0056F07C FF53 0C CALL DWORD PTR DS:[EBX+C]
;GetDriveTypeA - отсюда мы только что вышли
0056F07F 83F8 05 CMP EAX,5
0056F082 74 02 JE SHORT MaxPayne.0056F086
0056F084 ^EB D6 JMP SHORT MaxPayne.0056F05C
0056F086 6A 00 PUSH 0

………………………вырезано……………………………..
0056F09D 8D83 80000000 LEA EAX,DWORD PTR DS:[EBX+80]
0056F0A3 50 PUSH EAX
0056F0A4 FF53 14 CALL DWORD PTR DS:[EBX+14]
;GetVolumeInformationA
0056F0A7 85C0 TEST EAX,EAX
0056F0A9 ^74 B1 JE SHORT MaxPayne.0056F05C
0056F0AB 8D8B 90000000 LEA ECX,DWORD PTR DS:[EBX+90]
0056F0B1 8D93 A0000000 LEA EDX,DWORD PTR DS:[EBX+A0]
0056F0B7 8A01 MOV AL,BYTE PTR DS:[ECX]
0056F0B9 3A02 CMP AL,BYTE PTR DS:[EDX]
0056F0BB ^75 9F JNZ SHORT MaxPayne.0056F05C
0056F0BD 84C0 TEST AL,AL
0056F0BF 74 04 JE SHORT MaxPayne.0056F0C5
0056F0C1 41 INC ECX
0056F0C2 42 INC EDX
0056F0C3 ^EB F2 JMP SHORT MaxPayne.0056F0B7
0056F0C5 6A 00 PUSH 0

………………………вырезано……………………………..
0056F0DC 50 PUSH EAX
0056F0DD FF53 04 CALL DWORD PTR DS:[EBX+4]
;CreateFileA
0056F0E0 83F8 FF CMP EAX,-1
0056F0E3 ^0F84 73FFFFFF JE MaxPayne.0056F05C
0056F0E9 50 PUSH EAX
0056F0EA 6A 00 PUSH 0
0056F0EC 50 PUSH EAX
0056F0ED FF53 10 CALL DWORD PTR DS:[EBX+10]
;GetFileSize
0056F0F0 8BF8 MOV EDI,EAX
0056F0F2 FF13 CALL DWORD PTR DS:[EBX]
;FindCloseChangeNotification
0056F0F4 8BC7 MOV EAX,EDI
0056F0F6 3B83 70020000 CMP EAX,DWORD PTR DS:[EBX+270]
0056F0FC ^0F85 5AFFFFFF JNZ MaxPayne.0056F05C



Напротив вызова всех функций (call …) я написал их название. Это не обязательно, просто я хотел показать, какие именно функции могут использоваться для проверки наличия CD диска.

Поехали дальше. Из лисинга мы видим 5 переходов на адрес 0056F05C. А чуть нижи этого адреса идет команда JNL SHORT MaxPayne.0056F1A7, при выполнении которой нас кидает прям на вызов до боли известного сообщения. А это значит, что переходить на 0056F05C нам не надо. Для этого необходимо изменить переходы (или условия переходов) которые я выделил. Как это сделать? Мне кажется, что удобнее всего, это, стоя на переходе, изменить условие перехода, т.е. флаг нуля (Z). В TRW клацаете мышкой на него и жмете Enter. Вот и все, после всех этих изменений игрушка не будет просить диск. Можно было бы, в принципе, написать лоадер и забить на этот протектор. Но так ведь не интересно:) . (Хотя лоадер я все же написал:) )

После написания лоадера я все таки решил распаковать всю эту байду. И начал опять трейсить от EP, обходя циклы. Скажу, что до нужного нам места будет всего 2 цикла. Но после всех этих циклов, мы видим знакомые адреса!!! Да это же проверка на наличие CD, которую мы уже с вами обошли. Значит, сама проверка находится в секции протектора. И знаете, что это значит?! А то, что, сняв протектор, мы уберем и проверку CD. Вот почему у меня вначале ничего не вышло! Таким образом, все, что мы делали до этого, не было бесполезной тратой времени. Так как, не пройдя защиту, мы не доберемся до OEP. Как минуть все эти проверки мы уже знает, так что проходим их.

Далее идет уже распаковка самого кода игрушки. Там будет только 1 цикл. После него мы видим:


0056F199 ^75 98 JNZ SHORT Back_Max.0056F133 ;последняя команда цикла
0056F19B 83C4 08 ADD ESP,8
0056F19E 8B43 7C MOV EAX,DWORD PTR DS:[EBX+7C]
0056F1A1 5E POP ESI
0056F1A2 59 POP ECX
0056F1A3 5B POP EBX
0056F1A4 FFE0 JMP EAX
;А то то, что и искали
0056F1A6 C3 RETN


Вот мы и добрались до самого заветного. Трейсите до команды JMP EAX. Потом берете бумажечку и записываете значение регистра EAX - это и есть OEP. У меня OEP=4D30E0. Все, что нам осталось, так что приостановить действие программы. В TRW2000 это делается элементарно просто: пишите команду SUSPEND и жмете Enter.

Далее дампите наш exe’шник (я юзал PETools) и пишите новое значение для Entry Point (тут я брал PEditor). Вот и все, играйтесь на здоровье!!!

Тем, кому не интересно делать все это руками или просто лень можете использовать тулзы, которые это сделают за вас. Но название не говорю, так как сторонник того, чтобы делать все ручками:) Если надо, сами найдете.

P.S. Ну что можно сказать по поводу такой защиты?... Хотя новичкам ведь тоже надо на чем-нибудь учиться:)



Обсуждение статьи: Unpacking DDeM >>>


Комментарии к статье: Unpacking DDeM

xBunny 27.06.2004 23:54:08
IMHO cарказм типа \"Ну что можно сказать по поводу такой защиты?\" неуместен. оригинальный MaxPaine был зашит СэйвДиском, a уже потом на версию с уже снятой защитой, поставили \"защиту от дурака\" и закатали на болванку. Кстати это делается невсегда (волков за это многие любят и ценят :)




Эта защита ставится от дурака.Волки это классная фирма.


---
ViNCE [AHT] 28.06.2004 12:31:04
Помниться статья на аналогичную тему -> www.xtin.org
---
SLV 28.06.2004 14:00:12
типа Пиратские замашки, как-то так статья называлась
---
Nabu 28.06.2004 20:47:38
Насчет статьи не знаю: я это все сам писал.
А насчет оригинальных дисков могу сказать одно: у меня на них просто денег нет:)
---
Jonson 28.06.2004 05:40:31
Подобную \"ботву\" снимал с диска NHL2004. Сообщение о отсутствии диска совпадало с точностью до буквы. (кстати первые два цикла осуществляли расшивровку кода в памяти), Но я не долго не думая дошел до OEP, сдампил, потом от ImpRec-ил и... получил сообщениео о отсутсвии диска уже на англиском (т.е. сработала уже оригинальная проверка CD), но там тоже ничего нового... Просто заNOPил один call и все запахало....
---
RottingCorpse 29.06.2004 15:35:13
А то DDEM посвежее попробуйте :)
Та же муть
---
MARcoDEN 01.07.2004 16:27:37
Последние версии этого протектора стали дополнительно поливаться AsPack\’ом.
Кстати, достаточное подробное руководство по снятию DDeM\’a было опубликовано достаточно давно на хакере (http://www.xakep.ru/post/20015/default.htm).
---
SLV 17.07.2004 12:17:09
2MARcoDEN: The system cannot find the file specified.
---
MANtiCORE 24.07.2004 15:06:45
а где бы взять этот DDeM? а тоя нигде его не встречал в природе ...
---
kate 14.11.2005 13:16:42
я ничего не поняла , ни одного слова. Но все равно интересно потому что это написал имено ты!!!!!!!!!!!!
---
Return 27.05.2009 01:04:30
Так,с запозданием напишу.))))Хорошая статья,незачем придираться к автору,эта защита,например,стоит на гаме "Indiana Jones and the Emperor's Tomb",она тоже от этой же фирмы и там почти такое же сообщение выдаётся.)))
---
Return 27.05.2009 01:05:55
Так,с запозданием напишу.))))Хорошая статья,незачем придираться к автору,эта защита,например,стоит на гаме "Indiana Jones and the Emperor's Tomb",она тоже от этой же фирмы и там почти такое же сообщение выдаётся.)))
---
Return 27.05.2009 01:06:58
Так,с запозданием напишу.))))Хорошая статья,незачем придираться к автору,эта защита,например,стоит на гаме "Indiana Jones and the Emperor's Tomb",она тоже от этой же фирмы и там почти такое же сообщение выдаётся.)))
---
Return 27.05.2009 01:10:12
Так,немного запоздало напишу.)))Нормальный туторчик,на автора нчего наезжать,есть такой прот и стоит он даже на игре "Indiana Jones and the Emperor's Tomb" и там примерно такое же сообщение выдаётся,когда без диска запускаешь.)))
---
Return 27.05.2009 15:44:25
Немного так запоздало напишу...Хороший тутор,незачем умничать,с такой защитой ещё игра "Indiana Jones and the Emperor's Tomb" и примерно такое же сообщение выдаёт.
---

Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS