什么是Hoolk?(摘抄大神文档)
Hook又叫做“钩子”,在事件传送过程中截获并监控事件的传输,将自身的代码与系统进行融合。当这些方法被调用时,也就可以执行我们自己的代码,这也是面向切面编程的思想(AOP)。
Hook分类
1、根据Android开发模式,Native模式(c/c++)和Java模式(Java)区分,在Android平台上分为,Java层级的Hook和Native层级的Hook
2、根据Hook对象与Hook后处理方式的不同,可分为消息Hook和APIHook
3、根据Hook不同进程上来区分,可分为,全局Hook和单个进程Hook
常见的Hook框架
1、Xposed
通过替换/system/bin/app_process程序控制Zygote进程,使的app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持。Xposed在开机时完成对所有的Hook Function的劫持,在原有Function执行的前后加上自定义代码。
2、Cydia Substrate
是一个基于Hook的代码修改框架,可以在Android、IOS平台使用,并实现修改系统默认代码
3、Legend
是Android免Root环境下的一个Apk Hook框架。
原理是,直接构造出新旧方法对应的虚拟机数据结构,然后替换信息写到内存中即可。
Hook 必须掌握的知识
1、反射
参考链接 Java 反射机制详解
2、java动态代理
指在运行是动态生成代理类,不需要像静态代理那样去手动写一个个代理类。在java中可以使用Invocationhandler实现动态代理,参考链接 java 代理模式详解