Извлечение файлов внутри EXE - PullRequest
1 голос
/ 29 февраля 2020

Итак, у меня есть EXE-файл, который используется в качестве установщика программы. А с 7-Zip я могу извлечь файлы внутри EXE и получить файлы, которые он устанавливает. Это то, что я хотел бы сделать в коде, потому что сейчас я могу делать это только вручную с 7-Zip.

Я пытался:

  • с использованием автономной консольной версии 7-Zip, но оказывается, что он поддерживает только 7z, ZIP, gzip, bzip2, Z и tar, в отличие от «обычного», который поддерживает 31 формат ...

, если это помогает, файл EXE начинается с «4D 5A 90 00 03 00 00 00». Спасибо заранее, и если вам нужна дополнительная информация, пожалуйста, скажите мне.

1 Ответ

1 голос
/ 29 февраля 2020

На Windows исполняемые файлы используют формат PE. Самораспаковывающиеся архивы - это PE-файлы, объединенные с архивами (иногда с дополнительными настройками).

Когда вы пытаетесь открыть такой файл в 7zfm, он вычисляет размер исполняемого файла и пытается распаковать данные, которые к нему добавляются (это данные обычно называются overlay). Все, что вам нужно сделать, это найти смещение наложения и попытаться распаковать его.

Чтобы найти смещение наложения, необходимо рассчитать размер заголовков + размер сегментов. Это легко сделать самостоятельно, но должны быть библиотеки, которые могут сделать это за вас.

...