Упаковка исполняемых файлов

Перейти к навигацииПерейти к поиску

Упако́вка исполняемых фа́йлов заключается в сжатии исполняемого файла и прикреплении к нему кода, необходимого для распаковки и выполнения содержимого файла. Упаковка применяется по ряду причин:

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

Упаковщик исполняемых файлов

Упаковщик исполняемых файлов — это программа для уменьшения размера исполняемых файлов. В упакованный файл записывается сжатая копия исходного файла и программа для распаковки.

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

Упакованный исполняемый файл — это разновидность самораспаковывающегося архива (SFX), в котором сжатая информация и программа для распаковки находятся в одном файле.

Примеры упаковщиков

Помимо алгоритмов упаковки, встроенных в некоторые компиляторы и средства разработки (например, Visual C++ и т. п.), существует ряд инструментов для более специфических задач, например:

Распаковщики

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

Многие распаковщики (например, procdump) запускают файл и создают распакованный вариант файла из образа, загруженного в память. Однако в случае, если этот файл содержал вирус, система может быть повреждена. Кроме того, у упаковщиков существует ряд приёмов борьбы с динамической распаковкой: например, расшифровывать код не полностью, а лишь по мере исполнения, или, например, расшифровывать и запускать вирус целиком только в определённый день недели.

Статические распаковщики, которые пытаются распаковать файл, не запуская его (например, CUP386 или UNP), оказываются бесполезны, если алгоритм упаковки требует запуска файла.

См. также