【问题标题】:Extracting the files inside an EXE提取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”开头。
在此先感谢您,如果您需要更多信息,请告诉我。
【问题讨论】:
标签:
c#
extract
7zip
portable-executable
【解决方案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);
}