返回

从IDA分析Anti-jap记录中发现的关键问题

闲谈

在利用IDA Pro分析Anti-jap时,记录下一些关键问题,以便在进行反向工程时参考。

伪代码生成

IDA Pro的输出窗口默认显示为汇编代码,如下所示:

sub_401000:
  mov eax, [ebp+arg_4]
  mov edx, [ebp+arg_8]
  cmp eax, edx
  jl short loc_401013
  mov eax, [ebp+arg_4]
  mov edx, [ebp+arg_8]
  cmp eax, edx
  jl short loc_401013
  jmp short loc_401013
loc_401013:
  mov eax, [ebp+arg_4]
  mov edx, [ebp+arg_8]
  cmp eax, edx
  jle short loc_401026
  mov eax, [ebp+arg_4]
  mov edx, [ebp+arg_8]
  cmp eax, edx
  jle short loc_401026
  jmp short loc_401026
loc_401026:
  mov eax, [ebp+arg_4]
  mov edx, [ebp+arg_8]
  cmp eax, edx
  jge short loc_401039
  mov eax, [ebp+arg_4]
  mov edx, [ebp+arg_8]
  cmp eax, edx
  jge short loc_401039
  jmp short loc_401039
loc_401039:
  retn

要生成伪代码,请按F5。IDA Pro将自动将汇编代码转换为更易读的伪代码,如下所示:

int __cdecl sub_401000(int arg_4, int arg_8)
{
  int v2; // eax@3
  int v3; // eax@7
  int v4; // eax@11
  int v5; // eax@15

  if ( arg_4 < arg_8 )
  {
    v2 = arg_4;
    if ( arg_4 < arg_8 )
    {
      v3 = arg_4;
      if ( arg_4 < arg_8 )
      {
        v4 = arg_4;
        if ( arg_4 < arg_8 )
        {
          v5 = arg_4;
          if ( arg_4 < arg_8 )
            return arg_4;
        }
      }
    }
  }
  return arg_4;
}

寄存器分配

IDA Pro会自动分配寄存器给变量。在以下汇编代码中,eax寄存器被分配给变量arg_4:

mov eax, [ebp+arg_4]

内存管理

IDA Pro会跟踪内存引用。在以下汇编代码中,IDA Pro识别出[ebp+arg_4]引用了内存中的一个地址:

mov eax, [ebp+arg_4]

函数分析

IDA Pro可以分析函数并确定其调用图。在以下示例中,IDA Pro确定sub_401000函数调用了sub_401010函数:

call sub_401010

通过记录这些关键问题,可以在利用IDA Pro分析Anti-jap时节省大量时间和精力。