乐趣区

关于逆向工程: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 函数或代码实现不跳转或者不执行。

退出移动版