Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Упакуем за раз!

GPcH (admin@dotfix.net)

Спецвыпуск: Хакер, номер #057, стр. 057-062-5


Ну а чтобы не было лишних вопросов к названию, объясню: программа была названа по первым буквам ников его разработчиков: GPcH, Holy_Father (автор Morphine'а), FEUERRADER (автор AHPAck'а).

URL: http://reversing.dotfix.net

Выбери себе упаковщик

Какой же пакер выбрать, спросишь ты? Вопрос сложный. Из проверенных и хороших рекомендую UPX и FSG. Если нужно экстрасжатие, хватай nSpack или Upack. Первый тестировался мной на многих осях - глюков не замечено, очень советую. Если есть желание не только запаковать, но и немного защитить файл, причем бесплатно, бери tElock или GHF Protector. Если нужен пакер, легко дорабатывающийся под себя и распространяющийся в исходниках, то тут все зависит от того языка программирования, который ты знаешь. Если это Delphi, то используй GHF Protector, если это ассемблер - тебе наверняка придется по душе PeX. Свой выбор я уже давно сделал в пользу nSpack, однако меня не сильно порадовало, что он стал платным и теперь продается по $30 штука.

Что такое Generic Unpacker?

Generic Unpacker'ы – это универсальные распаковщики, которые, в принципе, могут кое-как распаковать любой пакер и восстановить таблицу импорта. Ясен пень, такие распаковщики не ребилдят ресурсы, поэтому если ты хочешь распаковать программу для ее последующей русификации в Restorator'е, то они не помогут, хотя сэкономят время для взломщика программных защит: ему на ресурсы наплевать, лишь бы код был распакован. Лучшими представителями таких распаковщиков являются Quick Unpack by FEUERRADER, GUW by Christoph Gabler, а также плагин для распаковки программ, встроенный в файловый анализатор PEiD. Какой из них круче, решишь сам.

Мнение эксперта

Упаковка исполняемых файлов преследует две цели: уменьшить размеры файла на диске и затруднить исследование машинного кода. За это приходится платить замедлением загрузки и ростом потребностей в оперативной памяти. Неупакованный файл Windows автоматически подгружает с диска по мере необходимости, а при вытеснении из памяти просто передает страницы памяти другому процессу (разумеется, предварительно обнулив их). Упакованный файл грузится в память целиком, распаковывается, потребляя еще больше памяти, и, что самое неприятное, при его вытеснении Windows вынуждена сбрасывать страницы памяти в файл подкачки, так как взять их непосредственно с самого файла уже не получится - он же упакован!

Остается только затруднение анализа. Однако для всех популярных упаковщиков существуют автоматические распаковщики, а если и не существуют, файл нетрудно распаковать и вручную. Главное - найти точку входа. Это несложно. В начале каждой нормальной программы присутствует библиотечный код, который легко опознать по сигнатуре или по вызову API-функции GetModuleHandleA.

Основную сложность представляет восстановление таблицы импорта (многие упаковщики затирают ее после распаковки), PE-заголовка с таблицей секций (упаковщики издевается над ней тоже) и, возможно, атрибутов страниц памяти, которые модифицируются упаковщиками, как им заблагорассудится. К счастью, все эти операции нетрудно автоматизировать, и уже существует множество утилит, освобождающих хакеров от бремени ручного труда. К тому же для исследования программы иметь работоспособный дамп совершенно необязательно! Достаточно просто снять полный дамп процесса и загрузить его в дизассемблер.

Назад на стр. 057-062-4  Содержание  Вперед на стр. 057-062-6