【发布时间】: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