Распаковка PC guard в ListMate Pro Demo
Автор: Hex
Инструменты: Softice, Icedump, Hex Workshop, ProcDump.
Про PC guard я не видел туториалов, по этому напишу сам. В ListMate тут идет довольно старая версия PC guard. Как написано в pcgw32.dll:
PCGW32.DLL (c) 1998/1999 by Blagoje Ceklic all rights reserved
|
Но прога Listmate идет от 2002 года. Так что можно сказать ломаем новое :). Тем более все эти раскриптовщики для PC guard не берут его... прям даже странно... Где же обратная совместимость?
Ну ничего страшного. Сначала запускаем Icedump, без него Listmate ваще не запускается, сечет айс зараза. Для начала получим oep и снимем дамп. Можно сделать /tracex 400000 4E0000 и подождать минут 20. А можно потрейсить(F8) от окна, которое выводит PCGuard, и минут через 5 тоже прийти к энтрипоинту по адресу 4A305C. Снимаем дамп (icedump). Потом в Hex workshop'e копируем PE от закриптованного файла и ставим его вместо заголовка нашего дампа. Procdump'om делаем в дампе стандартную процедуру Physical Size:=Virtual Size и Offset:=RVA, для всех секций. Ресурсы сразу станут на место и у нашего дампа появится иконка. Дальше остается испорченый импорт. Не пытайтесь восстанавливать через ImpRec и Revirgin! Портится окончательно :( Я давно заметил что они как-то глючно импорт восстанавливают. А тут они вобще все к черту портят. Тут делаем не так... Запускаем наш дамп. Он глюканет. Разберемся где оно глюканет. Как раз на импорте, будет jmp [4b1xxx]. Это как раз импорт. Советую прочесть про импорт на reversing.net в статьях. Дальше просматриваем память вверх от этого 4В1xxx. И находим что импорт начинается с 4B1000 и его длина 12С. Пишем эти данные в Import table (Directory) юзая Procdump. Если глянуть на эту таблицу то становится видно что из нее специально вытерты все имена функций и DLL. Похоже PC Guard это делает сам "вручную". Это можно легко проверить. Ставим BPM 4B1000. Запустив Listmate получаем облом - PC Guard блокирует BPM. И кидает нас на код такого рода:
MOV DR3, EAX <-тут выдает ошибку
MOV DR5, EAX
MOV DR6, EAX
MOV DR7, EAX
NOT ESP
NOT ESP
NEG ESP
NEG ESP
INC ESP
DEC ESP
POPAD
POPFD
MOV [EDX],CH
|
Обойти это дело очень просто нужно просто EIP поменять на адрес команды MOV [EDX],CH. И прога пойдет дальше.
Сработает BPM. Посмотрим нашу таблицу... Имена есть! Но она обраывается по адресу 4B2000. Делаем BPB 4B2000. Когда сработает BPM 4B2000, то имена в блоке до адреса 4B2000 будут уже затерты. Но после 4B2000 мы увидим продолжение таблицы с заполнеными именами, которая теперь оборвется по адресу 4B3000. Ну тут уже и ежу понятно, что дальще будет тоже самое. BPM 4B3000 и видим последний кусок. Теперь перезапустим прогу и просто по кусочкам сохраним наши блоки по мере того как они заполнены функциями. А потом соеденим их в Hex workshop. Теперь у нас есть заполненная таблица импорта. Осталось только заменить таблицу импорта и все. Заменяем и радуемся распакованной прогой. Дальше там уже DEDE в руки и делаем из Demo - полную.
P.S. Сочитание дурацкое какое-то "Pro Demo". Тут уж или про или демо...
|