Radare2 显示代码提示,如 IDA Pro?

逆向工程 艾达 拆卸 反汇编者 雷达2 米普
2021-07-03 00:52:12

我正在尝试使用radare2 反汇编二进制文件,作为IDA 的免费替代品。这是该部分的 IDA 反汇编的样子:

这是我对 Radare2 所做的事情(e asm.cmtright=true在我的.radare2rc文件中有一个附加选项):

  r2 binary 
    [0x004027c0]> aaa
│          [0x004027c0]> s 0x40baa4
│          [0x0040baa4]> pd 10
│           0x0040baa4    4200053c     a1 |= loc.00420000
│           0x0040baa8    301ea524     a1 += 7728
│           0x0040baac    08c52426     a0 = s1 - 15096
│           0x0040bab0    09f82003     call t9
│           0x0040bab4    304c02ae     [s0 + 19504] = v0
│           0x0040bab8    1800bc8f     gp = [sp + 24]
│           0x0040babc    304c048e     a0 = [s0 + 19504]
│           0x0040bac0    2c83998f     t9 = [gp - 31956]
│           0x0040bac4    00000000     
│           0x0040bac8    09f82003     call t9

而从 IDA 中相同位置的反汇编看起来像:

.text:0040BAA4                 la      $a1, aId         # "id"
.text:0040BAAC                 addiu   $a0, $s1, (sub_40C508 - 0x410000)
.text:0040BAB0                 jalr    $t9 ; parse_uri
.text:0040BAB4                 sw      $v0, dword_434C30
.text:0040BAB8                 lw      $gp, 0x12B8+var_12A0($sp)
.text:0040BABC                 lw      $a0, dword_434C30
.text:0040BAC0                 la      $t9, sobj_get_string
.text:0040BAC4                 nop
.text:0040BAC8                 jalr    $t9 ; sobj_get_string

是否有可能让radare2显示类似的反汇编并且更有意义?

另一个例子是:

[0x004127f8]> pd 10
│           0x004127f8    6c83998f     t9 = [gp - 31892]
│           0x004127fc    00000000     
│           0x00412800    09f82003     call t9
│           0x00412804    2000a427     a0 = sp + 32
│           0x00412808    1800bc8f     gp = [sp + 24]
│           0x0041280c    02000524     a1 = 2
│           0x00412810    5481998f     t9 = [gp - 32428]
│           0x00412814    21300000     a2 = zero
│           0x00412818    09f82003     call t9
│           0x0041281c    2120c002     a0 = s6

与 IDA 相比:

.text:004127F8                 la      $t9, system
.text:004127FC                 nop
.text:00412800                 jalr    $t9 ; system
.text:00412804                 addiu   $a0, $sp, 0x248+var_228  # command
.text:00412808                 lw      $gp, 0x248+var_230($sp)
.text:0041280C                 li      $a1, 2           # cmd
.text:00412810                 la      $t9, lockf
.text:00412814                 move    $a2, $zero       # len
.text:00412818                 jalr    $t9 ; lockf
.text:0041281C                 move    $a0, $s6         # fd

IDA 甚至告诉我这是系统的地址,而仅查看radare2 代码我就无法找到它。

关于如何改进radare2分析的任何建议,或者这只是限制之一?

2个回答

您可能将 e asm.esil 设置为 true 并将 e asm.emu 设置为 false 尝试切换它们

radare2.exe malloc://0x4f0000
 -- Hello Mr. Anderson

[0x00000000]> s 0x40abb4
[0x0040abb4]> wx 4200053c301ea52408c5242609f82003
[0x0040abb4]> e asm.emu = true
[0x0040abb4]> e asm.esil = true
[0x0040abb4]> e asm.arch = mips


[0x0040abb4]> pd 4
            0x0040abb4      4200053c       0x420000,a1,=              ; a1=0x420000
            0x0040abb8      301ea524       7728,a1,+,a1,=             ; a1=0x421e30
            0x0040abbc      08c52426       15096,s1,-,a0,=            ; a0=0xffffffffffffc508 -> 0xffffff00
            0x0040abc0      09f82003       0,$ds,>,?{,$$,1,TRAP,BREAK,},pc,4,+,ra,=,t9,$jt,=,1,$ds,=; ra=0x40abc8 ; $jt=0x0 ; CALL: 0x0, 0x0
, 0x0, 0x0


[0x0040abb4]> e asm.esil = false
[0x0040abb4]> pd 4
            0x0040abb4      4200053c       lui a1, 0x42               ; a1=0x420000
            0x0040abb8      301ea524       addiu a1, a1, 0x1e30       ; a1=0x421e30
            0x0040abbc      08c52426       addiu a0, s1, -0x3af8      ; a0=0xffffffffffffc508 -> 0xffffff00
            0x0040abc0      09f82003       jalr t9                    ; ra=0x40abc8 ; $jt=0x0 ; CALL: 0x0, 0x0, 0x0, 0x0
[0x0040abb4]>

这是目前正在进行的功能。它被称为类型传播分析,它允许在使用标准函数的情况下提供有关变量类型及其名称的提示。

我无法解释如何使用,因为它还没有完成。但是您需要为目标架构提供调用约定配置文件和数据类型/函数原型配置文件,它们将用于将函数参数与每个call配置文件描述指令堆栈帧和寄存器实例相匹配

这一轮分析应该与目标架构无关。一旦完全实施,我将更新答案以描述如何使用该分析