Как известно, 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.

Запускаем профиксенный дамп - работает.

Check Also

Изучаем ПЛК. Краткий гайд по поиску уязвимостей в промышленных контроллерах

Если ты думаешь, что контроллеры, которые ставят в зданиях и на заводах, защищены намного …

Оставить мнение