提取EXE中的文件

Posted

技术标签:

【中文标题】提取EXE中的文件【英文标题】:Extracting the files inside an EXE 【发布时间】:2020-02-29 11:31:15 【问题描述】:

所以我有一个用作程序安装程序的 EXE 文件。使用 7-Zip,我可以提取 EXE 中的文件并获取它正在安装的文件。这就是我想在代码中执行的操作,因为现在我只能使用 7-Zip 手动执行此操作。

我试过了:

使用 7-Zip 独立控制台版本,但事实证明它只支持 7z、ZIP、gzip、bzip2、Z 和 tar,与支持 31 种格式的“普通”版本不同...

如果有帮助,EXE 文件以“4D 5A 90 00 03 00 00 00”开头。 在此先感谢您,如果您需要更多信息,请告诉我。

【问题讨论】:

Maybe have a look here. 【参考方案1】:

在 Windows 上,可执行文件使用 PE 格式。 自解压存档是与存档连接的 PE 文件(有时带有附加配置)。

当您尝试在 7zfm 中打开此类文件时,它会计算可执行文件大小并尝试解压缩附加到它的数据(此数据通常称为 overlay)。 你所要做的就是找到 Overlay offset 并尝试解压它。

为了找到覆盖偏移量,您必须计算标题大小+段大小。这很容易自己完成,但应该有一些库可以为您完成。

【讨论】:

【参考方案2】:

希望这会有所帮助。我的要求是在不解压的情况下查找 exe 中的文件数。

using (ZipArchive archive = ZipFile.Open(@"C:\Users\User\Downloads\AMD-Chipset-Driver_D7R0K_WIN_19.100.16_A00_02.EXE", ZipArchiveMode.Read))

    int count = 0;
    int count1 = archive.Entries.Count;
    // We count only named (i.e. that are with files) entries
    foreach (var entry in archive.Entries)
        if (!String.IsNullOrEmpty(entry.Name))
        
            count += 1;
            Console.WriteLine(entry.FullName);
        

    Console.Write(count);

【讨论】:

以上是关于提取EXE中的文件的主要内容,如果未能解决你的问题,请参考以下文章

从 .exe 文件中提取 .bmp

iexpress 提取文件,然后从 exe 中运行 vbs 引用文件

提取文件夹中所有xml文件中的数据到txt(为人脸识别级联器使用的txt做准备)

如何在delphi中编写并提取exe文件里面的ICO图标

防病毒阻止exe文件被提取?

C#的WinForm中嵌入.exe文件