Сжатие исполняемого файла

Способы сжатия исполняемого файла

Сжатие исполняемого файла — это любой способ сжатия исполняемого файла и объединения сжатых данных с кодом распаковки в один исполняемый файл. Когда этот сжатый исполняемый файл выполняется, код распаковки воссоздает исходный код из сжатого кода перед его выполнением. В большинстве случаев это происходит прозрачно, поэтому сжатый исполняемый файл может использоваться точно так же, как и оригинал. Компрессоры исполняемых файлов часто называют упаковщиками исполняемых файлов , упаковщиками времени выполнения , упаковщиками программного обеспечения , защитниками программного обеспечения или даже « полиморфными упаковщиками » и « инструментами обфускации ».

Сжатый исполняемый файл можно считать самораспаковывающимся архивом , где сжатый исполняемый файл упакован вместе с соответствующим кодом распаковки в исполняемый файл. Некоторые сжатые исполняемые файлы можно распаковать для восстановления исходного файла программы без непосредственного выполнения. Для этого можно использовать две программы: CUP386 и UNP. [ необходима цитата ]

Большинство сжатых исполняемых файлов распаковывают исходный код в памяти, и большинству требуется немного больше памяти для запуска (потому что им нужно хранить код декомпрессора, сжатые данные и распакованный код). Более того, некоторые сжатые исполняемые файлы имеют дополнительные требования, например, те, которые записывают распакованный исполняемый файл в файловую систему перед его выполнением.

Сжатие исполняемых файлов не ограничивается бинарными исполняемыми файлами, но может также применяться к скриптам, таким как JavaScript . Поскольку большинство языков сценариев разработаны для работы с кодом, понятным человеку , который имеет высокую избыточность , сжатие может быть очень эффективным и таким же простым, как замена длинных имен, используемых для идентификации переменных и функций, на более короткие версии и/или удаление пробелов .

Преимущества и недостатки

Дистрибьюторы программного обеспечения используют сжатие исполняемых файлов по разным причинам, в первую очередь для снижения требований к вторичному хранилищу своего программного обеспечения; поскольку компрессоры исполняемых файлов специально разработаны для сжатия исполняемого кода, они часто достигают лучшей степени сжатия , чем стандартные средства сжатия данных , такие как gzip , zip или bzip2 [ требуется ссылка ] . Это позволяет дистрибьюторам программного обеспечения оставаться в рамках ограничений выбранных ими носителей распространения (таких как CD-ROM , DVD-ROM или дискета ) или сокращать время и полосу пропускания, необходимые клиентам для доступа к программному обеспечению, распространяемому через Интернет .

Сжатие исполняемого файла также часто используется для предотвращения обратного проектирования или для сокрытия содержимого исполняемого файла (например, для сокрытия наличия вредоносного ПО от антивирусных сканеров ) с помощью фирменных методов сжатия и/или дополнительного шифрования . Сжатие исполняемого файла может использоваться для предотвращения прямого дизассемблирования , маскировки строковых литералов и изменения сигнатур. Хотя это не исключает вероятность обратного проектирования, это может сделать процесс более затратным.

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

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

Другим недостатком является то, что некоторые утилиты больше не могут определять зависимости библиотеки времени выполнения , поскольку видна только статически связанная заглушка экстрактора.

Кроме того, некоторые старые антивирусные сканеры просто сообщают обо всех сжатых исполняемых файлах как о вирусах , поскольку заглушки декомпрессора имеют некоторые общие характеристики с ними. Большинство современных антивирусных сканеров могут распаковывать несколько различных слоев сжатия исполняемых файлов, чтобы проверить фактический исполняемый файл внутри, но некоторые популярные антивирусные и антивирусные сканеры имели проблемы с ложными срабатываниями на сжатых исполняемых файлах. В попытке решить проблему вредоносных программ, запутанных с помощью упаковщиков времени выполнения, IEEE Industry Connections Security Group представила систему программных тегов .

Сжатие исполняемых файлов было более популярным, когда компьютеры были ограничены емкостью дискет , которые были как медленными, так и малоемкими носителями, и небольшими жесткими дисками ; это позволяло компьютеру хранить больше программного обеспечения в том же объеме пространства, без неудобств, связанных с необходимостью вручную распаковывать архивный файл каждый раз, когда пользователь хотел использовать программное обеспечение. Однако сжатие исполняемых файлов стало менее популярным из-за увеличения емкости хранения на компьютерах. Оно используется в демосцене, где демонстрации должны оставаться в пределах ограничения по размеру, например, 64k intro . Только очень сложные форматы сжатия, которые увеличивают время загрузки, позволяют сохранять исполняемый файл достаточно маленьким для участия в этих соревнованиях.

Список исполняемых упаковщиков

Исполняемый файл CP/M и MSX-DOS

Известные исполняемые компрессоры для файлов CP/M-80 / MSX-DOS .COM :

  • PMexe (с 1990 года, написан Ёсихико Мино, PMARC.COM+PMEXE.CPM, сигнатура "-pms-") [1]
  • PopCom! (с 1992 года, автор Ёсихико Мино, POPCOM.COM, подпись "-pc1-")

Исполняемый файл MS-DOS

Известные исполняемые компрессоры для исполняемых файлов, совместимых с MS-DOS ( .COM или .EXE ):

  • Realia Spacemaker (с 1982 года, автор Роберт Б.К. Дьюар , SM.COM, подпись "MEMORY$") [2] [3] [4] [5] [6] [7] [8] [9]
  • Microsoft EXEPACK (с 1985 года, написанный Рубеном Борманом, EXEPACK.EXE, LINK.EXE /E[XEPACK], подпись "RB") [9] [5] [4] [10]
  • LZEXE (с 1989 года, написан Фабрисом Беллардом , LZEXE.EXE) [11] [12]
  • PKWare PKLite (с 1990 года, написанный Филом Кацем , PKLITE.EXE) [12] [13]
  • DIET (с 1991 года, написана Тедди Мацумото, DIET.EXE) [12]
  • TINYPROG (TINYPROG.EXE)
  • Программное обеспечение RJS RJCRUSH (с 1994 года, написано Роландом Скиннером, RJCRUSH.EXE)
  • XPA (с 1995 года, написанный ДжауМингом Ценгом, XPA.EXE)
  • Ibsen Software aPACK (с 1997 г., автор Йорген Ибсен, APACK.EXE)
  • UPX (с 1998 года, авторы Маркус FXJ Оберхумер и Ласло Мольнар)
  • 32LiTE (с 1998 года, написан Олегом Прохоровым, 32LITE.EXE)
  • Знание Динамика Компрессор LZW [14]
  • WWpack (с 1994 года, написанный Петром Варезаком и Рафалем Вежбицки, WWPACK.EXE)
  • 624 (только для файлов .COM размером менее 25 КБ, использует LZW )
  • AINEXE
  • AvPack
  • ComPack
  • Конверт HASP
  • ЛГЛЗ
  • PMWLITE
  • ПроПак
  • UCEXE
  • WDOSX
  • ХЕ
  • XPack

Исполняемый файл OS/2

Известные исполняемые компрессоры под OS/2 :

  • НеЛайт
  • LxLite

Новый исполняемый файл

Известные компрессоры исполняемых файлов для новых исполняемых файлов :

  • PackWin
  • PKWare PKLite (начиная с версии 2.01)
  • ВинЛайт

Портативный исполняемый файл

Известные компрессоры исполняемых файлов для Portable Executables :

Примечание: клиенты, выделенные фиолетовым цветом, больше не находятся в разработке.

ИмяПоследняя стабильная версияЛицензия на программное обеспечениеподдержка x86-64
32Lite
Отчуждать1.4 (17 августа 2020 г. ) ( 2020-08-17 )ЗапатентованныйНет
ANDpakk2
Броненосец9.62 (7 июня 2013 г. ) ( 2013-06-07 )ЗапатентованныйДа
ASPack2.40 (7 декабря 2018 г. ) (2018-12-07)ЗапатентованныйДа
ASPR (ASProtect)2.78 (7 декабря 2018 г. ) (2018-12-07)ЗапатентованныйДа
BeRoEXEPacker
BIN-криптер
Упаковщик коробочных приложений3.3 (26 июля 2015 г. ) (2015-07-26)ЗапатентованныйДа
CExe1.0b (20 июля 2001 г. ) (2001-07-20)GPLНет
Кринклер2.3 (22 июля 2020 г. ) (2020-07-22)ЗлибДа
dotBundle1.3 (4 апреля 2013 г. ) [15] (2013-04-04)ЗапатентованныйДа
Защитник Энигмы6.60 (21 августа 2019 г. ) [16] (2019-08-21)ЗапатентованныйДа
Виртуальная коробка Enigma9.40 (10 октября 2019 г. ) [16] (2019-10-10)ЗапатентованныйДа
exe32pack
EXE-пакет3.11 (7 января 2011 г. ) [17] (2011-01-07)Запатентованный?
EXEКриптор
EXE-стелс4.14 (29 июня 2011 г. ) [17] (2011-06-29)Запатентованный?
eXPressor1.8.0.1 (14 января 2010 г. ) (2010-01-14)Запатентованный?
ФСГ2.0 (24 мая 2004 г. ) [18] (2004-05-24)Бесплатное ПОНет
kkrunchy src0.23a4 (Неизвестно)Общественное достояниеНет
МЭВ1.1 (Неизвестно)Бесплатное ПОНет
МПРЕСС2.19 (2 января 2012 г. ) (2012-01-02)Бесплатное ПОДа
MuCruncher
НеоЛайт
NsPack
Обсидиум1.6 (11 апреля 2017 г. ) [19] (2017-04-11)ЗапатентованныйДа
PEКомпактный
PEPack
PESpin1.33 (3 мая 2011 г. ) (2011-05-03)Бесплатное ПОДа
Маленькая2.4 (22 сентября 2016 г. ) (2016-09-22)Бесплатное ПОНет
PKLite32
Базовый пакет RLPack1.21 (31 октября 2008 г. ) (2008-10-31)GPLНет
Shrinker32
Смарт-упаковщик Pro X2.0.0.1 (3 июня 2019 г. ) (2019-06-03)ЗапатентованныйДа
Themida/WinLicense3.0 (24 октября 2019 г. ) (2019-10-24)ЗапатентованныйДа
Упаковать
UPX3.96 (23 января 2020 г. ) (2020-01-23)GPLэкспериментальный
VMProtect3.4 (3 августа 2019 г. ) (2019-08-03)ЗапатентованныйДа
WWPack321.20 (19 июня 2000 г. ) (2000-06-19)Нет
XComp/XPack0,98 (18 февраля 2007 г. ) (2007-02-18)Бесплатное ПОНет
Склеп Йоды
YZPack

ELF-файлы

Известные исполняемые компрессоры для ELF- файлов:

  • gzexe (использует заглушку сценария оболочки и gzip , работает на большинстве Unix-подобных систем)
  • Конверт HASP
  • UPX
  • 624 (для Linux/386) [20]

Файлы сборки CLI

Известные исполняемые компрессоры для файлов сборки CLI :

  • .NETZ
  • NsPack
  • Мпресс
  • Конверт HASP
  • dotBundle
  • Exepack.NET
  • DotProtect: [21] Коммерческий протектор/упаковщик для .net и mono. Включает онлайн-проверки и «стандартное шифрование в отрасли».

Классические приложения Mac OS

Компрессоры исполняемых файлов для приложений Mac OS Classic :

  • Приложение VISE [22]
  • StuffIt InstallerMaker

Файлы Mach-O (Apple Mac OS X)

Известные исполняемые компрессоры для файлов Mach-O (Apple Mac OS X):

  • Конверт HASP
  • UPX
  • VMProtect

Commodore 64 и VIC-20

Известные компрессоры исполняемых файлов для Commodore 64 и VIC-20 :

  • ПуКранч [23]
  • Экзомайзер [24]
  • БайтБузер [25]

Амига

Известные компрессоры исполняемых файлов для серии Amiga :

  • пакер [26]
  • Титаник дробилка [26]
  • имплодер [26]
  • TNM-кранчер
  • Шринклер [27]
  • ПакФайр [28]

Ява

Известные компрессоры исполняемых файлов для Java :

JAR- файлы:

WAR -файлы:

  • Конверт HASP

JavaScript

К скриптам JavaScript можно применять два типа сжатия :

  • Уменьшите избыточность в скрипте (удалив комментарии, пробелы и сократив имена переменных и функций). Это не изменит поведение скрипта.
  • Сжать исходный скрипт и создать новый скрипт, содержащий код распаковки и сжатые данные. Это похоже на сжатие исполняемого двоичного файла.

Самодекомпрессионные компрессоры

Они сжимают исходный скрипт и выводят новый скрипт, содержащий декомпрессор и сжатые данные.

  • JsSfx
  • Упаковать

Компрессоры, снижающие избыточность

Они удаляют пробелы, удаляют комментарии и сокращают имена переменных и функций, но не изменяют поведение скрипта.

  • Упаковщик
  • YUI-компрессор
  • Термоусадочная
  • JSMin

Смотрите также

Ссылки

  1. ^ Gielen, Pierre; Taylor, Johnathan (1997) [1993]. Logan, Wolverine (ред.). "PMarc help manual". Архивировано из оригинала 2019-04-22 . Получено 2019-02-22 . […] PMEXE.CPM […] — это модуль […] в сочетании с PMARC […], используемый для создания исполняемых сжатых COM-файлов (как LZEXE или PKLITE […] введите: PMARC <архив>.COM=PMEXE2.CPM <имя_файла> [опции] Имя архива должно быть .COM […], а не .PMA. Выходной файл будет иметь расширение .CPM. Это COM- файл MSX-DOS […] переименуйте файл […], чтобы запустить его […]
  2. ^ "Экспертный отчет Роберта Б. К. Дьюара в ответ на отчет Кеннета Д. Крюса". Cambridge University Press et al против Patton et al, дело 124, Дополнительные первоначальные раскрытия информации Cambridge University Press, Oxford University Press, Inc., Sage Publications, Inc. - Cambridge University Press, Oxfort University Press, Inc. и Sage Publications, Inc. против Марка П. Беккера, президента Университета штата Джорджия, и др., Гражданский иск № 1:08-CV-1425-ODE (судебный документ). Окружной суд США по Северному округу Джорджии, отделение Атланты. стр. 18. Приложение A. Архивировано из оригинала 01.05.2018 . Получено 23.04.2019 . […] SPACEMAKER и TERMULATOR, стандартное программное обеспечение для IBM PC ( утилита сжатия файлов PC DOS и эмулятор VT-100 ), продаваемое Realia, Inc. RBK Dewar (1982–1983), язык ассемблера 8088, 8000 строк […]
  3. ^ Realia, Inc. (январь 1983 г.). «Если вы используете DOS, вам нужна эта программа». PC Magazine (реклама). 2 (9). Ziff-Davis Publishing : 417. Архивировано из оригинала 22.04.2019 . Получено 22.04.2019 .
  4. ^ ab Dewar, Robert Berriedale Keith (1984-03-13). "DOS 3.1 ASMB (Another Silly Microsoft Bug)". info-ibmpc@USC-ISIB.ARPA . Архивировано из оригинала 2018-05-01 . Получено 2019-04-23 . […] Параметр /E компоновщика должен генерировать EXE-файл, который логически эквивалентен несжатому EXE-файлу. Текущая версия […] приводит к затиранию AX. AX при входе в EXE-файл имеет определенное значение (он указывает на допустимость диска для параметров), поэтому его следует передать в несжатый образ. Учитывая это одно очень очевидное нарушение правил интерфейса, могут быть и другие, я не стал заниматься дальнейшим расследованием […] Я написал программу Realia SpaceMaker, которая делает то же самое, что и опция EXEPACK (но, само собой разумеется, не имеет этого конкретного […]
  5. ^ ab Paul, Matthias R. (2002-10-07) [2000]. "Re: masm .com (PSP) related trouble". Группа новостей : alt.lang.asm. Архивировано из оригинала 2017-09-03 . Получено 2017-09-03 .
  6. ^ Necasek, Michal (2018-04-30). "Realia SpaceMaker". Музей OS/2 . Архивировано из оригинала 2019-01-27 . Получено 2019-02-22 .
  7. ^ Парсонс, Джефф (10.01.2019). «Обновление ранних утилит Norton». PCjs . Архивировано из оригинала 29.01.2019 . Получено 22.02.2019 .
  8. ^ Necasek, Michal (2019-01-12). "Yep, Norton Did It". Музей OS/2 . Архивировано из оригинала 2019-04-22 . Получено 2019-04-22 .
  9. ^ ab Necasek, Michal (2018-03-23). ​​"EXEPACK и A20-Gate". Музей OS/2 . Архивировано из оригинала 2018-11-13 . Получено 2019-04-20 .
  10. ^ Майлз, Яаков; Натер, Эд (1986-05-17) [1986-02-05, 1986-02-09]. "Недокументированная опция Microsoft LINK: /E". Список рассылки INFO-IBMPC . Архивировано из оригинала 2018-05-01 . Получено 2019-04-26 . [Майлз:] Существует недокументированный […] переключатель в 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 […]
  11. ^ Беллард, Фабрис (2003-02-09). "Домашняя страница LZEXE". bellard.org . Архивировано из оригинала 2019-03-24 . Получено 2019-03-18 .
  12. ^ abc Salomon, David (2000) [1998]. "Глава 3.22: EXE-компрессоры". Сжатие данных: Полный справочник (2-е изд.). Springer-Verlag . стр. 212. doi :10.1007/978-3-642-86092-8. ISBN 978-3-540-78086-1. S2CID  35889155. Архивировано из оригинала 2022-04-07 . Получено 2019-04-26 .
  13. ^ Пол, Маттиас Р. (11.04.2002). "Re: [fd-dev] ОБЪЯВЛЕНИЕ: CuteMouse 2.0 alpha 1". freedos-dev . Архивировано из оригинала 21.02.2020 . Получено 21.02.2020 . […] > ни один упаковщик не может упаковать комбинации вроде .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.)
  14. ^ "Архив Google Code - Долгосрочное хранилище для хостинга проектов Google Code". Архивировано из оригинала 2021-12-03 . Получено 2022-04-07 .
  15. ^ "DotBundle - Загрузить ознакомительную версию". Архивировано из оригинала 2013-08-21 . Получено 2013-05-06 .
  16. ^ ab "Защита программного обеспечения, лицензирование программного обеспечения, виртуализация программного обеспечения". Архивировано из оригинала 2018-03-13 . Получено 2018-03-12 .
  17. ^ ab "WebtoolMaster Software News". Архивировано из оригинала 2020-07-20 . Получено 15-01-2012 .
  18. ^ "Архивная копия". www.xtreeme.prv.pl . Архивировано из оригинала 2004-05-25 . Получено 2022-01-15 .{{cite web}}: CS1 maint: archived copy as title (link)
  19. ^ "Загрузить | Obsidium Software Protection System". Архивировано из оригинала 2019-02-07 . Получено 2017-04-18 .
  20. ^ "624".
  21. ^ DotProtect http://site.yvansoftware.be/dotpacker1_0 Архивировано 22 января 2011 г. на Wayback Machine
  22. ^ Киен, Стив; Марк, Дэйв (1999). «Беседа со Стивом Киеном». MacTech . Том 15, № 4. Архивировано из оригинала 10.12.2017 . Получено 10.12.2017 .
  23. ^ "Программа сжатия данных без потерь: Hybrid LZ77 RLE". www.cs.tut.fi . Архивировано из оригинала 2014-07-30 . Получено 2022-01-15 .
  24. ^ web.comhem.se/~u13114991/exo/
  25. ^ "ByteBoozer (PC)". Архивировано из оригинала 2022-08-15 . Получено 2022-04-07 .
  26. ^ abc "Кранчеры для загрузки".
  27. ^ "Askeksa/Shrinkler". GitHub . 2021-09-25. Архивировано из оригинала 2022-04-07 . Получено 2022-04-07 .
  28. ^ "PackFire v1.2k by Neural". Архивировано из оригинала 2024-06-30 . Получено 2022-04-07 .
Retrieved from "https://en.wikipedia.org/w/index.php?title=Executable_compression&oldid=1262645672#SM"