Сжатие исполняемых файлов - любое средство сжатие исполняемого файла и объединение сжатых данных с кодом распаковки в один исполняемый файл. Когда этот сжатый исполняемый файл выполняется, код распаковки воссоздает исходный код из сжатого кода перед его выполнением. В большинстве случаев это происходит прозрачно, поэтому сжатый исполняемый файл может использоваться точно так же, как оригинал. Исполняемые компрессоры часто упоминаются как «упаковщики времени выполнения», «упаковщики программного обеспечения», «средства защиты программного обеспечения» (или даже «полиморфные упаковщики » и «инструменты запутывания »).
Сжатый исполняемый файл может рассматриваться как самораспаковывающийся архив, где сжатый исполняемый файл упакован вместе с соответствующим кодом распаковки в исполняемый файл. Некоторые сжатые исполняемые файлы можно распаковать, чтобы восстановить исходный файл программы без непосредственного выполнения. Для этого можно использовать две программы: CUP386 и UNP.
Большинство сжатых исполняемых файлов распаковывают исходный код в памяти, и большинству требуется немного больше памяти для работы (потому что им нужно хранить код распаковщика, сжатые данные и распакованный код). Более того, к некоторым сжатым исполняемым файлам предъявляются дополнительные требования, например к тем, которые записывают распакованный исполняемый файл в файловую систему перед его выполнением.
Сжатие исполняемых файлов не ограничивается двоичными исполняемыми файлами, но также может применяться к сценариям, таким как JavaScript. Поскольку большинство языков сценариев предназначены для работы с читаемым человеком кодом, который имеет высокую избыточность, сжатие может быть очень эффективным и столь же простым, как замена длинных имен, используемых для идентификации переменные и функции с более короткими версиями и / или удаление пробелов.
Распространители программного обеспечения используют сжатие исполняемых файлов по разным причинам, в первую очередь для уменьшения th e вторичное хранилище требования их программного обеспечения; поскольку исполняемые компрессоры специально разработаны для сжатия исполняемого кода, они часто достигают лучшей степени сжатия, чем стандартные средства сжатия данных, такие как gzip, zip или bzip2. Это позволяет распространителям программного обеспечения не выходить за рамки выбранных ими средств распространения (например, CD-ROM, DVD-ROM или гибкий диск ) или сократить время и полосу пропускания, необходимые клиентам для доступа к программному обеспечению, распространяемому через Интернет.
Сжатие исполняемых файлов также часто используется для предотвращения обратного проектирования или для сокрытия содержимого исполняемого файла (например, чтобы скрыть наличие вредоносного ПО от антивирусных сканеров ) за счет проприетарных методов сжатия и / или добавленного шифрования. Исполняемое сжатие может использоваться для предотвращения прямого разборки, маскирования строковых литералов и изменения подписей. Хотя это не исключает вероятность обратного проектирования, это может сделать процесс более дорогостоящим.
Сжатый исполняемый файл требует меньше места для хранения в файловой системе, поэтому меньше времени для передачи данных из файловой системы в память. С другой стороны, требуется некоторое время для распаковки данных перед началом выполнения. Однако скорость различных носителей информации не поспевает за средней скоростью процессора, поэтому хранилище очень часто является узким местом. Таким образом, сжатый исполняемый файл будет загружаться быстрее в большинстве распространенных систем. На современных настольных компьютерах это редко бывает заметно, если исполняемый файл не слишком большой, поэтому скорость загрузки не является основной причиной или против сжатия исполняемого файла.
В операционных системах, которые читают исполняемые образы по запросу с диска (см. виртуальная память ), сжатые исполняемые файлы делают этот процесс менее эффективным. Заглушка декомпрессора выделяет блок памяти для хранения распакованных данных, который остается выделенным, пока исполняемый файл остается загруженным, независимо от того, используется он или нет, все время конкурируя за ресурсы памяти с другими приложениями. Если операционная система использует файл подкачки, распакованные данные должны быть записаны в него, чтобы освободить память, вместо того, чтобы просто отбрасывать неиспользуемые блоки данных и при необходимости повторно загружать их из исполняемого образа. Обычно это незаметно, но становится проблемой, когда исполняемый файл загружается более одного раза одновременно - операционная система не может повторно использовать блоки данных, которые она уже загрузила, данные должны быть распакованы в новый блок памяти и будут заменяться самостоятельно, если не используется. Дополнительные требования к хранилищу и времени означают, что необходимо тщательно взвесить, следует ли сжимать исполняемые файлы, которые обычно запускаются более одного раза одновременно.
Другой недостаток заключается в том, что некоторые утилиты больше не могут идентифицировать зависимости библиотеки времени выполнения, поскольку видна только статически связанная заглушка экстрактора.
Кроме того, некоторые старые антивирусные сканеры просто сообщают обо всех сжатых исполняемых файлах как вирусы, потому что заглушки декомпрессора имеют общие характеристики с ними. Большинство современных антивирусных сканеров могут распаковывать несколько различных уровней сжатия исполняемых файлов, чтобы проверить сам исполняемый файл внутри, но у некоторых популярных антивирусных сканеров и антивирусных программ были проблемы с ложными срабатываниями тревог на сжатые исполняемые файлы. В попытке решить проблему вредоносного ПО, запутанного с помощью упаковщиков времени выполнения, IEEE Industry Connections Security Group представила программное обеспечение taggant system.
Сжатие исполняемых файлов было более популярным, когда компьютеры были ограничены объемом памяти гибкими дисками, которые были как медленными, так и носителями малой емкости, и небольшими жесткими дисками ; это позволяло компьютеру хранить больше программного обеспечения в том же объеме пространства без неудобств, связанных с необходимостью вручную распаковывать архивный файл каждый раз, когда пользователь хотел использовать программное обеспечение. Однако сжатие исполняемых файлов стало менее популярным из-за увеличения емкости хранилища на компьютерах. Он используется в демосцене, где демоверсии должны оставаться в пределах размера, например 64 килобайт, для участия в некоторых соревнованиях. Только очень сложные форматы сжатия, которые увеличивают время загрузки, делают исполняемый файл достаточно маленьким, чтобы участвовать в этих соревнованиях.
Известные компрессоры исполняемых файлов для CP / M / MSX-DOS .COM файлы :
Известные компрессоры исполняемых файлов для DOS исполняемые файлы (.COM или .EXE ):
Известные компрессоры исполняемых файлов в OS/2 :
Известные компрессоры исполняемых файлов для Новые исполняемые файлы :
Известные компрессоры исполняемых файлов для Переносимые исполняемые файлы :
Примечание: клиенты, отмеченные фиолетовым цветом, больше не находятся в разработке.
Имя | Последняя стабильная версия | Лицензия на программное обеспечение | x86-64 поддержка |
---|---|---|---|
32Lite | |||
Alienyze | 1.4 (17 августа 2020 г. (2020-08 -17)) | Собственный | Нет |
ANDpakk2 | |||
Armadillo | 9.62 (7 июня 2013 (2013-06-07)) | Собственный | Да |
ASPack | 2.40 (7 декабря 2018 (2018-12-07)) | Собственный | Да |
ASPR (ASProtect) | 2.78 (7 декабря 2018 (2018-12 -07)) | Собственный | Да |
BeRoEXEPacker | |||
BIN-crypter | |||
BoxedApp Packer | 3.3 (26 июля 2015 (2015-07-26)) | Собственный | Да |
CExe | 1.0b (20 июля 2001 (2001-07-20)) | GPL | Нет |
Crinkler | 2.2 (15 июня 2019 (2019-06-15)) | Бесплатное | Да |
dotBundle | 1.3 (4 апреля 2013 (2013-04-04)) | Собственное | Да |
Enigma Protector | 6.60 (21 августа 2019 (2019-08-21)) | Собственный | Да |
Enigma Virtual Box | 9,40 (10 октября 2019 (2019- 10-10)) | Собственный | Да |
exe32pack | |||
EXE Bundle | 3. 11 (7 января 2011 (2011-01-07)) | Собственный | ? |
EXECryptor | |||
EXE Stealth | 4.14 (29 июня 2011 (2011-06-29)) | Собственный | ? |
eXPressor | 1.8.0.1 (14 января 2010 (2010-01-14)) | Собственный | ? |
FSG | 2.0 (24 мая 2004 (2004-05-24)) | Бесплатное | Нет |
kkrunchy src | 0.23a4 (Неизвестно) | Общественное достояние | Нет |
MEW | 1.1 (Неизвестно) | Бесплатное | Нет |
MPRESS | 2,19 (2 января 2012 (2012-01-02)) | Бесплатное ПО | Да |
MuCruncher | |||
NeoLite | |||
.netshrink | 2.7 (2 июля 2016 (2016-07-02)) | Собственный | Да |
NsPack | |||
Obsidium | 1.6 (11 апреля 2017 (2017-04 -11)) | Собственный | Да |
PECompact | |||
PELock | 2.06 (15 августа 2016 (2016-08-15)) | Собственный | Нет |
PEPack | |||
PESpin | 1.33 (3 мая 2011 (2011-05-03)) | Freeware | Да |
Petite | 2.4 (22 сентября 2016 (2016- 09-22)) | Бесплатное | Нет |
PKLite32 | |||
RLPack Basic | 1.21 (31 октября 2008 г. (2 008-10-31)) | GPL | Нет |
Shrinker32 | |||
Smart Packer Pro X | 2.0.0.1 (3 июня 2019 (2019-06-03)) | Собственный | Да |
Themida / WinLicense | 3.0 (24 октября 2019 (2019-10-24)) | Собственный | Да |
Upack | |||
UPX | 3,95 (26 августа 2018 г. (2018-08-26)) | GPL | экспериментальный |
VMProtect | 3.4 (3 августа 2019 (2019-08-03)) | Собственный | Да |
WWPack32 | |||
XComp / XPack | 0,98 (18 февраля 2007 (2007-02-18)) | Бесплатное ПО | Нет |
Yoda's Crypte | |||
YZPack |
Известные исполняемые компрессоры для файлов ELF :
Известные исполняемые компрессоры для сборки CLI файлы:
Известные исполняемые файлы компрессоров для файлов приложений Mac OS Classic :
Известные исполняемые компрессоры для файлов Mach-O (Apple Mac OS X):
Известные исполняемые компрессоры для исполняемых файлов на Commodore 64 и VIC 20 :
Известные компрессоры исполняемых файлов для исполняемых файлов в серии Commodore Amiga :
Известные исполняемые компрессоры для Java :
JAR файлы:
WAR файлы:
Есть два года Части сжатия, которые можно применить к сценариям JavaScript :
Они сжимают исходный сценарий и выводят новый сценарий, который имеет распаковщик и сжатые данные.
Они удаляют пробелы, удаляют комментарии и сокращают имена переменных и функций, но не изменяют поведение скрипта.