Xposed模块注入资源原理以及思路

查看 63|回复 9
作者:KillLog   
在使用xposed进行hook宿主App的时候,有时候需要调用模块内的Resources
默认下访问的是宿主App的进程也就是宿主App的资源
知识储备:
Lsposed原理
android插件化技术
在android的插件化技术中得知,android资源是通过AssetManager类的addAssetPath函数去加载的


addAssetPath.png (9.78 KB, 下载次数: 0)
下载附件
2025-3-25 14:18 上传



addAssetPathInternal.png (30.05 KB, 下载次数: 0)
下载附件
2025-3-25 14:19 上传

在loadAssets函数中通过资源管理器加载APK资源


loadAssets.png (19.96 KB, 下载次数: 0)
下载附件
2025-3-25 14:20 上传

并在nativeSetApkAssets去解析apk中的资源
那么思路很简单我们主动调用addAssetPath函数去吧模块的资源加载到宿主App
需要用到xposed的IXposedHookZygoteInit接口
重写initZygote函数
[Java] 纯文本查看 复制代码
@Override
public void initZygote(StartupParam startupParam) throws Throwable {  
    modulePath=startupParam.modulePath;
}
这个函数用来获取模块apk路径(/data/app/.....)
在handleLoadPackage函数里,通过去hook获取到宿主App的Context去主动调用addAssetPath
[Java] 纯文本查看 复制代码@Override  
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {  
    XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {  
        @Override  
        protected void afterHookedMethod(MethodHookParam param) throws Throwable {  
            super.afterHookedMethod(param);  
            Context context = (Context) param.args[0];  
            ClassLoader classLoader = context.getClassLoader();  
            XposedHelpers.callMethod(context.getResources().getAssets(),"addAssetPath",modulePath);  
        }  
    });  
}
然后后面我们可以随意去使用我们的资源(drawable,mipmap,values,layout....)
注意使用的时候,调用的context是使用的宿主App的
(initZygote是怎么获取的模块路径)


loadModule.png (133.9 KB, 下载次数: 0)
下载附件
2025-3-25 14:21 上传



loadModules.png (71.06 KB, 下载次数: 0)
下载附件
2025-3-25 14:21 上传

可以看到是通过SELinuxHelper.getAppDataFileService服务读取了/data/data/de.robv.android.xposed.installer/conf/modules.list路径的文件读取

宿主, 下载次数

KillLog
OP
  


gaoyanggnay 发表于 2025-3-25 15:28
大佬求个源码学习下

https://wwij.lanzout.com/iKr8N2rky92f
Cloud4n   

请问现在对于安卓10的机型有什么更好的rt建议吗
lyajkl   

感谢分享
fredchen   

来这边学习一下,可以
zaihulhf   

感谢分享 是个不错的东西
gaoyanggnay   

大佬求个源码学习下
tomchil   

感谢分享
cijide   

谢谢,最近在学习,正好收藏
fxhfxm001   

来这边学习一下,可以
您需要登录后才可以回帖 登录 | 立即注册

返回顶部