当前位置:网站首页 > Java基础 > 正文

hook框架是什么(java hook框架)



在这里插入图片描述

Hook 是“钩子”的意思,可以在事件传送的过程中截获并监控事件的传输,可以将我们的代码与系统方法进行融合。当这些系统方法被调用时,也会执行我们的代码。面向切面编程的思想(AOP)也是利用这个原理

Android有基于Android SDK的Java语言开发和基于Android NDK的Native C/C++语言开发,因此有:

  • Java层级的Hook
  • Native层级的Hook

根据Hook到的对象与Hook后处理事件方式的不同可以分为:

  • 消息Hook
  • API Hook

根据Hook到的进程的不同分为:

  • 全局Hook
  • 单个进程Hook

Hook的原理就是改变目标函数的指向。Hook技术无论对安全软件还是恶意软件都是十分关键的一项技术,其本质就是劫持函数调用。

Hook技术的难点是如何找到函数的入口点、替换函数,这就涉及了理解函数的连接与加载机制。

对于Android的开发来说,hook Native层关键是要理解好ELF文件(linux平台上的可执行文件),hook Java层关键是要了解虚拟机的特性和Java反射技术。

Hook 过程

  • 寻找 Hook 点,原则是尽可能是静态变量或者单例对象,因为它们容易定位,其次是尽量 Hook public 的对象和方法。
  • 选择合适的代理方式,如果是接口可以用动态代理。
  • 用代理对象替换原始对象

我们现在来拦截android控件的点击事件:

分析View.java代码:

 
  

通过分析 View.java的代码,我们可以知道setOnClickListener注册的OnClickListener 对象被保存在ListenerInfo内部类对象mListenerInfo里。ListenerInfo 里面保存了 View 的各种监听事件。因此,我们要劫持点击事件,就要hook得到 ListenerInfo对象里的mOnClickListener ,hook得到以后,用 Hook代理类替换原始的 OnClickListener,就可以实现我们的目的了。

 
  

可以看出我们的代理类做了一件事,就是先提示“Hook Click Listener”,然后再继续执行原先的东西。

 
  

Hook的过程,我们就演示了一遍了。demo示例

  • Xposed
  • Cydia Substrate
  • Legend
    Legend 是 Android 免 Root 环境下的一个 Apk Hook 框架,该框架代码设计简洁,通用性高,适合逆向工程时一些 Hook 场景。大部分的功能都放到了 Java 层,兼容性非常好。
    原理是直接构造出新旧方法对应的虚拟机数据结构,然后替换信息写到内存中即可。

谢谢阅读!

到此这篇hook框架是什么(java hook框架)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • java面试八股文是哪些(java面试八股文汇总)2025-06-22 12:00:08
  • java课程收费网站(免费java培训课程)2025-06-22 12:00:08
  • string转map对象(java string转map对象)2025-06-22 12:00:08
  • Java字符串转时间(java字符串时间格式转换)2025-06-22 12:00:08
  • Java字符串转数组(java字符串转为数组)2025-06-22 12:00:08
  • pytorch模型部署到java(pytorch模型部署到springbootweb)2025-06-22 12:00:08
  • 单向链表反转java实现(单向链表反转java实现头插法)2025-06-22 12:00:08
  • java 线程内存模型(java线程内存释放)2025-06-22 12:00:08
  • java调用dll动态库(java调用dll动态库 http)2025-06-22 12:00:08
  • java面试必考题(java面试题及答案整理)2025-06-22 12:00:08
  • 全屏图片