提取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中的文件的主要内容,如果未能解决你的问题,请参考以下文章
iexpress 提取文件,然后从 exe 中运行 vbs 引用文件