Сжатие исполняемого файла — это любой способ сжатия исполняемого файла и объединения сжатых данных с кодом распаковки в один исполняемый файл. Когда этот сжатый исполняемый файл выполняется, код распаковки воссоздает исходный код из сжатого кода перед его выполнением. В большинстве случаев это происходит прозрачно, поэтому сжатый исполняемый файл может использоваться точно так же, как и оригинал. Компрессоры исполняемых файлов часто называют упаковщиками исполняемых файлов , упаковщиками времени выполнения , упаковщиками программного обеспечения , защитниками программного обеспечения или даже « полиморфными упаковщиками » и « инструментами обфускации ».
Сжатый исполняемый файл можно считать самораспаковывающимся архивом , где сжатый исполняемый файл упакован вместе с соответствующим кодом распаковки в исполняемый файл. Некоторые сжатые исполняемые файлы можно распаковать для восстановления исходного файла программы без непосредственного выполнения. Для этого можно использовать две программы: CUP386 и UNP. [ необходима цитата ]
Большинство сжатых исполняемых файлов распаковывают исходный код в памяти, и большинству требуется немного больше памяти для запуска (потому что им нужно хранить код декомпрессора, сжатые данные и распакованный код). Более того, некоторые сжатые исполняемые файлы имеют дополнительные требования, например, те, которые записывают распакованный исполняемый файл в файловую систему перед его выполнением.
Сжатие исполняемых файлов не ограничивается бинарными исполняемыми файлами, но может также применяться к скриптам, таким как JavaScript . Поскольку большинство языков сценариев разработаны для работы с кодом, понятным человеку , который имеет высокую избыточность , сжатие может быть очень эффективным и таким же простым, как замена длинных имен, используемых для идентификации переменных и функций, на более короткие версии и/или удаление пробелов .
Дистрибьюторы программного обеспечения используют сжатие исполняемых файлов по разным причинам, в первую очередь для снижения требований к вторичному хранилищу своего программного обеспечения; поскольку компрессоры исполняемых файлов специально разработаны для сжатия исполняемого кода, они часто достигают лучшей степени сжатия , чем стандартные средства сжатия данных , такие как gzip , zip или bzip2 [ требуется ссылка ] . Это позволяет дистрибьюторам программного обеспечения оставаться в рамках ограничений выбранных ими носителей распространения (таких как CD-ROM , DVD-ROM или дискета ) или сокращать время и полосу пропускания, необходимые клиентам для доступа к программному обеспечению, распространяемому через Интернет .
Сжатие исполняемого файла также часто используется для предотвращения обратного проектирования или для сокрытия содержимого исполняемого файла (например, для сокрытия наличия вредоносного ПО от антивирусных сканеров ) с помощью фирменных методов сжатия и/или дополнительного шифрования . Сжатие исполняемого файла может использоваться для предотвращения прямого дизассемблирования , маскировки строковых литералов и изменения сигнатур. Хотя это не исключает вероятность обратного проектирования, это может сделать процесс более затратным.
Сжатый исполняемый файл требует меньше места для хранения в файловой системе, а значит, меньше времени для передачи данных из файловой системы в память. С другой стороны, требуется некоторое время для распаковки данных перед началом выполнения. Однако скорость различных носителей данных не поспевает за средней скоростью процессора, поэтому хранилище очень часто является узким местом. Таким образом, сжатый исполняемый файл будет загружаться быстрее на большинстве распространенных систем. На современных настольных компьютерах это редко заметно, если только исполняемый файл не необычайно большой, поэтому скорость загрузки не является основной причиной за или против сжатия исполняемого файла.
В операционных системах, которые по запросу загружают с диска исполняемые образы, сжатые исполняемые файлы делают этот процесс менее эффективным. Заглушка декомпрессора выделяет блок памяти для хранения распакованных данных, который остается выделенным до тех пор, пока исполняемый файл остается загруженным, независимо от того, используется он или нет, конкурируя за ресурсы памяти с другими приложениями все время. Если операционная система использует файл подкачки, распакованные данные должны быть записаны в него, чтобы освободить память, вместо того, чтобы просто отбрасывать неиспользуемые блоки данных и повторно загружать их из исполняемого образа при необходимости снова. Обычно это незаметно, но становится проблемой, когда исполняемый файл загружается более одного раза одновременно — операционная система не может повторно использовать уже загруженные блоки данных, данные должны быть распакованы в новый блок памяти и будут выгружены независимо, если не используются. Дополнительные требования к хранилищу и времени означают, что необходимо тщательно взвесить, следует ли сжимать исполняемые файлы, которые обычно запускаются более одного раза одновременно.
Другим недостатком является то, что некоторые утилиты больше не могут определять зависимости библиотеки времени выполнения , поскольку видна только статически связанная заглушка экстрактора.
Кроме того, некоторые старые антивирусные сканеры просто сообщают обо всех сжатых исполняемых файлах как о вирусах , поскольку заглушки декомпрессора имеют некоторые общие характеристики с ними. Большинство современных антивирусных сканеров могут распаковывать несколько различных слоев сжатия исполняемых файлов, чтобы проверить фактический исполняемый файл внутри, но некоторые популярные антивирусные и антивирусные сканеры имели проблемы с ложными срабатываниями на сжатых исполняемых файлах. В попытке решить проблему вредоносных программ, запутанных с помощью упаковщиков времени выполнения, IEEE Industry Connections Security Group представила систему программных тегов .
Сжатие исполняемых файлов было более популярным, когда компьютеры были ограничены емкостью дискет , которые были как медленными, так и малоемкими носителями, и небольшими жесткими дисками ; это позволяло компьютеру хранить больше программного обеспечения в том же объеме пространства, без неудобств, связанных с необходимостью вручную распаковывать архивный файл каждый раз, когда пользователь хотел использовать программное обеспечение. Однако сжатие исполняемых файлов стало менее популярным из-за увеличения емкости хранения на компьютерах. Оно используется в демосцене, где демонстрации должны оставаться в пределах ограничения по размеру, например, 64k intro . Только очень сложные форматы сжатия, которые увеличивают время загрузки, позволяют сохранять исполняемый файл достаточно маленьким для участия в этих соревнованиях.
Известные исполняемые компрессоры для файлов CP/M-80 / MSX-DOS .COM :
Известные исполняемые компрессоры для исполняемых файлов, совместимых с MS-DOS ( .COM или .EXE ):
Известные исполняемые компрессоры под OS/2 :
Известные компрессоры исполняемых файлов для новых исполняемых файлов :
Известные компрессоры исполняемых файлов для Portable Executables :
Примечание: клиенты, выделенные фиолетовым цветом, больше не находятся в разработке.
Известные исполняемые компрессоры для ELF- файлов:
Известные исполняемые компрессоры для файлов сборки CLI :
Компрессоры исполняемых файлов для приложений Mac OS Classic :
Известные исполняемые компрессоры для файлов Mach-O (Apple Mac OS X):
Известные компрессоры исполняемых файлов для Commodore 64 и VIC-20 :
Известные компрессоры исполняемых файлов для серии Amiga :
Известные компрессоры исполняемых файлов для Java :
JAR- файлы:
WAR -файлы:
К скриптам JavaScript можно применять два типа сжатия :
Они сжимают исходный скрипт и выводят новый скрипт, содержащий декомпрессор и сжатые данные.
Они удаляют пробелы, удаляют комментарии и сокращают имена переменных и функций, но не изменяют поведение скрипта.
[…] PMEXE.CPM […] — это модуль […] в сочетании с PMARC […], используемый для создания исполняемых сжатых COM-файлов (как LZEXE или PKLITE […] введите: PMARC <архив>.COM=PMEXE2.CPM <имя_файла> [опции] Имя архива должно быть .COM […], а не .PMA. Выходной файл будет иметь расширение .CPM. Это COM- файл MSX-DOS […] переименуйте файл […], чтобы запустить его […]
[…] SPACEMAKER и TERMULATOR, стандартное программное обеспечение для IBM PC (
утилита сжатия файлов
PC DOS и эмулятор
VT-100
), продаваемое Realia, Inc.
RBK Dewar
(1982–1983), язык ассемблера 8088, 8000 строк […]
[…] Параметр /E компоновщика должен генерировать EXE-файл, который логически эквивалентен несжатому EXE-файлу. Текущая версия […] приводит к затиранию AX. AX при входе в EXE-файл имеет определенное значение (он указывает на допустимость диска для параметров), поэтому его следует передать в несжатый образ. Учитывая это одно очень очевидное нарушение правил интерфейса, могут быть и другие, я не стал заниматься дальнейшим расследованием […] Я написал программу Realia SpaceMaker, которая делает то же самое, что и опция EXEPACK (но, само собой разумеется, не имеет этого конкретного […]
[Майлз:] Существует недокументированный […] переключатель в
Microsoft
LINK.EXE […], который вызовет автоматическое сжатие во время связывания. Этот процесс исключит хранение неинициализированных массивов из EXE-файла, созданного компоновщиком […] Чтобы использовать эту функцию, укажите параметр /E в командной строке […] [Nather:] Этот параметр отсутствует в MS Link версий 3.00 и 3.01 [Miles:] Сравнивая размеры (упакованных) файлов, созданных с помощью LINK версии 3.02 и параметра /E, с размером EXE-файла, вручную упакованного с помощью […] EXEPACK, я пришел к выводу, что параметр LINK версии 3.02 /E создает ТОЧНО такой же размер файла, как и ручной запуск EXEPACK для обычного EXE-файла, созданного LINK […]
[…] > ни один упаковщик не может упаковать комбинации вроде .SYS+.COM или .SYS+.EXE. […] Существуют упаковщики для .COM или .EXE и другие для .SYS, но я тоже не видел упаковщика, который поддерживает
оба в одном
. […] возможность
объединить программу/TSR и драйвер устройства
в .EXE-файлах […] и программу/TSR.COM и драйвер устройства в .COM-программу […] Также можно добавить еще одну самодельную заглушку в файл после того, как он уже был сжат […] все сжатые драйверы устройств
DR-DOS
используют схожую технику, чтобы позволить обычному декомпрессору PKLITE .COM работать с .SYS-файлами (между тем PKLITE сам поддерживает схожую функцию для .SYS-файлов). […](Примечание. В PKLITE 1.50 (1995) и более поздних версиях появилась возможность сжимать драйверы устройств, но не объединенные драйверы COM+SYS.)
{{cite web}}
: CS1 maint: archived copy as title (link)