7

IDA调试修改内存数据

 3 years ago
source link: https://segmentfault.com/a/1190000038982177
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一: 修改寄存器的值

以图所示的BLX R3这个函数为例,执行完毕后,他的返回值在右面的R0寄存器,对它进行修改。

yqmUV3.png!mobile

1.将鼠标移到R0寄存器,右键,选择“Modify value”选项,可以修改为任意值,如下图所示。

YbquAnq.png!mobile

2.除了选择“Modify value”选项外,还可以选择“Zero value”选项,直接置零,如下图所示。

7r2YfaJ.png!mobile

二:篡改内存数据

在函数头打断点,点击F9,程序成功在函数头断下,紧接着F8往下走,当走到“ADD R2, PC, R2”这条指令时,该指令使用的是相对寻址方式,PC寄存器的值加上R2寄存器的值得到的是一个地址,该地址存放的是一个字符串,即Activity,如下图所示。

iiQjYrZ.png!mobile

1.点开十六进制窗口,同步R2寄存器,如下图所示。

Ijammya.png!mobile

2.同步后的值,如下图所示。

baqEZ3J.png!mobile

3.直接F2进行修改,如下图所示。

j6ZrQrm.png!mobile

4.“31”代表的是“1”,如下图所示。

RviAzm.png!mobile

5.完成上述流程,提交后的效果,如下图所示。

eI3UraA.png!mobile

三:NOP函数或代码

以BL zhengchu函数为例。

当程序执行到这里,如果继续往下单步,会执行下面这个函数,如下图所示。

J7jYVfB.png!mobile

若不想执行此函数,则进行下面的操作流程:

1.进入十六进制窗口,点击鼠标右键,选择Synchronize with再选择IDA View PC同步PC寄存器,如下图所示。

IrEZVv3.png!mobile

2.同步后的效果如下图所示。

22A7zmF.png!mobile

3.PC寄存器的值永远指向当前指令,所以此刻同步当前PC寄存器的值就是即将要执行的函数BL的值。直接右键选择edit或者直接快捷键F2,如下图所示。

j2mUN33.png!mobile

4.将其全部修改为零,如下图所示。

6rUNNb.png!mobile

5.修改后,继续右键,F2提交,如下图所示。

yMVF73y.png!mobile

6.完成上述流程,查看原函数,已变成一条无效的指令,如下图所示。

ZnA3IrY.png!mobile

7.直接单步往下走,不会再进入该函数,而是执行下一条指令,如下图所示。

mInuyeu.png!mobile

执行到这里,已将函数成功NOP掉,变为一条无效的空指令。

小结

​我们知道如何修改对应寄存器的值:鼠标右键,选择“Modify value”选项,可以改为任意值,或者选择“Zero value”选项,直接置零,同时修改寄存器的值可以实现篡改内存数据,这里需要注意的是NOP函数或代码实现不跳转或者不执行。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK