文章目录

  • 一、GOT 表拦截与插桩拦截
  • 二、插桩拦截简介
  • 三、插桩拦截涉及的 ARM 和 x86 中的跳转指令

一、GOT 表拦截与插桩拦截


函数拦截有 222 种方式 :

  • 使用 GOT 表进行函数拦截 : 修改 GOT 表实现函数拦截 ;
  • 插桩拦截 : 该方法就是 在实际被调用的函数中添加跳转代码实现函数拦截 ;

在 【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 ) 博客中分析到 , " 使用 GOT 表进行函数拦截 " 方法不能保证 100% 成功 , 插桩拦截 可以实现 100% 拦截成功率 ;

" 插桩拦截 " 由于需要 修改代码 , 可能会 被反调试工具发现 , 如果是游戏 , 账号估计就凉了 ; 反调试工具 不可能监控所有的函数 , 一个应用的函数个数都是以万进行计算的 ;

二、插桩拦截简介


插桩拦截 : 在要 调用的实际函数 的入口处 , 写入跳转代码 , 跳转到 我们自定义的 拦截函数中 , 在拦截函数中 , 执行 处理函数 , 处理函数再次调用实际函数 或 自己执行一些其它函数 ;

三、插桩拦截涉及的 ARM 和 x86 中的跳转指令


插桩拦截 时 , 在 实际函数 入口处写入的 跳转代码 就是 汇编中的 跳转指令 ;

跳转指令 可以理解为 " 指令 " 或 " 机器码 " , 指令是人看到的 汇编指令 , 机器码是给 CPU 执行的 二进制机器码 ; 二者是等效的 ;

x86 架构下的跳转指令 : 下面的二进制数都是十六进制数 ; 323232 位指令 ;

E9 00 00 00 00 , JMP target ;

JMP 是强制跳转指令 , E9 是对应的机器码 ;

ARM 架构下的跳转指令 : 下面的二进制数都是十六进制数 ; 323232 位指令 ;

04 F0 1F E5 00 00 00 00 , B target ;

B 指令是无条件跳转指令 , 04 F0 1F E5 是对应的机器码 ;

x86 架构是 复杂指令集 , ARM 架构是 精简指令集 , 从上面的机器码可以看出区别 , x86 架构中指令有 111 字节 , ARM 架构中 指令只有 444 字节 ;

【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )相关推荐

  1. 【Android 逆向】函数拦截实例 ( ③ 刷新 CPU 高速缓存 | ④ 处理拦截函数 | ⑤ 返回特定结果 )

    文章目录 前言 一.刷新 CPU 高速缓存 二.处理拦截函数 1.桩函数 2.处理拦截函数 三.返回特定结果 四.相关完整代码 前言 [Android 逆向]函数拦截实例 ( 函数拦截流程 | ① 定 ...

  2. 【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )

    文章目录 前言 一.函数拦截需要的几个参数 二.插桩前先保存实际函数入口 6 字节数据 三.在插桩的函数入口写入跳转指令 | 构造拼接桩函数 前言 [Android 逆向]函数拦截实例 ( 函数拦截流 ...

  3. 【Android 逆向】函数拦截 ( ARM 架构下的插桩拦截 | 完整代码示例 )

    文章目录 一.ARM 架构下的插桩拦截 二.完整代码示例 一.ARM 架构下的插桩拦截 ARM 架构下的跳转指令 : 下面的二进制数都是十六进制数 ; 323232 位指令 ; 04 F0 1F E5 ...

  4. 【Android 逆向】函数拦截 ( 修改内存页属性 | x86 架构插桩拦截 )

    文章目录 一.修改内存页属性 二.x86 架构下的插桩拦截 一.修改内存页属性 实际函数 的 函数指针为 unsigned char* pFunc , 拦截函数 的函数指针为 unsigned cha ...

  5. 【Android 逆向】ELF 文件格式 ( ELF 文件头 | ELF 文件头标志 | ELF 文件位数 | ELF 文件大小端格式 )

    文章目录 一.ELF 文件简介 二.ELF 文件头 三.ELF 文件头标志 四.ELF 文件位数 五.ELF 文件大小端格式 一.ELF 文件简介 在上一篇博客 [Android 逆向]ELF 文件格 ...

  6. 【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )

    文章目录 一.通过修改 GOT 全局偏移表拦截函数 二.通过在实际被调用的函数中添加跳转代码实现函数拦截 一.通过修改 GOT 全局偏移表拦截函数 使用 GOT 全局偏移表 拦截函数 , 只需要将 G ...

  7. 【Android 逆向】函数拦截原理 ( 可执行程序基本结构 | GOT 全局偏移表 | 可执行程序函数调用步骤 )

    文章目录 一.可执行程序基本结构 二.GOT 全局偏移表 三.可执行程序函数调用步骤 一.可执行程序基本结构 程序加载到内存中之后 , 会分为以下 333 个部分 : 可执行程序 自定义函数库 : L ...

  8. 【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )

    文章目录 一.GOT 表数据结构分析 二.函数根据 GOT 表进行跳转的流程 一.GOT 表数据结构分析 GOT 表分为 222 部分 , 一部分在 调用者部分 ( 可执行文件 ) 中 , 一部分在 ...

  9. 【Android 逆向】函数拦截 ( CPU 高速缓存机制 | CPU 高速缓存机制 导致 函数拦截失败 )

    文章目录 一.CPU 高速缓存机制 二.CPU 高速缓存机制 导致 函数拦截失败 一.CPU 高速缓存机制 CPU 架构模型中 , 指令 在开始时 , 存放在内存中 , 如 : /proc/pid/m ...

最新文章

  1. C 整数反转
  2. 网站栏目页要如何进行优化呢?
  3. 11种你需要了解的物联网(IoT)协议
  4. 函数计算助力语雀构建稳定且安全的业务架构
  5. 网络分解的时代即将到来,云服务商正在铺路 | 分析师洞察
  6. 北斗三号频点_定位精度超越GPS!紫光展锐推出支持北斗三代的四合一芯片
  7. 数字信号处理_实验一_信号、系统及系统响应
  8. 密封槽设计标准_密封槽设计标准
  9. springboot项目控制层的接口注入报错
  10. Maven项目快速打包
  11. 学会了,不会ps也能更换自己的证件照底色,制作自己的证件照
  12. 小谈startup类ConfigureServices方法的作用
  13. DragonBones快速入门指南1
  14. 1t硬盘怎么分区最好_1TB的硬盘如何分区比较合理?
  15. CIFAR10图像分类ResNet模型实战(pytorch)
  16. el-input 只能输入整数(包括正数、负数、0)或者只能输入整数(包括正数、负数、0)和小数
  17. python iter函数用法
  18. 【LOJ2867】「IOI2018」高速公路收费
  19. H5响应式网站制作那些事
  20. Pairwise(FCC算法)

热门文章

  1. 浅谈ThreadPool 线程池(引用)
  2. 在RHEL-4下半小时搭建Sendmail邮件服务器(下)
  3. Windows Vista Ultimate 版测试结果汇整
  4. CentOS6.9下手动编译并安装Python3.7.0
  5. 用NiceTool在微信浏览器中下载APP
  6. minimun-depth-of-binary-tree
  7. 【bzoj2724】[Violet 6]蒲公英 分块+STL-vector
  8. web前端面试题(含答案)
  9. 历届试题 大臣的旅费 树形DP
  10. Chrome插件(Extensions)开发实践