有没有办法使用IDA Demo获取类型信息

逆向工程 艾达 类型重建
2021-06-28 20:23:18

我正在使用 IDA Demo(评估版本 >7)。我有一个二进制文件:

#include <stdbool.h>
int do_decode(){}
int main()
{
  bool decode = false;
  char opt = getopt();
  switch (opt)
  {
    case 'd':
      decode =true;
      break;
    default:
      break;
  }
  if (decode) do_decode();
}

有没有办法使用IDA获取变量信息?

  1. 如果调试信息可用
  2. 剥离和优化

在任何一种情况下,我都无法获得变量类型信息。例如我从radare2得到的:

[0x004004b9]> afv
var int64_t var_2h @ rbp-0x2
var uint32_t var_1h @ rbp-0x1

这远非完美,但至少有些东西。

这是我的 IDA 文本视图:

; =============== S U B R O U T I N E =======================================
.text:00000000004004B9
.text:00000000004004B9 ; Attributes: bp-based frame
.text:00000000004004B9
.text:00000000004004B9 ; int __fastcall main(int, char **, char **)
.text:00000000004004B9 main            proc near               ; DATA XREF: start+1D↑o
.text:00000000004004B9
.text:00000000004004B9 var_2           = byte ptr -2
.text:00000000004004B9 var_1           = byte ptr -1
.text:00000000004004B9
.text:00000000004004B9                 push    rbp
.text:00000000004004BA                 mov     rbp, rsp
.text:00000000004004BD                 sub     rsp, 10h
.text:00000000004004C1                 mov     [rbp+var_1], 0
.text:00000000004004C5                 mov     eax, 0
.text:00000000004004CA                 call    _getopt
.text:00000000004004CF                 mov     [rbp+var_2], al
.text:00000000004004D2                 movsx   eax, [rbp+var_2]
.text:00000000004004D6                 cmp     eax, 64h ; 'd'
.text:00000000004004D9                 jnz     short loc_4004E1
.text:00000000004004DB                 mov     [rbp+var_1], 1
.text:00000000004004DF                 jmp     short loc_4004E2
1个回答
.text:00000000004004B9 opt             = byte ptr -2
.text:00000000004004B9 decode          = byte ptr -1

^ 这不是您要找的部分吗?

var int64_t var_2h @ rbp-0x2
var uint32_t var_1h @ rbp-0x1

此外,IDA 正确检测到这些局部变量每个只占用一个字节,而radare2 认为有64 位和32 位整数(即使它们在堆栈上的偏移量仅相差一个字节)。

您也可以通过编程方式获取此信息,但遗憾的是 IDAPython 在评估版中不可用。