一: 修改寄存器的值

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

image.png

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

image.png

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

image.png

需要相关资料的朋友,可以【加入此处即可打包获取】

二:篡改内存数据

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

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

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

更多相关文章

  1. 一场函数式思维模式的洗礼
  2. Java 中的构造函数引用和方法引用
  3. ARM协处理器各寄存器功能介绍
  4. 函数式编程中如何处理副作用?
  5. 帆软报表自定义函数-取json数据
  6. 函数和递归
  7. java的getClass()函数
  8. 函数的学习
  9. java多线程(3)Thread构造函数解析

随机推荐

  1. 循环结构的继续学习
  2. 工作中常用到的Linux命令
  3. 太简单了!PHP获取文件扩展名的7中方法
  4. php中使用fsockopen实现异步请求(代码示例
  5. php实现将表单内容提交到数据库
  6. 流行的php rpc框架详解
  7. php实现字母数字混合验证码
  8. php监听redis key失效触发回调事件
  9. 使用Docker部署PHP开发环境的方法详解
  10. PHP实现大转盘抽奖算法(代码实例)