首页
论坛
课程
招聘
[原创]Frida持久化方案(Xcube)之方案一——基于Magisk和Riru
2021-4-1 15:28 3913

[原创]Frida持久化方案(Xcube)之方案一——基于Magisk和Riru

2021-4-1 15:28
3913

上一篇介绍了基于xposed的frida持久化方案,这次带来基于magisk和riru的持久化方案。方案原理其实简单的很,开发过程却是非常坑,比如把手机刷成砖,比如每次出错都得重启手机加载插件。还好这些坑已经克服,现在只要编写靠谱的js脚本,自己过掉app的各种检测了!

原理

  1. 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#L55-L66
     }
    }
  2. frida-gumjs.a是了frida封装的hook库和quickjs引擎,上一篇里也提到过,官方有下载,我们这里不细说。

  3. 配置
    同样使用配置文件来管理哪些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


第五届安全开发者峰会(SDC 2021)议题征集正式开启!

收藏
点赞4
打赏
分享
最新回复 (7)
雪    币: 26
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_yvvzfcdo 活跃值 2021-4-1 15:56
2
0
感谢分享
雪    币: 116
活跃值: 活跃值 (509)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huaerxiela 活跃值 2021-4-12 22:12
3
0
感谢分享
雪    币: 4
活跃值: 活跃值 (306)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_范迪塞尔 活跃值 2021-7-16 18:22
4
0

没法build啊,有成功的兄弟嘛,https://dl.bintray.com/rikkaw/Libraries/rikka/ndk/riru/10/riru-10.pom  这个pom根本找不到

最后于 2021-7-16 18:36 被wx_范迪塞尔编辑 ,原因:
雪    币: 4
活跃值: 活跃值 (306)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_范迪塞尔 活跃值 2021-7-17 10:55
5
0

没法打印日志

最后于 2021-7-18 15:31 被wx_范迪塞尔编辑 ,原因:
雪    币: 424
活跃值: 活跃值 (198)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
anenn 活跃值 2021-7-22 10:10
6
0
wx_范迪塞尔 没法build啊,有成功的兄弟嘛,https://dl.bintray.com/rikkaw/Libraries/rikka/ndk/riru/10/riru-10.pom  这个p ...
将 implementation 'rikka.ndk:riru:10' 改成 implementation 'dev.rikka.ndk:riru:10' 就能正常编译了

雪    币: 4
活跃值: 活跃值 (306)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_范迪塞尔 活跃值 2021-7-22 18:00
7
0

实测安卓10可以,安卓11不行,  安卓11forkAndSpecializePost这个回调函数没有触发,specializeAppProcessPost触发了但是注入gumjs就报错了,有没有大佬说说原因啊

最后于 2021-7-23 17:06 被wx_范迪塞尔编辑 ,原因:
雪    币: 1621
活跃值: 活跃值 (358)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
疯子Tear 活跃值 1天前
8
0
wx_范迪塞尔 实测安卓10可以,安卓11不行,  安卓11forkAndSpecializePost这个回调函数没有触发,specializeAppProcessPost触发了但是注入gumjs就 ...
老哥编译成功了么
游客
登录 | 注册 方可回帖
返回