有没有什么工具可以定量评估二进制的差异?

逆向工程 二元分析 bin-diffing
2021-07-05 07:52:17

我知道一些二进制差异工具,如 VBinDiff 等。

目前我有大量的二进制文件,大约 500 个。

所以我正在寻找一个二进制工具来定量评估二进制文件的差异..

比如评估二进制 10 和二进制 100 的差异是 56%。二进制 50 和二进制 200 的差异是 78%。

有没有这样的工具?

谢谢!

4个回答

您可能想尝试ssdeep

ssdeep 是一个用于计算上下文触发分段哈希(CTPH)的程序。CTPH 也称为模糊哈希,可以匹配具有同源性的输入。这些输入具有相同顺序的相同字节序列,尽管这些序列之间的字节在内容和长度上可能不同。

这是我的解决方案。

  1. radiff2用来找出二进制文件之间的所有差异。

    radiff2 binary1 binary2
    
  2. 然后xxd将二进制转换为十六进制

    xxd -p  final
    
  3. 之后,wc找出一个二进制中的十六进制数

    wc -c outputhex
    wc -l newlineneedtodelete
    
  4. 现在我有两个二进制文件之间的差异以及每个二进制文件中的十六进制总数。一个简单的除法可以计算出我想要的差异百分比。

鉴于您希望将 ~500 个二进制文件相互比较,您真正想要的是VxClass

不幸的是,Zynamics/Google 不再销售 VxClass。如果有人知道购买或下载它的方法,请随时在此处分享信息。

这可能有点超出正常逆向工程师的工具箱,但仍然有可能。Courgette是 Chromium 和 Chrome 背后更新机制的代号。引用:

Courgette 将程序转换为原始汇编语言,并在汇编级别进行比较:

server:
    asm_old = disassemble(original)
    asm_new = disassemble(update)
    asm_new_adjusted = adjust(asm_new, asm_old)
    asm_diff = bsdiff(asm_old, asm_new_adjusted)
    transmit asm_diff

client:
    receive asm_diff
    asm_old = disassemble(original)
    asm_new_adjusted = bspatch(asm_old, asm_diff)
    update = assemble(asm_new_adjusted)

当然,这受限于 CPU 架构的数量。你没有说明你的要求(除非它是用不可见的像素写的;))