我正在寻找与这个问题类似的答案,但对于温拉尔而不是7zip。本质上,我想要一个权威签名,至少可以说:"所有Winrar生成的自我提取的可执行文件都使用版本420中的默认SFX文件创建的可执行文件将具有字节0x15、0xA1、0x45、0xCCC,0x21,0x21、0x98位置0x00027400,以及其他非SFX文件不太可能具有此签名"。更好的是,如果在Winrar SFX文件的所有版本中都可以找到相同的签名,即使它们在不同的位置。
从本质上说,除了文件的存档部分,它们的工作方式将非常相似,但是有些字符串使标识符差(E.X.,"该程序不能以DOS模式运行",但每个SFX都在它恰好在大多数其他Windows可执行文件中)
当前,我确定签名的方法是查看Winrar SFX的各种版本,并查找所有文件具有共同的4或6个字节的序列。不幸的是,有很多,因此很难选择一个。
来自 technote.txt 在winrar安装文件夹中:
- 要处理一个SFX档案,您需要跳过SFX模块搜索 对于存档中的标记块。没有标记块序列(0x52 0x61 0x72 0x21 0x1a 0x07 0x00)在SFX模块本身中。
您已经指出了这一点:unrar源代码在 archive.cpp 中具有代码在文件中的读取。SFX零件的最大尺寸永远不会大于 rardefs.hpp 中定义的数字:
#define MAXSFXSIZE 0x100000
如果我有正确的话,您想查看文件,看看它是否是使用Winrar构建的有效SFX文件,对吗?
在这种情况下,这些是您应该寻找的PE签名(尚未尝试过它们,但它们在底部链接的PE SIG DB中列出):
winrar-sfx = 80E9A1C1C11368E4167546C1C1055EEB019D6864864863746EB028CE05FF7D0winrar-sfx = EB0102EB02CD20B880
只需获取输入点,看看这些字节是否按照正确的顺序遵循。可以在http://tot-ltd.org/packer.db。