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

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

2021-4-1 15:28
71560

上一篇介绍了基于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


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 6
支持
分享
最新回复 (14)
雪    币: 334
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2021-4-1 15:56
0
雪    币: 181
活跃值: (2943)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2021-4-12 22:12
0
雪    币: 5
活跃值: (2595)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

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

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

没法打印日志

最后于 2021-7-18 15:31 被wx_范迪塞尔编辑 ,原因:
2021-7-17 10:55
0
雪    币: 4778
活跃值: (2974)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
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' 就能正常编译了

2021-7-22 10:10
0
雪    币: 5
活跃值: (2595)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7

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

最后于 2021-7-23 17:06 被wx_范迪塞尔编辑 ,原因:
2021-7-22 18:00
0
雪    币: 3212
活跃值: (743)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
wx_范迪塞尔 实测安卓10可以,安卓11不行,  安卓11forkAndSpecializePost这个回调函数没有触发,specializeAppProcessPost触发了但是注入gumjs就 ...
老哥编译成功了么
2021-7-29 21:10
0
雪    币: 225
活跃值: (1089)
能力值: ( LV3,RANK:27 )
在线值:
发帖
回帖
粉丝
9
wx_范迪塞尔 实测安卓10可以,安卓11不行,  安卓11forkAndSpecializePost这个回调函数没有触发,specializeAppProcessPost触发了但是注入gumjs就 ...
不至于吧,源码里有个so因为太大,你得手动unzip一下
2021-8-13 14:10
0
雪    币: 225
活跃值: (1089)
能力值: ( LV3,RANK:27 )
在线值:
发帖
回帖
粉丝
10
我一直用的小米10pro的12.5,Android11 跑的飞起
2021-8-13 14:11
0
雪    币: 225
活跃值: (1089)
能力值: ( LV3,RANK:27 )
在线值:
发帖
回帖
粉丝
11
wx_范迪塞尔 没法打印日志
consile.log的日志是直接输出到logcat中的
2021-8-13 14:14
0
雪    币: 310
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
安卓 8.1 安装没反应啊  创建了pkg  和myscript   locat 没得输出
2021-11-2 22:51
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13

1

最后于 2022-1-11 17:06 被shuishui1024编辑 ,原因:
2022-1-11 17:05
0
雪    币: 33
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
编译了一天一直报错。。然后显示::module:externalNativeBuildDebug,Build command failed
2022-4-23 15:41
0
雪    币: 129
活跃值: (4490)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
大佬用的啥版本ndk
2022-12-16 09:49
0
游客
登录 | 注册 方可回帖
返回
//