Xposed
模块开发
- 有个进程叫做
Zygote
这是Android
运行环境的的核心。 - 每一个应用程序启动都是通过它
fork
出来的。当手机被启动就会行 /init.rc
这个脚本,这个进程会启动/system/bin/app_process
然后他会调加载所需的类并调用初始化函数。 - 现在说说
Xposed
什么时候开始启动。当您安装了Xposed
,它会把修改的app_process
可执行文件复制到/system/bin
中。 - 这个修改过的启动进程增加了一个额外的
jar
包到classpath
路径,并在某些地方调用那里的方法。例如,在虚拟机刚刚创建后,在Zygote
的main
方法调用后。我们的jar
包也可以Zygote里面工作。这个jar包位于:/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar
和它的源代码可以在这里找到(Xposed模块)。 - 综观类
XposedBridge
,你可以看到的main
方法。这就是我上面写的,这个类会在进程启动之前被调用。在那时候执行一些初始化和模块的加载(我会在后面讲解模块的加载)。
自学推荐 :
基本用法
插件开发之二: Xposed一些知识
插件开发之三: 编写广告去除插件
Xposed系列之微信屏蔽拍一拍
开发文件 密码:God
Xposed
模块配置
Project--> app--> libs-->
XposedBridgeApi-82.jar
添加
jar
文件 右键Add as library
添加到库Project -->app -->
build.gradle
image-20221013102255973.png
dependencies{ //在这里插入代码 //注意 IDA自动填写的要去掉 implementation : files('lib\\XposedBridgeApi-82.jar') //设置只编译不打包 compileOnly 'de.robv.android.xposed:api:82' }
并删除
测试项
Project --> app -->
src
--> AndroidManifest.xml 添加以下三个
配置项
<application ...... <meta-data android:name="xposedmodule" android:value="true" /> //让Xposed识别为模块 <meta-data android:name="xposedminversion" android:value="82" /> //最小支持Api版本 <meta-data android:name="xposeddescription" android:value="描述" /> //模块描述 </application>
- Project --> app -->
src
--> main -->assets -->xposed_init
手动创建目录添加文件assets
里面写xposed
启动函数入口 : Hook类的包名和类名
动态加载劫持
动态加载
Dex
XposedHelpers.findAndHookMethod - > Application.class, "attach", Context.class
动态加载
Class
XposedBridge.hookAllMethods -> ClassLoader.class, "loadClass"
ClassLoader
类加载器可以有很多个 , 都做着不同的事