文章目录

  • 一、通过修改 GOT 全局偏移表拦截函数
  • 二、通过在实际被调用的函数中添加跳转代码实现函数拦截

一、通过修改 GOT 全局偏移表拦截函数


使用 GOT 全局偏移表 拦截函数 , 只需要将 GOT 表中的 函数地址 指向 我们 自定义的 拦截函数 即可 ;

当调用 指定的 需要被 拦截的函数时 , 就会调用我们 自定义的 拦截函数 , 之后再调用 自定义的处理函数 , 处理函数有如下处理方式 :

  • ① 调用被拦截函数 : 真实调用实际 被拦截的函数 , 只是 对参数 或 返回值 进行一系列处理 , 然后返回 返回值 ;
  • ② 不调用被拦截函数 : 也可以不调用 被拦截函数 , 自己实现一个新的逻辑 替代 被拦截的函数 ;

GOT 表的拦截地址就是一个跳转代码 ;

该方法存在弊端 , 如果使用 dlopen 函数打开动态库 , 可以直接拿到函数地址执行该函数 , 此时根本就不会向 GOT 表中存放函数地址 , 这样就拦截不到函数了 ;

参考之前的博客 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 ), 使用 dlopen 函数直接加载 libbridge.so 动态库 , 然后调用 dlsym 函数 , 获取 libbridge.so 动态库中的 load 函数地址 , 根据该函数地址 , 可以直接调用函数 , 这样就完美的避开了 GOT 全局偏移表 , 而执行函数 ;

因此 , 使用 GOT 表拦截函数并不能保证 100% 成功 ;

二、通过在实际被调用的函数中添加跳转代码实现函数拦截


在 实际的被调用的函数 中 , 添加 跳转代码 , 跳转到 拦截函数 中 , 然后 拦截函数 调用 处理函数 , 处理函数调用真正的实际函数 , 返回一个返回值 ;

该跳转代码添加的方式是 直接覆盖 实际函数的 代码 , 不能改变 函数代码 的总体大小 , 否则会导致整体的函数库调用出现问题 ; 如 : 跳转代码 5 字节 , 直接将 实际函数的 前 5 字节 修改为 跳转代码 ;

这里注意 , 处理函数 调用 被拦截的 实际函数时 , 这个实际函数中 开始的代码 是我们插入的 跳转代码 , 真实调用时 , 一定要将 跳转代码 恢复成原来的状态 然后才能继续调用 ;

该方法 100% 可以执行成功 ;

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

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

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

  2. Java数据结构 栈中添加辅助栈实现min函数

    栈中添加辅助栈实现min函数 class MinStack {Stack<Integer> A, B;public MinStack() {A = new Stack<>(); ...

  3. VS2019 C语言,在一个项目中添加多个包含main函数的源文件并分别调试运行

    在使用VS编辑器学习C.或者C++的时候,有时进行一些简单繁多的编程或者测试时需要创建多个项目,而每次新建一个项目都显得比较繁琐,所以我们可以在一个项目中创建多个包来满足需求,但一个项目中包含多个ma ...

  4. VS如何在一个项目中添加多个包含main函数的源文件并分别调试运行

    在使用VS编辑器学习C.或者C++的时候,很多人都喜欢在一个项目中写多个小程序来调试运行,因为每次新建一个项目都显得比较繁琐.但一个项目中包含多个main函数,项目是无法运行的. 这里我在一个项目文件 ...

  5. mvc5控制器修改html,关于jquery:如何通过对控制器的ajax调用在MVC5中呈现局部视图并返回HTML...

    如何使用Ajax加载以HTML呈现的完整部分视图(所以我只设置了div.html) 我需要一个Ajax调用来调用控制器操作,它将呈现一个完整的局部视图(红色),并将其附加到当前加载的视图的末尾? [我 ...

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

    文章目录 一.GOT 表拦截与插桩拦截 二.插桩拦截简介 三.插桩拦截涉及的 ARM 和 x86 中的跳转指令 一.GOT 表拦截与插桩拦截 函数拦截有 222 种方式 : 使用 GOT 表进行函数拦 ...

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

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

  8. 【Android 逆向】函数拦截 ( 使用 cache_flush 系统函数刷新 CPU 高速缓存 | 刷新 CPU 高速缓存弊端 | 函数拦截推荐时机 )

    文章目录 一.使用 cache_flush 系统函数刷新 CPU 高速缓存 二.使用 cache_flush 系统函数刷新 CPU 高速缓存的弊端 三.函数拦截推荐时机 一.使用 cache_flus ...

  9. Android逆向之八门神器原理解析(主要分析其修改内存原理)

    实现dump出指定进程的内存文件 进阶 进程注入 参考教程:Android注入完全剖析 问题解决 1.执行memdump时报错:error: only position independent exe ...

最新文章

  1. asp.net客户端脚本验证小技巧
  2. SAP MM 物料主数据MRP2 视图Rounding Value字段
  3. 客户端C++与前端js交互
  4. bootstrap bssuggest
  5. SSM项目整合Quartz
  6. 当当优酷纽交所上市,来钱还需看长久
  7. 水星mw310r虚拟服务器,水星MW310R静态网络(IP)设置教程
  8. 2006 mysql_MySQL 2006 超时
  9. 前端学习(1800):前端调试之清除浮动练习1
  10. Python 图片转简单字符画
  11. html缓存效果代码,html5缓存(示例代码)
  12. 图像处理、分析与机器视觉(基于labview)_基于3D技术的机器视觉解决方案
  13. C#如何控制Windows关机
  14. postmessage传递字符串_postMessage 还能这样玩
  15. 计算机c盘丢失,电脑c盘数据丢失怎么恢复图文教程
  16. 尚学堂视频笔记五:IO流
  17. 一位想学习编程拯救他人的初中生
  18. hive笔记(与上一偏 《hadoop集群搭建》结合)
  19. 深度学习中FLOPs计算
  20. JS实现 下一个排列(下一个更大的数)

热门文章

  1. [ant]通过Android命令自动编译出build.xml文件
  2. 黑马vue---13、事件修饰符的介绍
  3. 单链表的几个基本操作
  4. linux命令之find和locate
  5. NSBundle使用:获取文件路径
  6. fckeditor 数据库 取值 显示
  7. Oracle Golden Gate 系列十五 -- GG Trails 说明
  8. 语法:MySQL中INSERT IGNORE INTO和REPLACE INTO的使用
  9. OSI七层模型,作用及其对应的协议
  10. 第四周作业 wcPro