Как известно, The Egoiste, автор telock, перестал публиковать версии этой замечательной
защиты начиная с версии 0.98. Ввиду сложившейся ситуации с автоматическими
распаковщиками, теперь он выпускает только персональные версии для узкого круга
лиц. Группа TMG, где он является лидером, тоже стала защищать свои релизы от
редактирования ресурсов, чего они все так панически боятся, с помощью новой версии
telock. Один из релизов TMG мы и возьмем в качестве подопытной программы.
Это будет TMG CloneDVD 1.1.6.1 Keygen.
Инструменты, которыми мы будем пользоваться:
- отладчик SoftIce
- PE Editor
- Import Reconstructor 1.6 Final
- PEID v. 0.8
- любой hex-редактор
Открываем clonedvd.exe в PEID v.0.8, видим в информации "tElock 0.99 -> tE!", то что
нам надо. Теперь, не закрывая PEID, делаем следующие: в меню PEID
выбираем OEP модуль, запускаем немного, ждем и о-па: "OEP Found - 405520", вот мы и нашли
OEP!
Теперь вызовем SoftIce и поставим bp на GetProcAddress, чтобы защита telock
ничего не заподозрила введем следующее "bpx GetProcAddress+3" и отпустим
SoftIce. Запустим clonedvd.exe и тут же окажемся в отладчике, выключим поставленный bp
(bd*) и поставим точку останова на уже известный нам OEP, "bpx 405520", снова отпустим
SoftIce и когда он всплывет мы будем точно по адресу
OEP. Теперь зациклим программу, введем "e eip", затем EBFE и выйдем из отладчика.
017F:00405520 | 55 | PUSH EBP; OEP, здесь зациклим программу |
017F:00405521 | 8BEC | MOV EBP,ESP |
017F:00405523 | 6AFF | PUSH FF |
017F:00405525 | 68E0614000 | PUSH 004061E0 |
017F:0040552A | 68AE564000 | PUSH 004056AE |
017F:0040552F | 64A100000000 | MOV EAX,FS:[00000000] |
017F:00405535 | 50 | PUSH EAX |
017F:00405536 | 64892500000000 | MOV FS:[00000000],ESP |
017F:0040553D | 83EC68 | SUB ESP,68 |
017F:00405540 | 53 | PUSH EBX |
017F:00405541 | 56 | PUSH ESI |
017F:00405542 | 57 | PUSH EDI |
Настало время дампа. Дамп будем делать все тем же, мною любимым, PE Editor'ом.
Хотя те, кто не хочет со всем этим возиться могут скачать LordPE и без всяких проблем
сделать дамп. Мне же это сделать мешает мой устоявшийся консерватизм.
Запустим PE-Editor, перейдем в окно задач "tasks" выберем наш процесс и сделаем
ему "full dump", возникнет ошибка, но дамп все равно создастся. Это противодамповая
защита telock. Теперь исправим все это в дампе.
Откроем сделанный нами дамп в PE Editor'е и зайдем в таблицу секций,
она будет выглядеть следующим образом:
Section | Virtual Size | Virtual Offset | Raw Size | Raw Offset | Characteristics |
.text | 00005000 | 00001000 | 00002E00 | 00001000 | C0000040 |
.rdata | 00001000 | 00006000 | 00000600 | 00003E00 | C0000040 |
.data | 00008000 | 00007000 | 00000600 | 00004400 | C0000040 |
.rsrc | 00018000 | 0000F000 | 00005800 | 00004A00 | C0000040 |
00003000 | 00027000 | 00002A00 | 0000A200 | C0000040 | |
00000000 | 00000000 | 00000000 | 00000000 | 00000000 | |
00000000 | 00000000 | 00000000 | 00000000 | 00000000 |
...
Имеется 5 непустых секций, одна из которых секция протектора, ее можно без труда
отрезать, но т.к. никакой весомой нагрузки
она не представляет, делать мы этого не будем. Сделаем же следующее: Raw Size = Virtual Size, Raw Offset = Virtual Offset,
нажмем правой клавишей на каждую секцию и выберем dumpfixer, таблица примет вид:
Section | Virtual Size | Virtual Offset | Raw Size | Raw Offset | Characteristics |
.text | 00005000 | 00001000 | 00005000 | 00001000 | C0000040 |
.rdata | 00001000 | 00006000 | 00001000 | 00006000 | C0000040 |
.data | 00008000 | 00007000 | 00008000 | 00007000 | C0000040 |
.rsrc | 00018000 | 0000F000 | 00018000 | 0000F000 | C0000040 |
00003000 | 00027000 | 00003000 | 00027000 | C0000040 | |
00000000 | 00000000 | 00000000 | 00000000 | 00000000 | |
00000000 | 00000000 | 00000000 | 00000000 | 00000000 |
...
Теперь обратим внимание на пустые секции, это тоже очередной трюк защиты.
Выйдем из таблицы секций, в главное окно PE Editor'а, и посмотрим поле
"Number of Sections" (количество секций) в нашем дампе, оно равно FE1C,
изменим это значение на реальное количество
- 5, сохраним изменения, нажмем "apply changes" и выйдем из PE Editor'а. Дамп готов.
Настало время импорта. Импорт будем восстанавливать с помощью ImportReconstructor'а, запустим ImpRec
и выберем наш зацикленный процесс, введем в поле OEP: 00005520, нажмем
"IAT AutoSearch", "GetImport", "ShowInvalid" и сделаем им Trace Level 3 (Trap Flag).
После этого снова жмем "ShowInvalid" и делаем "Cut Thunk(s)". Все импорт готов.
Теперь вставляем его в наш дамп "fix dump". Осталось с помощью любого hex-редактора
заменить байты по OEP с EBFE на 558B.
Запускаем профиксенный дамп - работает.