概述
大多数国产手机厂商出于安全考虑,禁止用户解锁BootLoader,因此也就无法通过Magisk获取Root权限。
本文基于VirtualApp框架及Frida-Gadget,实现不修改apk使用Frida。
方案
修改框架源码
阅读VirtualApp源码可知,在lib/src/main/jni/Foundation/IOUniformer.cpp中hook了dlopen,并实现了onSoLoaded函数,可在该函数中通过传入的filename获取加载的动态库路径。
由此,可以在libart.so加载后,手动调用dlopen加载Frida-Gadget
具体操作为:
将arm版本的so文件及配置文件添加到lib\src\main\jniLibs\armeabi-v7a,并配置build.gradle的android.defaultConfig中的ndk.abiFilters
编写Xposed模块
除了修改源码,也可以自己编写一个Xposed模块,实现Frida-Gadget的加载。
hook ContextWrapper.attachBaseContext函数,在其执行后,调用System.load或System.loadLibrary加载Frida-Gadget。
注意:如果hook系统应用(PLATFORM_APP),且未关闭SELinux,则无法从data目录下加载so文件。