美文网首页
阅读《为所欲为的 Xposed 是怎么实现的?》

阅读《为所欲为的 Xposed 是怎么实现的?》

作者: 普通的程序员 | 来源:发表于2021-01-24 16:23 被阅读0次

原文地址
https://mp.weixin.qq.com/s/zvxrLasOMOP9J_XSeonpvA

image.png

重点问题

1.Xposed 怎样实现的将代码加载到每一个应用进程中(Xposed 是基于 Root 权限实现的,所以有修改 Android 系统的能力)?

『Xposed 是通过修改系统 zygote 进程的实现将代码注入应用进程中的。

Xposed 对 zygote 进程的实现源码进行修改后,重新编译出 app_process 可执行文件,替换了系统的 app_process 文件(包括 64 位 zygote),并在其中加载了 XposedBridge.jar 这个 Dex 代码包,它包含 Xposed 的 Java 层实现代码和提供给 Xposed 模块的 API 代码,那么当 init 进程启动 zygote 服务进程时,将执行修改过的 app_process 文件,此时 zygote 进程就具有了 Xposed 的代码,Xposed 可以进行加载 Xposed 模块代码等任意操作了。

所有 Android 应用都是运行在 Java 虚拟机上的,所有的 Android 应用都是 zygote 的子进程,那么当 Android 应用进程启动后,将具备 zygote 进程加载的所有资源,从而将 Xposed 代码继承到了 Android 应用进程中,实现了将 Xposed 代码加载到每一个进程中的目的。』

2.dalvik 跟 art 虚拟机的hook方式一样嘛?

不一样。
『基于 Dalvik 的 Hook 方案是通过将被 Hook 方法修改为一个 JNI 方法,然后绑定一个 Xposed 自定义处理方法逻辑的函数上来实现的。』


基于 ART 的 Hook 方案相比 Dalvik 要复杂一些,需要重新修改编译 ART 虚拟机的源码,重新编译出 ART 虚拟机的可执行文件 libart.so,替换 Android 系统中的 ART 虚拟机实现。

它的核心原理就是直接修改一个方法对应的汇编代码的地址,让方法直接跳转到指定地址执行,然后就可以执行自定义的逻辑进行 Hook 处理了。』

相关文章

网友评论

      本文标题:阅读《为所欲为的 Xposed 是怎么实现的?》

      本文链接:https://www.haomeiwen.com/subject/ygmmzktx.html