本篇文章是Android逆向系列的第十篇,是关于IDA动态调试的第二部分,有了前面IDA调试一的知识,可以对文件进行简单的调试工作,当然,简单的调试满足不了我们逆向初学人员,于是就有了IDA动态调试(二)——IDA动态调试深入技巧篇,目的在于进一步学习IDA动态调试中的各种实用操作,大部分都会在后面的反调试操作中使用到。
一、传参分析
1、载入so文件
操作步骤同**IDA动态调试(一)**中的普通调试,参考该文章进行操作即可
2、寄存器介绍
传参操作涉及到寄存器,先简要介绍下各个寄存器
R0-R3 参数寄存器
R4-R6, R8, R10-R11 普通的通用寄存器
R7 栈帧指针
R9 操作系统保留
R12:IP 指令指针寄存器
R13:SP 栈顶指针
R14:LR 函数返回地址
R15:PC 指向当前指令地址
3、参数个数
1)动态代码中查看
首先我们要知道如何传参个数?分为以下两种情况:
- 参数少于等于4个时,使用R0、R1、R2、R3四个参数寄存器,并且下一个寄存器用于地址存放
比如BL R2
指令,这里的R2存放了地址,那么参数传递就是用了R0、R1两个寄存器。如果要使用4个参数进行传递,就会依次使用R0、R1、R2、R3寄存器,使用R4存放跳转的地址 - 参数多于5个时,前四个参数通过R0、R1、R2、R3参数寄存器传递,剩下的参数通过压栈的方式传递。
实例:
在该程序中的BLX R3
指令处中下断点,并F9执行到该处,R3寄存器存放了地址,那么该函数参数只能在R0、R1、R2三个寄存器中。也就是Rn编号小于4时,其对应使用的参数寄存器为n。F7单步执行后,可以看到栈地址未发生变动,可以验证参数小于4时只会使用到R0、R1、R2、R3参数寄存器。
2)静态代码中查看
这部分比较简单,主要是通过F5查看函数伪代码,其中的参数会标出来(不过这部分是可变的)
4、查看堆栈信息
开启Stack pointer
有助于快速识别栈中数据,开启步骤如下。可以看到在主窗口中多了一列信息,用于显示每一行指令对应的栈偏移信息,也就是相对栈底指针的偏移
5、IDA中参数的修改
1)静态代码中修改参数类型声明
按F5反编译查看静态代码后,选中参数,按y可以修改参数的类型声明
2)动态代码中修改寄存器值
有两种方式进行修改寄存器值:
- 直接双击进行修改
- 选中一个寄存器的值,右键选择
Modify value
进行修改
两种方式的修改界面一致:
参考:ARM函数调用传参规则
二、函数修改
1、Hex View中修改指令
如果我们想在动态调试中修改一个指令进行测试,那么如何进行修改指令呢?
我们可以在Hex View窗口中以指令的16进制格式进行修改
指令对应的16进制格式的有关概念会在之后的文章中更新介绍~!
先设置同步PC选定,设置好后我们在代码段中选定一个值,在hex-view中就会显示该指令对应的16进制代码。在Hex窗口中右键选择Synchronize with
下的IDA View-PC
选项
接着随便选定一行指令,如下面这行,就会在Hex窗口中显示对应的十六进制格式。
在Hex窗口中选定该值,按F2开始编辑修改,编辑修改完成后再次按F2进行保存,发现指令已被修改。
小技巧:
设置在主窗口中的每一行指令显示对应的16进制格式,设置好后,可以看到多了一列信息,这部分就是该行指令对应的16进制格式机器码。
2、修改当前指令PC
用于调试测试
我们可以通过修改PC值来跳转到我们想要的地址中
我们当前位置为0xF3B0003C,打算直接执行0xF3B00044地址的指令STR LR, [SP, #var_4]
,那我们在寄存器窗口双击PC值,将原先的0xF3B0003C修改为0xF3B00044,确定后可以看到当前指令变成了STR LR, [SP, #var_4]
,直接跳转成功
三、标志位详解
1、CPSR程序状态寄存器
CPSR(程序状态寄存器),包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息,其大小为4字节,基本结构如下,
高四位依次是NZCV,分别含义为:
- N(Negative):两个带符号数进行运算时,N=1表示运算的结果为负数;N=0表示运算的结果为正数或零
- Z(Zero):Z=1表示运算的结果为零,Z=0表示运算的结果非零
- C(Carry):运算结果产生了进位(无符号数溢出),C=1,否则C=0
- V(Overflow):V=1表示符号位溢出
对于剩余部分的含义,现阶段部分了解即可
- T(State bit):处理器的运行状态,T=1表示目标代码解释为Thumb代码,T=0表示目标代码解释为ARM代码。该信号反映在外部引脚TBIT上
2、结合条件码
上一篇文章中介绍了条件码,其中每个条件助记符实际上都是有其对应的标志,比如EQ条件码对应的标志为Z=1,其他的参照下面的表格即可
- 本文作者: xigua
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/723
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!