Современные решения

для защиты Windows приложений

и восстановления исходного кода
Автор: Сергей Чубченко. Дата публикации: 19.02.2006

Упаковка приложений


Научитесь делать компактным свой код

Не возникало ли у Вас желания уменьшить размеры своих программ, не используя при этом всяких архиваторов? Думаю Вы не раз задумывались над этим, но не могли найти максимально подробную информацию по этому вопросу. В этой статье я попытаюсь дать ответ наиболее полно, разобрав 18 программ, способных уменьшить размеры Вашего продукта. Думаю это поможет сделать правильный выбор среди такой огромной массы EXE упаковщиков.

Введение

Часто ли Вы слышите о способах оптимизации кода? А как насчет огромных статей по оптимизации? Но это радует далеко не всех. Ведь кому хочется месяцами оптимизировать код, чтобы добиться уменьшения его на пару десятков лишних килобайт. Особенно размеры программ "радуют" программистов на дельфи и билдере. Простенькое окошко с кнопкой - это уже 300 с лишним килобайт кода. Какого кода спрашивается, если Вы и не писали там почти ничего? Я не буду здесь рассматривать особенности VCL и рассказывать, почему все таки кода так много для таких простых действий, а лучше расскажу как уменьшить размеры конечных программ чуть ли ни в два раза, а иногда и больше. Так зародилось направление EXE упаковки. Некоторые программисты стали изучать структуру формата EXE файлов и на основе этих данных писать упаковщики. В отличии от rar’а и zip’а нужно было написать не только алгоритм упаковки, но и написать код загрузчика, который распакует программу в оперативную память и передаст управление на нее. В этом и есть небольшая особенность EXE упаковщиков от файловых архиваторов. Как бы это странно не показалось - до сих пор находятся люди, которые обеспокоены размерами EXE файлов и которые пишут все новые и новые EXE упаковщики. Отсюда можно сделать вывод, что ассортимент EXE пакеров довольно высок и не лишним будет поговорить о каждой такой программе в отдельности, сделав сравнение их возможностей. Этим мы сейчас и займемся.

UPX by Markus Oberhumer & Laszlo Molnar

UPX

Данный упаковкщик думаю знают все. Последняя его версия на момент написания статьи - 1.93. Довольно неплохо пакует, быстро развивается, периодически выходят новые версии. Также на сайте разработчика лежит почти полный исходный код упаковщика (без библиотеки NRV). Что касается совместимости - и сам пакер и упакованные EXE файлы запускаются под всеми версиями Windows. Если говорить о степени сжатия программного кода, то UPX поддерживает 9 режимов упаковки. Тот что быстрее пакует - хуже сжимает и наоборот. Но даже с максимальным сжатием UPX не держит первенства по крутости упаковки, хотя весьма на уровне. Что касается распаковки, то пакер поддерживает сам эту возможность и без труда может восстановить до исходного состояния обработанный собой файл (ключ командной строки "upx -d <имя файла>").

Сам пакер можно скачать с upx.sourceforge.net

ASPack by Alexey Solodovnikov

ASPack

Тоже знаменитый пакер. Последняя версия - 2.12. Что касается его развития, то оно закончилось довольно давно. Пакер уже несколько лет не обновлялся, хотя и используется многими. Пакует средне. Лучше всего сжимает Delphi программы и имеет два режима сжатия: "обычный" и "максимальное сжатие". Имеется многоязычный интерфейс и некоторые функции для настройки. Ни о каких исходниках речи нет - программа распространяется по шароварному типу и требует покупки лицензии. Что касается распаковки, то на сегодняшний день мне известно более 10 универсальных распаковщиков ASPack’а, лучшие из которых это: Caspr и Stripper v2.7 (v2.11 и старше не предназначена для снятия ASPack’а - имейте это ввиду).

Сам пакер можно скачать с www.aspack.com

exe32pack by SteelBytes

Довольно редкий пакер. Последняя версия, которую мне удалось найти - 1.38. Пакер несколько лет не обновлялся, но при этом довольно неплохо пакует и оптимизирует файлы. Интерфейс программы консольный. Насколько я понял - разработка коммерческая, но куда перечислять деньги для покупки - не понятно. Степень сжатия иногда даже лучше чем у UPX’а. Совместимость тоже неплохая: все тестируемые EXE файлы работали у меня и на линейке Win9x и под XP. Универсальных распаковщиков для данного пакера не встречал.
Сам пакер можно найти через www.google.com на сайте с одним из каталогов упаковщиков, среди которых будет этот, так как своего сайта насколько мне известно у данного пакера нет.

FSG by bart/xt

FSG

Известный в кругах демомейкеров пакер. Последняя версия 2.0. С прошлого года не обновлялся, хотя как мне кажется, лишь потому что не было повода. Отличное решение для упаковки маленьких программ, написанных на ассемблере или c++. Наверное главная достопримечательность данного пакера - размер его загрузчика. Loader данного пакера занимает всего 158 байт. Этих байт реально хватает для распаковки и создания импорта. Такой оптимизации можно увидеть только в FSG. Степень сжатия изменять нельзя, при этом дефолтная обходит почти все пакеры из данного обзора а иногда все имеющиеся. Совместимость на очень высоком уровне. Распаковщиков специально для последней версии не видел, но generic unpacker’ы распаковывают его на ура. Движок упаковщика - aplib.

Сам пакер можно скачать с xtreeme.prv.pl

MEW by Northfox

MEW

Малоизвестный в программерской среде, динамично развивающийся пакер. Последняя версия 11.1.2. Программа также не обновлялась почти год, но насколько мне известно автор сейчас работает над созданием протектора. Программа имеет отличную степень сжатия. Главная особенность и крутость у данной программы благодаря использованию одновременно двух движков упаковки - aplib и lzma. Последний используется в архиваторе 7z и уже давно известен своей чрезвычайно высокой степенью сжатия. Но данный движок медленный, потому запакованные программы хоть и имеют меньший, по сравнению с другими пакерами, размер, зато загружаются сравнительно медленнее неупакованных, а это огромный минус. Хотя если lzma отключить в настройках пакера - все ok, но и размер упакованных программ становится как у всех на движке aplib. Так что тут сами выбирайте что важнее - размер программы или ее скорость запуска. Распаковщика для последней версии не видел, но generic unpacker’ы опять на высоте.

Сам пакер можно скачать с northfox.uw.hu

NeoLite by NeoWorx inc

NeoLite

Еще один малоизвестный пакер. Последняя версия - 2.0. Пакер не обновлялся уже 5 с лишним лет и о нем уже давно забыли. Пакует неплохо, имеет много настроек, может распаковывать упакованные собой файлы. Главная особенность - может упаковать не только код, но и экстра данные, что пригодится при паковке программ, написанных на Foxpro и роликов, сделанных на Flash’е. Программа коммерческая, потому все упакованные программы при запуске выдают диалог с сообщением о незарегистрированности. Защищенные Demo версией программы работают под всеми версиями Windows. Что касается движка компрессора, то авторы об этом умалчивают.

Пакер можно скачать отсюда: www.neoworx.com

nSPack by Liu Xing Ping

nSPack

На мой взгляд самый лучший пакер и по сжатию и по совместимости. Последняя бесплатная версия 1.3, последняя платная - 2.3. Несмотря на малоизвестность пакера, автор его вовремя понял, что такой классный компрессор нельзя распространять за бесплатно. Пакер динамично развивается, хотя кроме изменения интерфейса я мало что могу сказать об улучшениях платной версии от бесплатной, так как пакер и v1.3 был всесторонне хорош. Все это благодаря не только использованию двух движков упаковки - aplib и lzma, но и их оптимальному использованию. В общем must have. Распаковщиков также специальных нет, а generic его берут без проблем.

Коммерческую версию можно взять здесь: www.nsdsn.com

PECompact by Bitsum Technologies

PECompact

Относительно известный пакер. Последняя версия - 2.5. Единственный в этом обзоре имеет немало интересных фишек. Главная фишка - пакетное сжатие. Вы можете выбрать для сжатия сразу несколько программ и запаковать их в момент. Второй отличительной возможностью является довольно широкий выбор движков компрессинга данных. Среди них есть уже известные aplib и lzma, а также есть свой - ffce. Совместимость также довольно хороша - программы нормально запускаются под всеми поддерживаемыми виндами. Главный минус, который ограничивает использование этого пакера - его платность. Что касается распаковщиков - есть UnPecompact by yoda/f2f, также неплохо справляется универсальный quick unpack v0.7

Пакер можно взять здесь: www.bitsum.com

PE Diminisher by Teraphy

PE Diminisher

Малоизвестный пакер. Последняя версия - 0.1. Честно говоря - пакер не впечатляет. Совместимость слабая. Некоторые программы перестают работать после упаковки и сжатие не особенно сильное. Зато бесплатно. Для разнообразия рекомендую посмотреть, но использовать лучше что-нибудь пофункциональнее.

Взять пакер можно с www.phrozencrew.com/teraphy

PEQuake by fORGAT/uNKNOWN

PEQuake

Прикольный китайский пакер. О версии ничего сказать не могу так как данный пакер выкладывался всего один раз и то не на сайте разработчика, а на форуме. Почему я решил его описать? Да потому что неплохой пакер, хотя жмет средне. Главным приколом является то, что автор обошел тормознутость движка компрессинга статусбаром, который каждый раз пробегает по экрану при загрузка EXE файла. Интересное решение выбрал автор, что сказать. Распаковщик к нему тоже есть, но в виде скрипта к Olly Debugger’у, который написал Mario555. Врядли этот пакер имеет широкое применение, потому не вижу смысла давать на него ссылку (при желании и пакер и анпакер можно найти через google).

PESpin by cyberbob

PEQuakePESpin

Новый пакер, который сейчас довольно динамично пишется. Последняя public версия 1.1. 1.2 уже есть, но автор ее не распространяет. Программа бесплатна и имеет нормальную совместимость. Но главный минус, который ограничивает использование пакера - запакованные программы жутко тормозят даже на одноядерном Pentium 4. Используемый движок - aplib. Распаковщика к новой версии я не видел, но сам пакер на форумах уже вовсю распаковывают.

Взять пакер можно отсюда: pespin.w.interia.pl

PEQuakePESpin by Ian Luck

PEQuakePESpin

Известный в свое время пакер. Последняя версия, которую видел - 2.2, хотя слышал что программа недавно обновилась. Имеются 9 режимов упаковки. Но первый от последнего практически никак не отличаются по степени сжатия, зато скорость сжатия уменьшается в разы, потому можно смело использовать 1 уровень. Имеется и GUI и консольная версия. Причем GUI довольно удобный и прикольно сделаны подсказки - не запутаешься. Есть проверка CRC, отсюда если Вашу программу заразит вирус - она просто не запустится, а загрузчик выведет предупреждение, что возможно имеет место заражение вирусом. Мелочь, а приятно. Да и совместимость радует. Один минус - лицензия стоит недешево. Распаковщики к пакеру есть, да и generic unpacker’ы тоже неплохо справляются.

Взять пакер можно отсюда: www.un4seen.com/petite/

PeX by bart^CrackPl

PeX

Практически никому неизвестный пакер. Последняя версия, которую видел - 0.99 beta. Продукт меня сильно порадовал. Пакует не сильно, зато распространяется с исходником на ассемблере и имеет неплохую совместимость и с Win9x и с NT/2k/XP. Потому, если знаете ассемблер - можно смело доработать пакер под себя и использовать. Еще пакер умеет протектить код от распаковки, отсюда не могу не порекомендовать его тем, кто хочет съэкономить на внешней защите для своего проекта с возможностью последующей доработки. В качестве движка используется aplib. Распаковщиков не видел. Кстати если будете им паковать свои программы, не забудь в настройках поставить галочку "Loader code alignment(Req. for WinNT)" иначе под NT линейкой пакованные программы работать не будут.

Пакер ищите через поисковики, так как сайта у него своего нет.

PKLITE32 by PKWARE

PKLITE32

Наверное старейший пакер, известный еще со времен MS DOS. Я помню старый добрый pklite. C переходом под win32 программа стала шароварной. Последняя версия, которую можно найти датирована 1999 годом и с тех пор пакер не обновлялся. Рекомендую его посмотреть лишь для того, чтобы знать, с чего все начиналось. Особых настроек и крутого сжатия тут нет, но какой крутизны можно ждать от такого старого пакера? Что касается распаковщиков, то они есть.

Сам пакер можно скачать отсюда (если сайт еще работает): www.pkware.com

tElock by tE!

tElock

Довольно известный пакер/протектор. Развивается время от времени. Особенно известны его версии 0.71 и 0.98. Кроме паковки еще умеет и защищать код от распаковки, хотя распаковщики все равно были написаны и найти их на просторах интернета не составит труда. В качестве движка автором был использован всеми так любимый aplib. Интерфейс удобный, настроек много, программа бесплатная. В общем советую скачать хотя бы для того чтобы поглядеть.

Пакер легко ищется поисковиками, несмотря на то что сайта у него нет. Если будете искать распаковщики, то обратите внимание на WKT_tElock_Dumper. Если не поможет, то есть смысл скачать tEunlock.

Upack by Dwing

Новый, динамично развивающийся пакер. Уже начинает обходить nSpack. Последняя версия на день написания статьи - 0.22 beta. Пакер действительно мощно жмет и оптимизирует файл. Одно то, что импорт кладется в заголовок - уже заставляет задуматься над тем, насколько автор решил все оптимизировать. В качестве движка юзается только lzma (наверное поэтому и сжатие одно из лучших в группе). Совместимость тоже на уровне, хотя автор пишет "So if it does’t pack an exe-file, try UPX first. If UPX can pack it normally, send the original exe-file to me. Remember that it can’t pack some weird exe-files. So you’d better backup your exe-file before packing it.". Настроек мало, но разве они нужны, если все пакуется быстро и с высокой степенью сжатия данных? Пакер консольный, но имхо в этом и удобство - прописал его один раз в батник, компилирующий программу и забыл, зато пользователей Ваших программ порадует их маленький размер.

Взять пакер можно с dwing.go.nease.net или поиском через гугл.

WWPack32 by Piotr Warezak and Rafal Wierzbicki

WWPack32

Еще один старенький шароварный пакер с документацией на 2 мегабайта. Зачем такая документация спрашивается? Видимо маркетологи решили что от этого продаж будет больше. Чтож, когда пакеры только зарождались - на этом реально можно было заработать. Сейчас же - опенсорсных и бесплатных полно. Что касается возможностей, то они весьма стандартны, хотя есть и интересные моменты. Например в данном упаковщике есть встроенный проводник, из которого можно выбрать файлы для упаковки. Кроме всего прочего в программе имеются целых 20 режимов сжатия. Не обольщайтесь, nSpack и Upack все равно сжимают горазду лучше, хотя и не имеют всех этих наворотов. В общем посмотреть пакер стоит, но юзать - вряд ли, староват он для сегодняшних запросов по степени сжатия.

Сам пакер лежит тут: www.webmedia.pl/wwpack32/

GHF Protector

GHF Protector

Данный пакер написан на основе двух опенсорсных движков. В качестве упаковщика используется AHPack (который в свою очередь использует aplib), а в качестве протектора кода от распаковки используется Morphine. Не смотря на то что движки разные - удалось их совместить и написать нормальную утилиту. Программа бесплатна и распространяется в исходниках на Delphi. Так что смело можете переписать ее под себя, главное не забывать о лицензии GNU GPL, если решите распространять свою доработку. Что касается возможностей, то можно либо упаковать, либо защитить программу, а можно сделать все вместе - без проблем. В опциях это изменяется легко, также как и возможность не удалять из ресурсов программы иконку и XP Manifest. Что касается совместимости, то она на уровне 75%. То есть бывают иногда косяки с некоторыми EXE файлами, но в общей массе этого не заметно, хотя некоторые сильно оптимизированные файлы, написанные на ассемблере, падают после упаковки. Также к моменту написания статьи нашелся человек, который написал распаковщик к данному пакеру. Называется этот унпакер GHF UnProtector

Где искать пакеры?

Бывает такое, что официальные сайты пакеров закрываются. Не переживайте! Используйте google! Все пакеры из этого обзора легко находятся данным поисковиком.

Что такое Generic Unpacker?

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

Заключение

Какой же пакер выбрать спросите Вы? Вопрос сложный. Из проверенных хороших упаковщиков рекомендую UPX. Если нужно экстрасжатие - используйте nSpack, Upack, FSG. Первый лично мной тестировался на многих операционках - глюков не замечено, потому рекомендую. Если же есть желание не только запаковать, но и немного защитить файл, причем бесплатно - используйте tElock. Если нужен пакер, который легко доработать под себя и который распространяется в исходниках, то тут все зависит от того языка программирования, который Вы знаете - варианты opensource как Вы могли заметить есть, причем на разных языках. Свой выбор правда я уже давно сделал в пользу собственного решения - DotFix NiceProtect. Это и упаковщик и защита для программного кода с виртуализацией, мутацией, обфускацией данных и т.д. Но это выходит за рамки данной статьи.


Комментарии

отсутствуют

Добавление комментария


Ваше имя (на форуме):

Ваш пароль (на форуме):

Комментарии могут добавлять только пользователи,
зарегистрированные на форуме данного сайта. Если Вы не
зарегистрированы, то сначала зарегистрируйтесь тут

Комментарий: