Исполняемое сжатие


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

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

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

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

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

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