Программы-упаковщики - это разновидность архиваторов, которые сжимают исполняемые файлы (.exe), динамически подсоединяемые библиотеки (.dll) и др. с сохранением их полной работоспособности в упакованном состоянии. Другими словами, если вы запакуете "экзешник", то он уменьшится в размере и, что немаловажно, не перестанет быть "экзешником". Т.е. его можно будет запускать на выполнение, как если бы он вообще не подвергался действиям подобных утилит.
Упаковщики работают так же, как и архиваторы, за одним лишь исключением - они помещают процедуру распаковки (decompression procedure) в начало программы, которую только что сжали.
Обычно упакованная программа загружается быстрее, чем неупакованная, что объясняется уменьшением ее размера. Однако многие алгоритмы декомпрессии требуют немало оперативной памяти. Если ее в системе не хватает, то запускаемая программа может быть помещена в файл подкачки. В этом случае сжатое приложение будет открываться дольше.
Где находят применение упаковщики, или, как их часто называют, пакеры? Конечно, их используют программисты, чтобы уменьшить размер написанных файлов, ускорить их запуск и защитить от взлома. Но и крекеры (взломщики) не обходят эти программы стороной, создавая декомпрессоры для популярных упаковщиков и внося, таким образом, свою лепту в развитие технологий защиты данных. :) Что касается обычных пользователей, то упаковщик всегда поможет переслать исполняемый файл по почте, разместить в интернете или записать на информационный носитель небольшой емкости, например, дискету. Процедура распаковки занимает считанные байты, поэтому упакованные exe-файлы имеют почти такой же размер, что и заархивированные, однако, как вы понимаете, не требуют для запуска дополнительного ПО, что тоже удобно.
Чтобы определить, в каких случаях и какими программами лучше пользоваться, я предлагаю провести сравнительный анализ. Итак, в сегодняшнем шоу принимают участие следующие известные пакеры.
PECompact v2.76
Линк: www.bitsum.com/files/pec2setup.zip
Размер: 1,3 Mb
Распространение: shareware (14 дней опробования)
Утилита PECompact предназначена для сжатия файлов .exe, .dll, .scr с помощью многочисленных алгоритмов, которые доступны в меню Файл -> Изменить установки... -> Выбрать кодеки. В программе предусмотрена возможность выбора компонентов файлов, которых не следует подвергать компрессии (иконки, курсоры, шрифты и др.), а также функция оптимизации структуры файла, которая позволит без сжатия уменьшить его размер (опция "Trim Only"). Кроме того, PECompact имеет русскоязычный интерфейс и консольную версию - pec2.exe. Также позволяет работать с несколькими файлами сразу.
ASPack v2.12
Линк: www.aspack.com/files/aspack212.zip
Размер: 300 Kb
Распространение: shareware (30 дней опробования)
Упаковщик ASPack прост в использовании и, благодаря мощному алгоритму, позволяет добиться 40-70% сжатия для 32-битных приложений Windows. Поддерживаемые файлы: .exe, .dll, .ocx, .dpl, .bpl (файлы библиотек Delphi). Программа может проверить перед окончательной упаковкой функциональность exe-файла и, при нарушении его нормальной работы, отменить сжатие. Для любознательных: ASPack был написан в Borland Delphi 2.0. Русский язык поддерживается.
UpxVis v1.8
Линк: amis.h11.ru/files/rar/upxvis.rar
Размер: 350 Kb
Распространение: freeware
UPX (the Ultimate Packer for eXecutables) - быстрый упаковщик, работающий в консольном режиме и позволяющий достичь высоких коэффициентов сжатия. Также может выполнять декомпрессию. Поддерживаемые форматы файлов: exe, sys, com, pe (Win32), 386 (Linux) и др. Для UPX написано множество оболочек, значительно повышающих удобство работы с утилитой. Одной из них является UpxVis v1.8. В отличие от классического UPX, программа позволяет устанавливать защиту от декомпрессии и умеет упаковывать dll. Русский язык присутствует.
Подготовка к тестированию
Для качественного сравнения работы программ-упаковщиков были выбраны (случайным образом) исполняемые файлы (.exe) и динамически подсоединяемые библиотеки (.dll) известных приложений, а также мои программы, написанные в Delphi и Visual C++. Сравнение будет проходить по следующим критериям: размер упакованного файла, время компрессии и время декомпрессии, работоспособность файла после сжатия.
Во время тестирования преследуется цель максимально уменьшить размер выходного файла без увеличения времени его распаковки. Для этого в PECompact был выбран алгоритм FFCE, обеспечивающий хорошее сжатие и малое время запуска упакованного файла и установлен максимальный уровень сжатия (9). Остальные настройки - по умолчанию. В настройках ASPack были включены пункты "Сжимать ресурсы" и "Максимальное сжатие", а в UpxVis вместе с упаковкой ресурсов была установлена максимальная степень компрессии (10). Помните, что в ASPack и PECompact параметры упаковки нужно задавать для каждого файла в отдельности
Результаты
По итогам тестирования можно заключить, что все упаковщики справились с предложенной задачей достойно. Самый большой коэффициент сжатия продемонстрировал UPX.
Результаты тестирования упаковщиков | ||||
Файлы | Исходный размер | Размер после упаковки | Время упаковки | Коэффициент сжатия |
PECompact v2.76 | ||||
Delphi.exe | 624 Kb | 261 Kb | 2 c | 58% |
C.exe | 234 Kb | 45 Kb | 3 c | 80% |
Test1.exe | 1,7 Mb | 756 Kb | 30 c | 54% |
Test2.exe | 10 Mb | 4 Mb | 10 мин | 62% |
Test1.dll | 1 Mb | 451 Kb | 20 c | 57% |
Test2.dll | 1.5 Mb | 703 Kb | 15 c | 55% |
ASPack v2.12 | ||||
Delphi.exe | 624 Kb | 251 Kb | 10 c | 60% |
C.exe | 234 Kb | 46 Kb | 3 c | 81% |
Test1.exe | 1,7 Mb | 868 Kb | 5 c | 47% |
Test2.exe | 10 Mb | 3,8 Mb | 3 мин | 64% |
Test1.dll | 1 Mb | 960 Kb | 2 c | 10% |
Test2.dll | 1.5 Mb | 739 Kb | 17 c | 53% |
UpxVis v1.8 | ||||
Delphi.exe | 624 Kb | 253 Kb | 8 c | 60% |
C.exe | 234 Kb | 43 Kb | 7 c | 83% |
Test1.exe | 1,7 Mb | 737 Kb | 15 c | 57% |
Test2.exe | 10 Mb | - | - | - |
Test1.dll | 1 Mb | - | - | - |
Test2.dll | 1.5 Mb | - | - | - |
Однако программа вопреки справке UpxVis отказалась работать с dll и файлами с оверлеем (Test2.exe). PECompact допустил один промах: библиотека под кодовым именем Test1.dll, за которой скрывается файл mfc71.dll (необходим для работы программ, написанных в среде Microsoft Visual Studio .NET 2003), была испорчена. После упаковки все файлы запускались не медленнее, чем до нее.
Упаковщики также были опробованы и на обычных установочных файлах, которые каждый из нас запускает по несколько штук в день. В основном, попадались "экзешники", содержащие экстра данные с жестко заданным смещением (оверлей). UPX с такими файлами работать отказался, а для остальных упаковщиков в настройках опять была включена опция "Сохранять оверлей". PECompact с компрессией справился нормально: программы загружались, но степень сжатия была незначительная. ASPack, напротив, только угробил "экзешники". Вывод: инсталляционные файлы программ упаковывать нет смысла, т.к. они, во-первых, плохо поддаются упаковке и, во-вторых, уже сжаты разработчиками.
Выводы
Упаковщик UPX с оболочкой UpxVis показал наилучшее сжатие исполняемых файлов (.exe). Учитывая то, что программа распространяется бесплатно, можно сказать, что для упаковки "экзешников" целесообразнее применять именно ее. Если UPX что-то не сможет сделать хорошо, то он вам об этом непременно сообщит. Для сжатия dll и файлов с оверлеем (не установочных!) лучше использовать ASPack, т.к. он работает надежнее и быстрее. Я, скорее всего, выберу именно его. А PECompact подкупает лишь возможностью выбора кодеков, с которыми можно поэкспериментировать на досуге. Он сжимает почти так же, как и ASPack, только иногда тратит на это больше времени.
Narthex
Комментарии