Как извлечь содержимое самораспаковывающегося архива 7-zip, не беспокоясь о том, что содержимое будет выполнено при извлечении.

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

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

Теперь, когда мы знаем, что есть способ изолировать извлекаемый архив, мы можем скопировать этот раздел в отдельный файл. Для этого нам нужно знать смещение в файле, где начинается архив. Это может быть разным для каждого файла, поэтому необходимо искать конкретный адрес в шестнадцатеричном редакторе, ища строку !@InstallEnd@!, за которой следует 7z, которая начало архива. Таким образом, в приведенном выше примере смещение составляет 0x6FFCA или 458698 байт в файле.

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

dd bs=458698 skip=1 if=self-extractor.exe of=archive.7z

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

Обновление (7 октября 2017 г.):

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