|
|||||||||||||||||||||||||
Автор: GPcH. Дата публикации: 19.02.2006
|
Упаковка приложенийНаучись делать компактным свой кодНе возникало ли у тебя желания уменьшить размеры своих прог, не юзая при этом всяких архиваторов? Думаю ты не раз задумывался над этим, но не мог найти инфу по этому вопросу. В этой статье я попытался дать ответ наиболее полно, разобрав 18 программ, способных уменьшить размеры твоей тулзы. Думаю это поможет тебе сделать правильный выбор среди такой огромной массы EXE упаковщиков. Введение Часто ли ты слышишь о способах оптимизации кода? А как насчет огромных статей по оптимизации? Наверняка тебя все это не особо радует. Ведь кому охота месяцами оптимизировать код, чтобы добиться уменьшения его на пару десятков лишних килобайт. Особенно размеры программ "радуют" программистов на дельфях и билдере. Простенькое окошко с кнопкой - это уже 300 с лишним килобайт кода. Какого кода спрашивается, если ты и не писал там почти ничего? Я не буду здесь рассматривать особенности VCL и рассказывать, почему все таки кода так много для таких простых действий, а лучше расскажу тебе как уменьшить размеры конечных программ чуть ли ни в два раза, а иногда и больше. Так зародилось направление EXE упаковки. Некоторые программисты стали изучать структуру формата EXE файлов и на основе этих данных писать упаковщики. В отличии от rar’а и zip’а нужно было написать не только алгоритм упаковки, но и написать код загрузчика, который распакует программу в оперативную память и передаст управление на нее. В этом и есть небольшая особенность EXE упаковщиков от обычных пакеров. Как бы это странно тебе не показалось - до сих пор находятся люди, которые обеспокоены размерами EXE файлов и которые пишут все новые и новые EXE упаковщики. Отсюда можно сделать вывод, что ассортимент EXE пакеров довольно высок и не лишним будет поговорить о каждой такой проге в отдельности и сделать небольшое сравнение их возможностей. Этим мы сейчас и займемся. UPX by Markus Oberhumer & Laszlo Molnar ![]() Данный пакер думаю знают все. Последняя его версия - 1.93. Довольно неплохо пакует, быстро развивается, периодически выходят новые версии. Также на сайте разработчика лежит почти полный исходный код упаковщика (без библиотеки NRV). Что касается совместимости - и сам пакер и упакованные EXE файлы запускаются под всеми версиями Windows. Если говорить об степени сжатия, то программа поддерживает 9 режимов упаковки. Тот что быстрее пакует - хуже сжимает и наоборот. Но даже с максимальным сжатием UPX не держит первенства по крутости упаковки, хотя весьма на уровне. Что касается распаковки, то пакер поддерживает сам эту возможность и без труда может восстановить до исходного состояния обработанный собой файл (ключ командной строки "upx -d <имя файла>"). Сам пакер можно скачать отсюда: http://upx.sourceforge.net ASPack by Alexey Solodovnikov ![]() Тоже знаменитый пакер. Последняя версия - 2.12. Что касается его развития, то оно закончилось довольно давно. Пакер уже несколько лет не обновлялся, хотя и юзается многими. Пакует средне. Лучше всего сжимает Delphi программы и имеет два режима сжатия: "обычный" и "максимальное сжатие". Имеется многоязычный интерфейс и некоторые функции для настройки. Ни о каких исходниках речи нет - программа распространяется по шароварному типу и требует бабла для регистрации. Что касается распаковки, то на сегодняшний день мне известно более 10 универсальных распаковщиков ASPack’а, лучшие из которых это: Caspr и Stripper v2.7 (v2.11 и старше не предназначена для снятия ASPack’а - имей это ввиду). Сам пакер можно скачать отсюда: http://www.aspack.com exe32pack by SteelBytes Довольно редкий пакер. Последняя версия, которую мне удалось найти - 1.38. Пакер несколько лет не обновлялся, но при этом довольно неплохо пакует и оптимизирует файлы. Интерфейс программы консольный. Насколько я понял - разработка коммерческая, но куда перечислять деньги для покупки - не понятно. Степень сжатия иногда даже лучше чем у UPX’а. Совместимость тоже неплохая: все тестируемые EXE файлы работали у меня и на линейке Win9x и под XP. Универсальных распаковщиков для данного пакера не встречал. Сам пакер поищи через www.google.com - наверняка найдется сайт с кучей упаковщиков, среди которых будет этот, так как своего сайта насколько мне известно у данного пакера нет. FSG by bart/xt ![]() Известный в кругах крэкеров и демомейкеров пакер. Последняя версия 2.0. С прошлого года не обновлялся, хотя как мне кажется, лишь потому что не было повода. Отличное решение для упаковки маленьких программ, написанных на ассемблере или c++. Наверное главная достопримечательность данного пакера - размер его загрузчика. Loader данного пакера занимает всего 158 байт. Этих байт реально хватает для распаковки и создания импорта. Такой оптимизации можно увидеть только в FSG. Степень сжатия изменять нельзя, при этом дефолтная обходит почти все пакеры из данного обзора а иногда все имеющиеся. Совместимость на очень высоком уровне. Распаковщиков специально для последней версии не видел, но generic unpacker’ы распаковывают его на ура. Движок упаковщика - aplib. Сам пакер можно скачать отсюда: http://www.xtreeme.prv.pl MEW by Northfox ![]() Малоизвестный в программерской среде, динамично развивающийся пакер. Последняя версия 11.1.2. Прога также не обновлялась почти год, но насколько мне известно автор сейчас работает над созданием протектора. Программа имеет отличную степень сжатия. Главная особенность и крутость у данной проги благодаря использованию одновременно двух движков упаковки - aplib и lzma. Последний используется в архиваторе 7z и уже давно известен своей мощностью сжатия. Но данный движок медленный, потому запакованные проги хоть и имеют меньший, по сравнению с другими пакерами, размер, зато тормозят, а это огромный минус. Хотя если lzma отключить в настройках пакера - все ok, но и размер упакованных прог больше. Так что тут сам выбирай что для тебя важнее - размер проги или ее тормоза. Распаковщика для последней версии не видел, но generic unpacker’ы опять на высоте. Сам пакер можно скачать отсюда: http://northfox.uw.hu/ NeoLite by NeoWorx inc ![]() Еще один малоизвестный пакер. Последняя версия - 2.0. Пакер не обновлялся уже 5 с лишним лет и о нем уже давно забыли. Пакует неплохо, имеет много настроек, может распаковывать упакованные собой файлы. Главная особенность - может паковать не только код, но и экстра данные, что пригодится при паковке программ, написанных на Foxpro и роликов, сделанных на Flash’е. Программа коммерческая, потому все упакованные проги при запуске выдают диалог с сообщением о незарегистрированности. Защищенные Demo версией проги вроде работают под всеми виндами. Что касается движка компрессора, то авторы об этом умалчивают. Пакер можно скачать отсюда: http://www.neoworx.com nSPack by Liu Xing Ping ![]() На мой взгляд самый лучший пакер и по сжатию и по совместимости. Последняя бесплатная версия 1.3, последняя платная - 2.3. Несмотря на малоизвестность пакера, автор его вовремя понял, что такой классный компрессор нельзя распространять за бесплатно. Пакер динамично развивается, хотя кроме изменения интерфейса - я мало что могу сказать об улучшениях платной версии от бесплатной, так как пакер и v1.3 был всесторонне хорош. Все это благодаря не только использованию двух движков упаковки - aplib и lzma, но и их оптимальному использованию. В общем must have. Распаковщиков также специальных нет, а generic его берут без проблем. Коммерческую версию можно взять здесь: http://www.nsdsn.com PECompact by Bitsum Technologies ![]() Относительно известный пакер. Последняя версия - 2.5. Единственный в этом обзоре пакер, который имеет немало интересных фишек. Главная фишка - пакетное сжатие. Ты можешь выбрать для сжатия сразу несколько программ и запаковать их в момент. Второй отличительной возможностью является довольно широкий выбор движков компрессинга данных. Среди них есть уже известные aplib и lzma, а также есть свой - ffce. Совместимость также довольно хороша - программы нормально запускаются под всеми поддерживаемыми виндами. Главный минус, который ограничивает использование этого пакера - его платность. Что касается распаковщиков - есть UnPecompact by yoda/f2f, также неплохо справляется универсальный quick unpack v0.7 Пакер можно взять здесь: http://www.bitsum.com PE Diminisher by Teraphy ![]() Малоизвестный пакер. Последняя версия - 0.1. Честно говоря - пакер не впечатляет. Совместимость слабая. Некоторые проги перестают работать после упаковки и сжатие не особенно сильное. Зато бесплатно. Для разнообразия рекомендую посмотреть но юзать лучше что-нибудь пофункциональнее. Распаковщики я даже искать не стал, так как мне еще не встречалось прог, запакованных данным пакером. Взять пакер можно отсюда: http://www.phrozencrew.com/teraphy PEQuake by fORGAT/uNKNOWN ![]() Прикольный китайский пакер. О версии ничего сказать не могу так как данный пакер релизился всего один раз и то не на сайте разработчика, а на форуме. Почему я решил его описать? Да потому что неплохой пакер, хотя жмет средне. Главным приколом является то, что автор обошел тормознутость движка компрессинга статусбаром, который каждый раз пробегает по экрану при загрузка EXE файла. Прикольно, что сказать. Распаковщик к нему тоже есть, но в виде скрипта к Olly Debugger’у, который написал Mario555. Врядли этот пакер имеет широкое применение, потому не вижу смысла давать на него ссылку (при желании и пакер и анпакер можно найти через www.google.com). PESpin by cyberbob ![]() Новый пакер, который сейчас довольно динамично пишется. Последняя public версия 1.1. 1.2 уже есть, но автор ее не распространяет. Прога бесплатна и имеет нормальную совместимость. Но главный минус, который ограничивает использование пакера - запакованные проги жутко тормозят даже на 4 пне. Используемый движок - aplib. Распаковщика к новой версии я не видел, но сам пакер на форумах уже вовсю распаковали. Взять пакер можно отсюда: http://pespin.w.interia.pl Petite by Ian Luck ![]() Известный в свое время пакер. Последняя версия, которую видел - 2.2, хотя слышал что прога недавно обновилась. Имеются 9 режимов упаковки. 0’ой от 9’ого по степени сжатия отличается не сильно, зато скорость сжатия уменьшается в разы, потому можешь смело юзать 1 уровень. Имеется и GUI и консольная версия. Причем GUI довольно удобный и прикольно сделаны подсказки - не запутаешься. Есть проверка CRC, отсюда если твою прогу заразит вирус - прога не запустится, а только загрузчик выведет предупреждение, что прога возможно заражена вирусом. Мелочь, а приятно. Да и совместимость радует. Один минус - коммерческая прога. Бабки просит за паковку. Распаковщики к пакеру есть, да и generic unpacker’ы тоже неплохо справляются. Взять пакер можно отсюда: http://www.un4seen.com/petite/ PeX by bart^CrackPl ![]() Практически никому неизвестный пакер. последняя версия, которую видел - 0.99 beta. Прога меня сильно порадовала. Пакует не сильно, зато распространяется с исходником на ассемблере и имеет неплохую совместимость и с Win9x и с NT/2k/XP. Потому, если знаешь ассемблер - можешь смело доработать пакер под себя и юзать. Еще пакер умеет протектить код от распаковки, отсюда не могу не порекомендовать его тем, кому охота бесплатный пакер/протектор с возможностью доработки. В качестве движка используется aplib. Распаковщиков не видел. Кстати если будешь им паковать свои проги не забудь в настройках поставить галку "Loader code alignment(Req. for WinNT)" иначе под NT линейкой пакованные проги работать не будут. Пакер ищи через поисковики, так как сайта у него своего нет насколько я знаю. PKLITE32 by PKWARE ![]() Наверное старейший пакер, известный еще со времен msdos. Я помню старый добрый pklite. C переходом под win32 прога стала шароварной. Последняя версия, которую я видел датирована 1999 годом и с тех пор пакер не обновлялся. Рекомендую его посмотреть лишь для того, чтобы знать, с чего все начиналось. Особых настроек и крутого сжатия тут нет, но какой крутизны можно ждать от такого старого пакера? Что касается распаковщиков, то они есть, но толку от них не вижу - пакер все равно не юзается. Сам пакер можно скачать отсюда (если сайт еще работает): http://www.pkware.com tElock by tE! ![]() Довольно известный пакер/протектор. Развивается время от времени. Особенно известны его версии 0.71 и 0.98. Кроме паковки еще умеет и защищать код от распаковки, хотя распаковщики все равно были написаны и найти их на просторах интернета не составит труда. В качестве движка автором был использован всеми так любимый двиг aplib. Интерфейс удобный, настроек много, прога фриварная. В общем советую тебе скачать хотя бы для того чтобы поглядеть. Пакер легко ищеЦЦа поисковиками, несмотря на то что сайта у него нет. Если будешь искать распаковщики, то обрати внимание на WKT_tElock_Dumper. Если не поможет - поищи tEunlock - тоже довольно неплохо распаковывает. Если и он не справится, то знай, что скриптов для Olly написано немало для снятия этого и других пакеров. 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.". Настроек мало, но разве они нужны, если все пакуется быстро и с крутым сжатием файла. Пакер консольный, но имхо в этом и удобство - прописал его один раз в батник, компилящий прогу и забыл, зато юзеров твоих прог порадует их маленький размер. Взять пакер можно отсюда: http://dwing.go.nease.net или поиском через гугл. WWPack32 by Piotr Warezak and Rafal Wierzbicki ![]() Еще один старенький шароварный пакер с документацией на 2 мега. Нафига такая дока спрашивается? Видимо маркетологи решили что от этого продаж будет больше. Чтож, когда пакеры только зарождались - на этом реально можно было заработать. Сейчас же - опенсорсных и бесплатных полно. Что касается возможностей, то они весьма стандартны, хотя есть и интересные моменты. Например в проге есть встроенный проводник, из которого можно выбрать файлы для упаковки. Кроме всего прочего в проге имеются целых 20 режимов сжатия. Не обольщайся, nSpack и Upack все равно круче компрессят EXE файлы, хотя и не имеют всех этих наворотов. В общем посмотреть пакер стоит, но юзать - вряд ли, староват он для сегодняшних запросов по степени сжатия. Сам пакер лежит тут: http://www.webmedia.pl/wwpack32/ GHF Protector by GPcH ![]() Да, я не опечатался, этот пакер/протектор действительно сделал я. А если быть точнее, то он не совсем мой. Я его написал на основе двух опенсорсных движков. В качестве упаковщика используется AHPack (который в свою очередь юзает aplib), а в качестве протектора кода от распаковки юзается Morphine. Не смотря на то что движки разные - я таки смог совместить их и написать нормальную тулзу. Ясен пень - тулза фриварная и распространяется в исходниках на Delphi. Так что смело можешь переписать ее под себя, главное не забывай о лицензии GNU GPL, если решишь распространять свою доработку. Что касается возможностей, то можно либо упаковать, либо защитить прогу а можно сделать и то и то. В опциях это изменяется легко, также как и возможность не удалять из ресурсов проги иконку и XP Manifest. Что касается совместимости, то она на уровне 75%. То есть бывают иногда косяки с некоторыми EXE файлами, но в общей массе этого не заметно, хотя некоторые сильно оптимизированные файлы, написанные на ассемблере, падают после упаковки. Также к моменту написания статьи нашелся человек, который написал распаковщик к данному пакеру. Называется этот унпакер GHF UnProtector и лежит там же где и сам пакер - на моем реверсинг ресурсе: http://reversing.dotfix.net Чтобы не было лишних вопросов насчет названия пакера - он назван по первым буквам ников его разработчиков: GPcH, Holy_Father (автор Morphine’а), FEUERRADER (автор AHPAck’а). Где искать пакеры? Бывает такое, что официальные сайты пакеров закрываются. Не переживай! Юзай google! Все пакеры из этого обзора легко находятся данным поисковиком. Если искать лень, то подкину тебе пару ссылок. Новые пакеры обычно лежат на www.wasm.ru , старые же легко найти на www.exetools.com. Что такое Generic Unpacker? Это универсальный распаковщик, который в принципе может кое как распаковать любой пакер и восстановить таблицу импорта. Ясен пень такие распаковщики не ребилдят ресурсы, потому если ты хочешь распаковать программу для ее последующей русификации в Restorator’е, то такие распаковщики тебе не помогут, хотя съэкономят время для взломщика программных защит. Ему на ресурсы наплевать, главное чтобы код был распакован. Лучшими представителями таких распаковщиков являются Quick Unpack by FEUERRADER, GUW by Christoph Gabler, а также рекомендую плагин для распаковки программ, встроенный в файловый анализатор PEiD. Какой из них круче - хз. Попробуй все. Заключение Какой же пакер выбрать спросишь ты? Вопрос сложный. Из проверенных хороших пакеров рекомендую UPX и FSG. Если нужно экстрасжатие - юзай nSpack или Upack. Первый лично мной тестировался на многих операционках - глюков не замечено, потому рекомендую. Если же есть желание не только запаковать, но и немного защитить файл, причем бесплатно - юзай tElock или GHF Protector. Если тебе нужен пакер, который легко доработать под себя и который распространяется в исходниках, то тут все зависит от того языка программирования, который ты знаешь. если это delphi, то юзай GHF Protector, если же это Asm - тебе наверняка придется по душе PeX. Свой выбор я уже давно сделал в пользу nSpack, хотя меня сильно не порадовало, что теперь он стал платным и распространяется по $30.
|
|
| ||||||||||||||||||||||