一: 批改寄存器的值

以图所示的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函数或代码实现不跳转或者不执行。