1122cf 发表于 2021-1-14 18:04

IDA调试修改内存数据



一:修改寄存器的值

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



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



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





二:篡改内存数据

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



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





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



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



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



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




三:NOP函数或代码

以BL zhengchu函数为例。

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



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

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



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



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



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



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



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



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



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



小结

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



zql9631 发表于 2021-1-16 09:41

谢谢分享!

乔帮主 发表于 2021-1-19 16:56

谢谢分享 学习

fcguo800 发表于 2021-2-25 10:26

对我这小白来说真的好实用啊,一点一点学习,感谢分享。

拿着雪糕 发表于 2022-1-28 12:25

十分感谢大佬

hetao8003200 发表于 2022-1-28 13:45

感谢楼主分享

PDWORD 发表于 2022-1-29 13:24


谢谢分享

kZNywIf83 发表于 2022-2-24 01:48

大佬无敌

SzuPpJd5860 发表于 2022-2-24 01:53

前来向大佬学习

pVgX3 发表于 2022-2-24 06:31

论坛的繁荣离不开你们的热心分享
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: IDA调试修改内存数据