彻底讲透xposed原理

本文只讲原理。xposed原理百度文章很多,但没有讲透彻。要想彻底搞懂原理,直接看xposed源码是最有效的。

原理

xposed将代码注入到 zygote进程、zygote进程fork目标进程、目标进程启动后xposed将需要hook的Java函数转换为native函数(当目标函数被调用时、执行的其实是native函数而不是java函数)

具体流程

1.Xposed框架的初始化:Xposed框架会在Zygote进程中注入自己的代码,Xposed框架通过替换/system/bin/app_process程序来控制Zygote进程,使其在启动过程中加载XposedBridge.jar。XposedBridge.jar包中包含了Xposed框架的核心代码,其中最重要的是XposedBridge类。在XposedBridge类的main方法中启动Xposed框架的核心功能。
2.判断当前进程是否需要hook:在核心功能启动后,Xposed框架会通过HookZygoteInit类的handleLoadPackage方法,来判断当前进程是否是需要hook的应用程序进程。
3.Hook操作:如果当前进程需要hook,Xposed框架会开始进行hook操作。在hook操作中,Xposed框架会将Java层函数的指针替换为对应的native函数的指针,并将这些native函数注册为本地JNI方法。
4.将Java层函数转换为native函数:Xposed框架会将Java层函数转换为native函数,并将这些native函数的指针保存在XposedBridge类的sHookedMethodCallbacks静态变量中。
5.注册本地JNI方法:Xposed框架会通过JNI的RegisterNatives方法,将这些native函数注册为本地JNI方法。
6.Hook操作生效:当应用程序调用被hook的Java层函数时,实际上会调用对应的native函数,从而实现hook操作。

条件

由于需要替换app_process,故需要root或刷机(将xposed打包进Android系统镜像)
重启手机后插件才会生效

限制

xposed 不支持安卓12
xposed 不支持native hook

转换为native函数流程

Xposed框架是如何将Java层函数转换为native函数的?

1.Xposed框架通过ArtHook技术修改指定Java方法的ArtMethod入口为代理函数。
2.代理函数是由Xposed框架自动生成的native函数,用于替换原有的Java层函数。
3.Xposed框架会将代理函数注册为本地JNI方法,使得应用程序可以调用这些native函数。
4.当应用程序调用Java层函数时,实际上会调用对应的native函数(也就是代理函数)。
5.Xposed框架开发者编写了这些native函数的具体实现,并在Xposed框架的初始化过程中被加载到Android虚拟机中。
6.通过这种方式,Xposed框架实现了对Java层函数的Hook,使得开发者可以在不修改应用程序源代码的情况下,修改应用程序的行为。

Xposed框架将Java层函数转换为native函数的过程主要分为以下几个步骤:

1.在Xposed框架的初始化过程中,Xposed会将自己的代码注入到Zygote进程中,并启动XposedBridge类的main方法。
2.在XposedBridge类的main方法中,Xposed会通过反射获取到ZygoteInit类的main方法,并调用该方法启动Zygote进程。
3.在Zygote进程启动时,Xposed会将XposedBridge.jar加载到Android虚拟机中,并将所有的Xposed模块也加载进Android虚拟机中。
4.Xposed会修改Android的ART虚拟机(libart.so),并通过ArtHook修改指定Java方法的ArtMethod入口为代理函数。
5.在Hook操作中,Xposed会将Java层函数的指针替换为对应的native函数的指针,并将这些native函数注册为本地JNI方法。
6.当应用程序调用Java层函数时,实际上会调用对应的native函数。
从源码角度来看,Xposed框架将Java层函数转换为native函数的具体实现可以参考XposedBridge类的handleHookedMethod方法。在该方法中,Xposed会通过反射获取到指定Java方法的ArtMethod对象,并将该对象的入口地址替换为代理函数的地址。代理函数实际上是一个native函数,它会调用原始Java方法的native函数,并在调用前后执行Hook操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值