Распаковка конверта Guardant при наличии ключа или эмулятора

Внимание: Данная статья предназначена только для эмулирования легально купленных ключей, которые по каким-либо причинам не могут быть использованы в компьютере (отсутствие порта, его некорректная работа или занятость). Автор не несет никакой ответственности за нецелевое использование нижеизложенного материала.

Используемые инструменты (помимо защищаемого приложения :):

PEiD v0.94

PE Tools v1.5 Xmas Edition

SAAT Viewer 0.2 by Larry

Одной из основных проблем в подавляющем числе случаев использования табличной эмуляции является наличие конверта Guardant на защищаемом приложении. Если с конвертами до версии 4.44 включительно успешно справлялась утилита Guardant / Novex envelope killer 1.41 by infern0 / TSRh team (доступная широкой публике), то с появлением конвертов новых версий ситуация изменилась. Теперь для снятия конверта можно воспользоваться двумя методами: либо сделать это автоматической утилитой (которая недоступна широкой публике), либо снять конверт при наличии оригинального ключа или полного эмулятора. О втором методе речь пойдет ниже. ;)

1. Определение наличия конверта на исполняемом приложении

Определить наличие конверта на исполняемом приложении можно несколькими способами:

- Посмотреть, находится ли в папке с приложением файл novex32.dll (для приложений win32), novex.exe (win16) или nk.dat (DOS). Это файлы внешней вакцины автоматической защиты, которые необходимы для работы автоматической защиты;

- Программа при запуске без ключа или эмулятора отображает MessageBox с текстом типа "Guardant dongle not found or printer is OFF!" или нечто подобное;

- Самый однозначный способ (в отличии от предыдущих) - найти последнюю секцию в файле, которая, в случае наличия конверта, начинается с символов "SAAT".

Если Вы обнаружили один или несколько признаков наличия конверта, можете читать дальше. ;)

2. Снятие конверта с файла

Скачиваем SAAT Viewer 0.2 by Larry, распаковываем в папку с программой, запускаем её, выбираем файл с конвертом. При желании можно сохранить расшифрованную секцию SAAT на диск для дальнейшего изучения.

Программа покажет примерно следующий результат:

[Скриншот]

Выписываем результат работы программы. Запускам PEiD и подгружаем в него наше защищаемое приложение. Обратите внимание, что Вы должны указать программе PEiD путь к файлу с конвертом, который находится в каталоге установленной программы, а не скопировать защищенный файл в папку с PEiD и исследовать его.

Нажимаем на кнопку ->, выбираем 'Plugins' -> 'PEiD Generic Unpacker'. Далее позволяем программе обнаружить Original Entry Point и проверяем, чтобы значение было равно сумме значений ImageBase и Original Entry Point программы SAAT Viewer (в случае расхождения вписываем верное значение в поле Override to:). Нажимаем Unpack, на появившееся окно 'Rebuild Imports with ImpREC?' отвечаем отказом. Лицезреем в папке с программой распакованный дамп программы (к имени оригинального файла добавляется '.unpacked.exe' в случае исполняемого файла). Теперь осталось только восстановить верные значения для таблицы импорта и релоков.

Выбираем в PE Tools меню Tools --> PE Editor. Загружаем в него наш дамп программы. Заходим в Optional Header и меняем значение области Entry Point на правильный (в случае, если распаковщик PEiD указал неверный адрес) - значение Entry Point в программе SAAT Viewer без учета ImageBase.

Нажимаем OK, заходим в Directories и меняем значения RVA Import Directory, RVA Base Relocation Table, Size Import Directory и Size Base Relocation Table на те, что мы получили в программе SAAT Viewer.

Конверт Guardant успешно снят, в чем мы можем убедиться, загрузив файл в PEiD:

[Скриншот]

Вместо строки Nothing found * видим название среды, в которой была разработана программа.

3. Зачем и кому всё это нужно

Здесь постараюсь пояснить некоторые возможные вопросы и замечания по статье:

Во-первых, статья рассчитана на людей, слабо ориентирующихся в вопросах реверсинга и анализа ПО. Именно поэтому я написал небольшую утилиту, отображающую данные, которые можно искать в отладчиках, путем сложного глубокого анализа. С другой стороны, я не стал включать в утилиту другую полезную информацию, которая находится в секции SAAT защищаемого приложения, поскольку рядовому пользователю она вряд ли понадобится.

Во-вторых, я мог написать автоматическую утилиту для снятия конверта Guardant при наличии ключа, или даже выложить автоматическую утилиту, которая распаковывает конверты методом брут-форса без ключа. Но практика показывает, что подобные "подарки" ни к чему полезному не приводят. Эта статья показывает, что нет ничего невозможного. Если кого-то действительно заинтересует данная тема, тот без особых усилий сможет написать вышеуказанные утилиты сам.

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

Вы также можете попробовать распаковать конверт Guardant, используя статью по снятию HASP Envelope. Принцип ручной распаковки HASP и Guardant Envelope выглядит почти один-в-один.

16-10-2006
Larry