如何使用某种二进制签名识别WinRAR SFX?

时间:2012-11-07 18:17:16

标签: c++ archive winrar self-extracting

我正在寻找类似于the one in this question的答案,但是对于WinRAR而不是7zip。基本上我想要一个权威签名,我至少可以说“在版本420中使用默认SFX文件创建的所有WinRAR生成的自解压可执行文件将在位置0x00027400处具有字节0x15,0xa1,0x45,0xcc,0x21,0x98,以及其他NON SFX文件不太可能有这个签名“。更好的是,如果在WinRAR SFX文件的所有版本中都可以找到相同的签名,即使它们位于不同的位置。

根据SFX的工作方式,它们将非常相似,除了文件的存档部分,但是一些字符串会产生不良标识符(例如,“此程序无法在DOS模式下运行”在每个SFX中,但是它碰巧也出现在大多数其他Windows可执行文件中)

目前,我确定签名的方法是查看WinRAR SFX的各种版本,并查找所有文件共有的4或6个字节的序列。不幸的是,有很多这样的,很难选择一个。

2 个答案:

答案 0 :(得分:1)

从WinRAR安装文件夹中的 TechNote.txt

  
      
  1. 要处理SFX存档,您需要跳过SFX模块搜索   对于存档中的标记块。没有标记块序列(0x52   0x61 0x72 0x21 0x1a 0x07 0x00)在SFX模​​块本身。
  2.   

您已经表明了这一点:unrar源代码在 archive.cpp 中有代码读取文件的方式。 SFX部件的最大尺寸永远不会大于 rardefs.hpp 中定义的数量:

#define  MAXSFXSIZE        0x100000

答案 1 :(得分:0)

如果我说得对,你想查看一个文件,看看它是否是用WinRAR构建的有效SFX文件,对吗?

在这种情况下,这些是您应该寻找的PE签名(尚未尝试过,但它们列在底部链接的PE sig DB中):

WinRAR的-SFX = 80E9A1C1C11368E4167546C1C1055EEB019D6864863746EB028CE05FF7D0 WinRAR的-SFX = EB0102EB02CD20B880

只需获取入口点,然后查看这些字节是否按正确的顺序排列。 http://tot-ltd.org/packer.db可以获得广泛的PE签名列表。