Packers. Сжимаем и шифруем

Великая война за дисковое пространство началась в те далекие времена, когда размер винчестера не превышал 20 Мбайт, а на дискету вмещалась приличная на тот момент игра. Но свободное место не бесконечно, и скоро его перестало хватать. Тогда на помощь пользователю пришли архиваторы. ZIP, RAR — эти программы знакомы едва ли не каждому пользователю. Они позволяют уменьшать размер файлов в два-три раза, экономя драгоценное место. Сегодня мы поговорим об отдельной категории архиваторов — программах, предназначенных для сжатия exe-файлов и динамических библиотек.

Для чего, зачем и как?
Данные программы позволяют сжимать исполняемые файлы без потери их работоспособности. Результатом их работы является файл с таким же расширением, атрибутами, иконкой — только гораздо меньшего размера. Зачем это нужно? Давайте подумаем. Предположим, вы — программист. Размер ваших программ не играет большой роли, пока ваше творение находится на диске. А если вы решите сделать для своей программы сайт, или хотя бы разместить ее в софт-каталоге? Тогда несколько сотен килобайт могут сыграть решающую роль в популярности вашего проек­та.

Люди, выходящие в Сеть через dial-up (а таких до сих пор большинство), подсознательно отдают предпочтение программам меньшего размера. Кроме того, упаковщики обеспечивают неплохую защиту от любителей взлома (шифрование файлов — еще одна, побочная, их функция). Для взлома и декомпиляции сжатый файл необходимо сначала распаковать, а такие программы, как AsPack и WinUpack, не поддерживают распаковку вообще. Таким образом, упаковка файла — это не только уменьшение его размера, но и лишняя гарантия того, что он не будет каким-либо образом модифицирован.

AsPack
Удобная во всех отношениях программа с интуитивно понятным интерфейсом. Она не может похвастаться высокой степенью сжатия (результат тестирования по данному критерию — последнее, четвертое место), но этот недостаток с лихвой компенсируется высокой скоростью работы и хорошей функциональностью. Главное окно вклю­чает в себя пять тематических вкладок, на каждой из которых расположены соответствующие элементы управления программой, две из них информационные, три — функциональные. AsPack позволяет сжимать интегрированные в код файла ресурсы, влезать в контекстное меню Проводника Windows (для .exe- , .dll- и .ocx-файлов появляется пункт “Сжать AsPack-ом”) и создавать резервные копии файлов перед упаковкой. Две графические шкалы отображают ход упаковки и процентное отношение размера сжимаемого файла к размеру исходного, что позволяет оценить эффективность работы программы. AsPack снабжен хорошей и полной справкой (правда, на английском языке) и неплохой подборкой FAQ. Стоит добавить, что программа умеет разговаривать на двадцати языках, среди которых есть и русский.

PECompact2
Профессиональный инструмент с самой высокой степенью сжатия среди рассмотренных в нашем обзоре программ. А вот интерфейсу разработчики уделили не слишком много внимания: работать с PECompact, как минимум, неудобно. Однако, если закрыть глаза на скупое оформление и необычную организацию элементов главного окна — программа очень даже неплоха. Поддерживается пакетное сжатие файлов, которое вряд ли может пригодиться рядовому программисту, но как знать… Окно параметров программы пугает количеством настроек: одних только опций компрессии двенадцать. Добавьте к этому девять степеней сжатия, восемь дополнительных кодеков и распознавание двух дюжин видов ресурсов. Без чтения документации (которая, кстати, написана достаточно подробно) разобраться в этом хаосе опций трудновато. Хорошо, что в окне параметров присутствует кнопка восстановления опций по умолчанию…
Дистрибутив PECompact2 включает в себя 32-бит GUI-оболочку для Windows и консольное приложение для DOS. Как и AsPack, программа умеет встраиваться в оболочку Windows, добавляя в контекстное меню свои строки. В итоге мы получаем эффективный настраиваемый инструмент с самой высокой степенью сжатия, поддерживающий подключение дополнительных модулей и кодеков. Единственный существенный минус программы — недоработанный интерфейс. Очень низкую скорость работы PECompact2 можно простить — затраченное время, как видно по результатам тестирования, вполне окупается. Поддерживается русский язык, что тоже немаловажно.

UPX
Один из старейших консольных упаковщиков, с неплохим соотношением степени сжатия и скорости работы. Несмотря на то, что программа эта консольная, она и по сей день не теряет популярности. Возможно, такой успех объясняется ее бесплатностью. Главной особенностью UPX является то, что работа ведется исключительно из командной строки. Для упаковки необходимо выполнить команду upx.exe, передав ей в качестве параметра имя файла, который вы хотите сжать. Дополнительно можно указать параметры: степень сжатия, необходимость сжатия ресурсов и сохранение оверлеев. Поддерживается как упаковка, так и распаковка файлов. Программа, несомненно, понравится любителям консольных приложений, ностальги­рующим по временам командной строки и Командиру Нортону.
Стоит добавить, что для консольного UPX написано множество 32-бит оболочек, позволяющих управлять параметрами командной строки через привычный Windows-интерфейс. Одной из них является UPX X-shell, написанная нашим соотечественником Юрием Голубинским. Скачать новую версию программы вместе с оригинальным UPX можно на сайте www.urixsoft.nm.ru. Также могу порекомендовать программу GUiPex — отличную оболочку для UPX, обладающую многоязычным интерфейсом (русский есть). Кроме того, GUiPex является OpenSource-проектом, и любой желающий может данную программу доработать или улучшить.

eXPressor
eXPressor занимает в нашем обзоре законное второе место, обойдя по степени сжатия и UPX, и AsPack. Приличная скорость работы, удобный и компактный интерфейс, неплохая функциональность — программа определенно заслуживает доверия. Процесс упаковки файлов иллюстрирован тремя индикаторами, которые отображают ход работы с каждым типом ресурса. Все сделано чистенько и аккуратно. Отображается расчетное время окончания процесса сжатия, причем довольно точно. Доступны три уровня компрессии и несколько дополнительных опций. Программа удобно интегрируется в оболочку Windows, и, если выставить соответствующую опцию, сразу начинает упаковку. Поддерживается и создание резервных копий упаковываемых файлов.

WinUpack
Несмотря на очень скромный номер версии (0.39), WinUpack справляется со своей задачей на “отлично”. Не догнав по степени сжатия PECompact2, программа делит второе место с eXPressor, немного проигрывая ему в скорости работы. Удобный интерфейс, минимум настроек и простота в использовании — так вкратце можно охарактеризовать WinUpack. Опции программы весьма традиционны — сжатие ресурсов, создание резервных копий, сохранение дополнительных данных. Возможно сжатие проблемных файлов, коими яв­ляются самораспаковывающиеся архивы и некоторые типы инсталляторов. С такими файлами не умеет работать даже монстр PECompact2. В дистрибутиве этой программы имеется консольная утилита Upack, также обладающая довольно широкими возможностями.
Радуют маленький размер программы (всего 27 Кбайт) и поддержка русского языка. WinUpack бесплатен (пока?), но, возможно, когда программа дорастет до версии 1.0, за нее придется платить. Ошибок в работе не замечено…

Мы строили, строили…
Итак, подведем итоги. Первое место присуждается… PECompact2! Программа обеспечивает самую высокую степень сжатия, предоставляет огромное количество опций и дополнительных настроек. Важно отметить и возможность подключения дополнительных компрессоров, скачать которые можно отдельно на сайте разработчика. Несмотря на сравнительно низкую скорость работы, программа занимает законное первое место — при мощности современных компьютеров несколько десятков секунд не играют большой роли.
Второе место делят две программы — eXPressor и WinUpack. Их способности почти аналогичны — конкуренты обеспечивают почти одинаковую степень сжатия, хотя вторая программа работает немного медленнее. Привлекает также их понятный интерфейс, не перегруженный лишними элементами. Обе программы поддерживают джентльменский набор функций — создание резервных копий, сохранение оверлеев, интегрирование в оболочку Windows.
Третье место достается UPX — бесплатной консольной разработке, одному из старейших паковщиков. Хорошая скорость работы и приличная степень сжатия. Отдельно стоит выделить опцию распаковки сжатых файлов — это единственная программа в обзоре, которая поддерживает декомпрессию (пригодится, если вы, например, хотите сжать файл новой версией паковщика или просто пропатчить приложение). Большой плюс — все параметры командной строки подробно описаны в документации к программе. Не стоит забывать, что для UPX уже написано несколько десятков программ-оболочек, игнорировать которые просто непрактично: они существенно облегчают работу.
Последнее, четвертое место занимает AsPack. Программа справляется с упаковкой похуже, чем конкуренты, но выигрывает в другом: удобный интерфейс, организованный более чем удачно, хорошая справка (что для программ такого рода — редкость) и самая высокая скорость работы. Плюс — поддержка русского языка. AsPack можно назвать лучшим экспресс-упаковщиком.

В заключение хочу сказать, что упаковщики можно успешно комбинировать. Цель — не только максимально уменьшить размер файла, но и защититься от взлома и модифицирования. Файл можно сначала сжать, к примеру, с помощью UPX, потом PEExpress, а под конец — затереть техническую информацию с помощью программы наподобие Stealth PE. Упакованный по такому алгоритму файл вряд ли удастся взломать даже опытному крэкеру (только вот скорость загрузки программ с “хвостом” всех этих защит может заметно снизиться). Теперь вы можете смело сказать это о своих программах: компактные и защищенные…

Методика тестирования
Для тестирования степени сжатия использовались три исполняемых файла Win32 (.exe) и одна динамическая библиотека (.dll). Учитывались итоговый размер файла и время, потраченное на упаковку. Степень сжатия высчитывалась как соотношение размеров исходного и упакованного файлов. При выставлении итоговых оценок скорость работы не учитывалась.


Рекомендуем почитать: