Xposed模块开发

  • ​ 有个进程叫做 Zygote 这是 Android 运行环境的的核心。
  • ​ 每一个应用程序启动都是通过它 fork 出来的。当手机被启动就会行 /init.rc 这个脚本,这个进程会启动 /system/bin/app_process 然后他会调加载所需的类并调用初始化函数。
  • ​ 现在说说 Xposed 什么时候开始启动。当您安装了 Xposed ,它会把修改的 app_process 可执行文件复制到 /system/bin 中。
  • ​ 这个修改过的启动进程增加了一个额外的 jar 包到 classpath 路径,并在某些地方调用那里的方法。例如,在虚拟机刚刚创建后,在 Zygotemain 方法调用后。我们的 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

类加载器可以有很多个 , 都做着不同的事

最后修改:2022 年 10 月 13 日
如果觉得我的文章对你有用,请随意赞赏