stringtranslate.com

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

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

Сжатый исполняемый файл можно считать самораспаковывающимся архивом , где сжатый исполняемый файл упакован вместе с соответствующим кодом распаковки в исполняемый файл. Некоторые сжатые исполняемые файлы можно распаковать для восстановления исходного файла программы без непосредственного выполнения. Для этого можно использовать две программы: 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 :

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

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

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

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

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

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

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

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

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

ELF-файлы

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

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

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

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

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

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

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

Commodore 64 и VIC-20

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

Амига

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

Ява

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

JAR- файлы:

WAR -файлы:

JavaScript

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

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

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

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

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

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

Ссылки

  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)". [email protected] . Архивировано из оригинала 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 .