注册

android 逆向工程-工具篇 IDA pro入门(七)

Android逆向工程篇:


注:自行网上下载IDA pro

我安装好的IDA 包含64和32两个版本,经测试 32位支持伪代码,可以F5对照C语言等进行更方便的分析。

用IDA pro打开一个so文件

6541db64cdf2a8dfdf73b1aabd99ab7c.jpeg

展示如下(F5查看伪代码)


  • IDA View-A是反汇编窗口
  • HexView-A是十六进制格式显示的窗口
  • Imports是导入表(程序中调用到的外面的函数)
  • Functions是函数表(这个程序中的函数)
  • Structures是结构
  • Enums是枚举

IDA View-A

这里会有流程图(按回车进行切换),判断是执行绿色,判断否执行红色,蓝色为一个执行块。

分析

先展示些ARM汇编的基础

寄存器

  • R0-R3:用于函数参数及返回值的传递
  • R4-R6, R8,R10-R11:没有特殊规定,就是普通的通用寄存器
  • R7:栈帧指针(Frame Pointer).指向前一个保存的栈帧(stack frame)和链接寄存器(link register, lr)在栈上的地址。
  • R9:操作系统保留
  • R12:又叫IP(intra-procedure scratch)
  • R13:又叫SP(stack pointer),是栈顶指针
  • R14:又叫LR(link register),存放函数的返回地址。
  • R15:又叫PC(program counter),指向当前指令地址。
  • CPSR:当前程序状态寄存器(Current Program State Register),在用户状态下存放像condition标志中断禁用等标志的。
  • VFP:(向量浮点运算)相关的寄存器

基本的指令

  • add 加指令
  • sub 减指令
  • str 把寄存器内容存到栈上去
  • ldr 把栈上内容载入一寄存器中
  • .w是一个可选的指令宽度说明符。它不会影响为此指令的行为,它只是确保生成 32 位指令。
  • bl 执行函数调用,并把使lr指向调用者(caller)的下一条指令,即函数的返回地址
  • blx 同上,但是在ARM和thumb指令集间切换。
  • bx bx lr返回调用函数(caller)。
  • bne 数据跳转指令,标志寄存器中Z标志位不等于零时, 跳转到BNE后标签处。
  • CMP 比较命令
  • B 无条件跳转

0 个评论

要回复文章请先登录注册