IDA调试修改内存数据

一: 修改寄存器的值

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

image.png

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

image.png

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

image.png

须要相关资料的朋友,能够【加入此处便可打包获取】blog

二:篡改内存数据

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

image.png

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

image.png

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

image.png

3.直接F2进行修改,以下图所示。同步

image.png

4.“31”表明的是“1”,以下图所示。it

image.png

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

image.png

三:NOP函数或代码

以BL zhengchu函数为例。

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

image.png

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

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

image.png

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

image.png

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

image.png

4.将其所有修改成零,以下图所示。

image.png

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

image.png

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

image.png

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

image.png

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

小结

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

**感兴趣的小伙伴能够关注公众号“宸道移动安全团队”。

相关文章
相关标签/搜索