-
-
[原创]Frida持久化方案(Xcube)之方案一——基于Magisk和Riru
-
2021-4-1 15:28
70313
-
[原创]Frida持久化方案(Xcube)之方案一——基于Magisk和Riru
上一篇介绍了基于xposed的frida持久化方案,这次带来基于magisk和riru的持久化方案。方案原理其实简单的很,开发过程却是非常坑,比如把手机刷成砖,比如每次出错都得重启手机加载插件。还好这些坑已经克服,现在只要编写靠谱的js脚本,自己过掉app的各种检测了!
原理
riru插件
我们知道riru给出了在app进程fork出来的时候的几个回调函数
1 2 3 4 5 6 | forkAndSpecializePre
forkAndSpecializePost
specializeAppProcessPre
specializeAppProcessPost
forkSystemServerPre
forkSystemServerPost
|
这里选择了在如下方法处调用frida-gumjs引擎库执行js脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 | static void forkAndSpecializePost(JNIEnv * env, jclass clazz, jint res) {
if (res = = 0 ) {
/ / in app process
enable_hack = rirutest(env, * _appDataDir);
if (enable_hack) {
gumjsHook();
}
} else {
/ / in zygote process, res is child pid
/ / don't print log here, see https: / / github.com / RikkaApps / Riru / blob / 77adfd6a4a6a81bfd20569c910bc4854f2f84f5e / riru - core / jni / main / jni_native_method.cpp
}
}
|
frida-gumjs.a是了frida封装的hook库和quickjs引擎,上一篇里也提到过,官方有下载,我们这里不细说。
配置
同样使用配置文件来管理哪些package需要hook,配置文件固定放在
1 | const char * filepath = "/data/local/tmp/myscript.js" ;
|
要hook的包名每个一行
1 2 | org.xtgo.xcube.base2
org.xtgo.xcube.base
|
咱这个插件使用的frida脚本路径也是写死的
1 | const char * confpath = "/data/local/tmp/pkg.conf" ;
|
使用
1.安装magisk和magisk manager,安装riru-core核心组件
2.frida官网下载 frida-gumjs.a放到/module/src/main/cpp/对应的ABI下
3.执行build,out目录会生成zip插件包
4.magisk manager安装插件,重启手机
5./data/local/tmp/pkg.conf中添加要hook的packagename
6.frida脚本push到/data/local/tmp/myscript.js
7.logcat中可以看到frida 脚本中输出的日志
源码
https://github.com/svengong/xcubebase_riru.git
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法