2012-11-07 51 views
2

我在寻找类似the one in this question一个答案,但是WinRAR的,而不是7zip的。基本上我希望有一个权威的签名,我至少可以说“所有的WinRAR生成与420版的默认SFX文件创建自解压可执行文件将在位置0x00027400有个字节为0x15,0xa1,0×45,含有0xCC,为0x21,0x98在全局和其它非SFX文件不太可能有这个签名“。更好的是,如果在所有版本的WinRAR SFX文件中都可以找到相同的签名,即使它们位于不同的位置。由于SFX的工作性质,它们将非常相似,除了文件的存档部分,但某些字符串使得糟糕的标识符(例如,“这个程序不能在DOS模式下运行”在每个SFX中,但它碰巧也出现在大多数其他Windows可执行文件中)如何使用某种二进制签名来识别WinRAR SFX?

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

+2

1)7-Zip是开源; 2)它可以'unrar'thigns; 3)你可以猜测其余的:)你也可以看到[UnRAR.dll源代码](http://www.rarlab.com/rar_add.htm)。 – elmigranto

+0

好的建议,我会看看。但在这种情况下,我并不打算取消任何内容,我试图确定整个文件是否为自解压缩可执行文件,而不是RAR文件。我认为类似的逻辑存在于7z源代码中,尽管它并不总是很容易找到。 – Rollie

+0

我相信UnRAR.dll检查该文件实际上是RAR归档(SFX偶数),而不是试图解压只是随机2GiB-文件。无论如何,我只能在这里进行推测,所以希望别人能够给出更具体的东西。祝你好运:) – elmigranto

回答

1

TechNote.txt在WinRAR的安装文件夹:

  1. 要处理,你需要跳过自解压模块存档中标记块搜索 一个自解压文件。没有标记块序列(0×52 0x61 0x72 0×21 0×07 0X1A 0×00)在SFX模​​块本身。

这个你已经表明自己:对的unrar源代码在archive.cpp它在文件中如何读取的代码。的SFX部分的最大大小将不会比rardefs.hpp定义数目越大:

#define MAXSFXSIZE  0x100000 
0

如果我是正确的,你想看看文件,看看它是否是用WinRAR建立一个有效的SFX文件,对不对?

在这种情况下,这些都是你应该寻找PE签名(没有尝试过他们,但他们在PE SIG DB底部的链接中列出):

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

只需获取入口点并查看这些字节是否按照正确的顺序执行。详细的PE签名列表可在http://tot-ltd.org/packer.db获得。

相关问题