【问题标题】:How can I identify a WinRAR SFX using a binary signature of some sort?如何使用某种二进制签名识别 WinRAR SFX?
【发布时间】:2012-10-27 20:40:12
【问题描述】:

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

从 SFX 的工作性质来看,它们将非常相似,除了文件的存档部分,但有些字符串的标识符很差(例如,“这个程序不能在 DOS 模式下运行”在每个 SFX 中都有,但是它恰好也存在于大多数其他 Windows 可执行文件中)

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

【问题讨论】:

  • 1) 7-zip 是开源的; 2)它可以“解开”事物; 3) 你可以猜到其余的:) 你也可以看到UnRAR.dll source code
  • 好建议,我会看看。但在这种情况下,我不是在寻找 UnRar 任何东西,我试图确定整个文件是否是自解压可执行文件,而不是 RAR 文件。我想类似的逻辑存在于 7z 源代码中的某个地方,尽管并不总是很容易找到。
  • 我相信 UnRAR.dll 检查文件实际上是 RAR 存档(甚至 SFX),而不是试图解压缩随机的 2GiB 文件。无论如何,我只能在这里推测,所以希望其他人能给出更具体的东西。祝你好运:)
  • 看起来它只是通过前 0x100000 字节并尝试找到 RAR 文件的签名。我希望避免这样做,但这可能是一个更强大的解决方案。我不希望对此有更好的答案 - 随时为此效果提供答案,我会接受。
  • 好吧,我在 Windows XP 中使用 4.20 (x86) 创建的两个 SFX 存档中发现了 RAR.SFX 从字节 83131 开始。不确定纯 RAR 文件。

标签: c++ archive winrar self-extracting


【解决方案1】:

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

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

WinRAR-SFX=80E9A1C1C11368E4167546C1C1055EEB019D6864863746EB028CE05FF7D0 WinRAR-SFX=EB0102EB02CD20B880

只需获取入口点并查看这些字节是否按照正确的顺序排列。在http://tot-ltd.org/packer.db 上提供了广泛的 PE 签名列表。

【讨论】:

    【解决方案2】:

    来自 WinRAR 安装文件夹中的 TechNote.txt

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

    这你已经自己指出了:解压缩源代码在 archive.cpp 中有它如何读取文件的代码。 SFX 部分的最大大小永远不会大于 radefs.hpp 中定义的数字:

    #define  MAXSFXSIZE        0x100000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 2022-07-01
      相关资源
      最近更新 更多