📕
Radare2手册
  • 简介
  • 历史
  • Radare2框架
  • 下载radare2
  • 编译与可移植性
  • Compilation on Windows
  • Compilation on Android
  • 用户界面
  • 快速上手
    • 命令行选项
    • 命令格式
    • 表达式
    • 基本的debug操作
    • Contributing to radare2
  • 配置
    • Colors
    • 配置项
    • radare2相关文件
  • 基本命令
    • 定位
    • 块大小
    • 节区
    • 映射文件
    • 输出模式
    • 标记符(Flags)
    • 写入数据
    • Zoom模式
    • 复制/粘贴
    • 字节比较
    • SDB
    • Dietline
  • 可视化模式
    • 反汇编界面
    • 汇编界面
    • 变量编辑器界面
    • 可视化面板
  • 搜索字节
    • 基本的搜索用法
    • 配置搜索引擎
    • 搜索重复字节序列
    • 搜索中的自动化
    • 回溯搜索
    • 搜索汇编指令
    • Searching for AES Keys
  • 反汇编
    • 为反汇编添加元数据
    • ESIL
  • 分析
    • 代码分析
    • 变量
    • 类型
    • 调用约定
    • 虚函数表
    • 系统调用
    • 模拟执行
    • Symbols 信息
    • 函数签名
    • 图形化命令
  • 脚本化
    • 循环(Loops)
    • 宏(Macros)
    • R2pipe
  • 调试器
    • 入门
    • 从ida, GDB 或 WinDBG迁移到radare2
    • 寄存器(Registers)
    • 内存映射(Memory Maps)
    • 堆(Heap)
    • 文件(Files)
    • 反向调试
    • Windows消息(Messages)
  • 远程访问
    • 远程GDB调试
    • 远程WinDbg
  • 命令行工具
    • Rax2
    • Rafind2
    • Rarun2
    • Rabin2
      • 文件信息识别
      • 入口点(EP)
      • 导入(Imports)
      • 导出(Exports)
      • Symbols (exports)
      • 库文件
      • 字符串(String)
      • 节区(Sections)
    • Radiff2
      • 二进制文件比较
    • Rasm2
      • 汇编
      • 反汇编
      • 配置项
    • Ragg2
      • Language
    • Rahash2
      • Rahash Tool
  • 插件
    • IO 插件
    • Asm 插件
    • Analysis 插件
    • Bin 插件
    • 其它插件
    • Python插件
    • 对插件进行调试
    • 测试
    • 打包
  • Crackmes
    • IOLI
      • IOLI 0x00
      • IOLI 0x01
    • Avatao R3v3rs3 4
      • .radare2
      • .first_steps
      • .main
      • .vmloop
      • .instructionset
      • .bytecode
      • .outro
  • Reference Card
  • Acknowledgments
由 GitBook 提供支持
在本页

这有帮助吗?

  1. 命令行工具
  2. Radiff2

二进制文件比较

上一页Radiff2下一页Rasm2

最后更新于4年前

这有帮助吗?

本章节基于 上的文章""

若未指定任何参数,radiff2默认会显示不同的字节数据,以及这些字节对应的偏移量。

$ radiff2 genuine cracked
0x000081e0 85c00f94c0 => 9090909090 0x000081e0
0x0007c805 85c00f84c0 => 9090909090 0x0007c805

$ rasm2 -d 85c00f94c0
test eax, eax
sete al

这两个语句都被NOP指令覆盖了。

在需要批量处理的时候,分析者可能希望站在更高层次检查文件之间的差异,因此radare2提供了计算两个文件差异程度的选项-s:

$ radiff2 -s /bin/true /bin/false
similarity: 0.97
distance: 743

若是想要一个更加具体的量化数据,可以用-c计算二者之间的差异数量。

$ radiff2 -c genuine cracked
2

如果你不确定目前分析的文件之间是否相似,可以使用-C进行检查,检查它们之间是否存在匹配的函数。在该模式下会输出3列信息:"第一个文件中的偏移量","匹配程度","第二个文件的偏移量"。

$ radiff2 -C /bin/false /bin/true
  entry0  0x4013e8 |   MATCH  (0.904762) | 0x4013e2  entry0
  sym.imp.__libc_start_main  0x401190 |   MATCH  (1.000000) | 0x401190  sym.imp.__libc_start_main
  fcn.00401196  0x401196 |   MATCH  (1.000000) | 0x401196  fcn.00401196
  fcn.0040103c  0x40103c |   MATCH  (1.000000) | 0x40103c  fcn.0040103c
  fcn.00401046  0x401046 |   MATCH  (1.000000) | 0x401046  fcn.00401046
  fcn.000045e0   24 0x45e0 | UNMATCH  (0.916667) | 0x45f0    24 fcn.000045f0
  ...

此外,还可加上-A在radiff2比较之前调用r2对二进制文件进行aaa分析,且能像下面这样指定架构:

$ radiff2 -AC -a x86 /bin/true /bin/false | grep UNMATCH
[x] Analyze all flags starting with sym. and entry0 (aa)
[x] Analyze len bytes of instructions for references (aar)
[x] Analyze function calls (aac)
[ ] [*] Use -AA or aaaa to perform additional experimental analysis.
[x] Constructing a function name for fcn.* and sym.func.* functions (aan))
[x] Analyze all flags starting with sym. and entry0 (aa)
[x] Analyze len bytes of instructions for references (aar)
[x] Analyze function calls (aac)
[ ] [*] Use -AA or aaaa to perform additional experimental analysis.
[x] Constructing a function name for fcn.* and sym.func.* functions (aan))
                        sub.fileno_500   86 0x4500 | UNMATCH  (0.965116) | 0x4510    86 sub.fileno_510
                    sub.__freading_4c0   59 0x44c0 | UNMATCH  (0.949153) | 0x44d0    59 sub.__freading_4d0
                        sub.fileno_440  120 0x4440 | UNMATCH  (0.200000) | 0x4450   120 sub.fileno_450
                     sub.setlocale_fa0   64 0x3fa0 | UNMATCH  (0.104651) | 0x3fb0    64 sub.setlocale_fb0
                          fcn.00003a50  120 0x3a50 | UNMATCH  (0.125000) | 0x3a60   120 fcn.00003a60

黄色的部分代表有一些偏移量上二者不匹配,灰色部分则代表完美匹配,红色代表二者之间存在较大差异。如果你仔细观察,会发现左边的图片中最后是mov edi, 0x1; call sym.imp.exit,而右边则是xor edi, edi; call sym.imp.exit。

我们此处仅仅展示了部分的radiff代码差异分析的功能,而radare2还支持更多种类的比较:字节级、差异相似度,以及更多待加入的比较类型。

我们计划在r2里实现更多的二进制比较算法,添加ASCII字符画风格的比较,并与其它工具能更好地整合在一起。

现在r2还添加了一个新特性:使用-g选项将差异图形化,如。可以在此选项后加上一个要分析的symbol name,或者,当同样的函数在两个文件中使用了不同的名字,也可以指定两个偏移量进行比较。 例如,radiff2 -g main /bin/true /bin/false | xdot -将会显示Unix中true和false两个程序中main()函数的不同之处。可以试着与radiff2 -g main /bin/false /bin/true(注意观察二者的参数顺序)的结果进行比较,会得到两个版本。 下面的图片就是该结果

二进制级别的比较在逆向中是非常重要的一部分,可以用于分析,被感染的二进制文件,固件变更等等...

http://radare.today
binary diffing
DarunGrim
安全补丁
/bin/true vs /bin/false