【问题标题】:Recognize a 7z SFX from binary contents从二进制内容中识别 7z SFX
【发布时间】:2012-03-03 01:24:27
【问题描述】:

如何从其二进制内容中识别 7z SFX(自解压 EXE)文件,是否有任何偏移开始或特定字节要查找或两者兼而有之?

非常感谢

【问题讨论】:

    标签: c++ c 7zip


    【解决方案1】:

    Google 是您的朋友。搜索"7zip header" 后的第一个结果。文档说这是 7zip 签名:

    BYTE kSignature[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C};
    

    您应该读取文件的前 6 个字节。如果那个 6 字节的序列和上面的 kSignature 一样,那么文件应该是 7z。

    编辑:我一直在尝试在 GNU/Linux 上使用 7z(它实际上创建了 SFX ELF 文件,而不是 PE)。而且我发现在最后一块数据中,实际上存在 7z 签名。 Hexdump 生成一个到字节数 0x00057960 的转储,签名位于此处:

    0x000578f0:  37 7a bc af 27 1c
    

    0x37 和 0x7a 分别是 '7' 和 'z'。因此,在这种情况下,签名的偏移量为 EOF - 112 字节。

    我建议您下载一个十六进制编辑器,创建一个 SFX 文件并测试这个偏移量在每个创建 SFX 7z 的应用程序中是否相同。请记住,我已经在 GNU/Linux 上对此进行了测试,因此在 Windows 上可能会有所不同。

    【讨论】:

    • 我说的是 7z SFX 档案(自解压 EXE 文件)。如果是的话,这 6 个字节是否存在于 7z SFX 档案中?
    • 抱歉,一开始没有考虑到这一点。我已经编辑了我的答案。
    猜你喜欢
    • 2012-10-27
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 2010-10-08
    • 2013-11-23
    • 2014-09-06
    相关资源
    最近更新 更多