androidAsync fridaManager sgmain 70102 rpc 远程调用

android 逆向 5 / 38

仅供学习研究 。请勿用于非法用途,本人将不承担任何法律责任。

前言

使用 AndroidAsync + FridaManager 实现 frida 脚本持久化 rpc 远程调用
AndroidAsync 使用链接
FridaManager 安装教程
最后实现某宝的 sgmain 70102 调用 taobao version == 10.2.5

安装 fridaManager

下载百度网盘链接里的文件 riru-fridamanager-1.0-release.zip | FridaManage.apk

这里博主也提供了一份安装包,可点击下载

总结安装就是
1、使用 Magisk 安装 riru 模块
2、使用 Magisk 从本地安装 riru-fridamanager-1.0-release.zip
3、安装 FridaManage.apk

最后重启手机,完事

编译 AndroidAsync

这个是一个 android 项目,需要打包成 jar 包,在转成 dex 文件,frida 里才能很方便的使用
博主 clone github 项目,编译一直失败,遇到各种问题最后也是没有解决。
最后是偷了个懒使用 android 项目,通过依赖去下载 AndroidAsync jar 包

1-android-01

这里添加依赖

2-android-02

重新加载,同步下配置文件,完成后打来这个目录

3-android-03

找到依赖包,复制出里面的 classes.jar 文件
使用 Android Sdk -> dx 命令,转换
这条命令在 $Android/sdk/build-tools/${sdk-version}/dx

4-shell-01.png

执行 dx --min-sdk-version=30 --dex --output dex文件路径 classes.jar文件路径
完成后就可以看到生成了 androidAsync.dex 文件,执行 adb push androidAsync.dex /data/local/tmp

frida 脚本编写

function main() {
    // 加载 dex 文件
    Java.openClassFile('/data/local/tmp/androidAsync-2.2.1.dex').load();

    const HttpServerRequestCallback = Java.use('com.koushikdutta.async.http.server.HttpServerRequestCallback');

    // 构建一个默认请求
    const RequestTestCallback = Java.registerClass({
        name: "RequestTestCallback",
        implements: [HttpServerRequestCallback],
        methods: {
            onRequest: function (request, response) {
                // 主动调用代码直接写这里
                response.send(JSON.stringify({
                    "code": 0,
                    "message": " 服务已经注册成功, 默认端口8181"
                }));
            }
        }
    });

    try {
        const AsyncHttpServer = Java.use('com.koushikdutta.async.http.server.AsyncHttpServer');
        const androidAsync = AsyncHttpServer.$new();

        // 新增路由
        androidAsync.get('/', RequestTestCallback.$new());

        androidAsync.listen(8181);
        console.log('reg webServer Ok');

    } catch (e) {
        console.error('reg webServer Error!!!, e:' + e);
    }
}

Java.perform(function () {
    const Application = Java.use('android.app.Application');
    Application.attach.implementation = function () {
        main();
        this.attach.apply(this, arguments);
    }
});

以上就是一个 androidAsync Demo 代码,保存先使用 frida -U -f com.example.appdemo -l a.js --no-pause 启动 frida 脚本

5-frida-shell-01

执行后,输出了服务启动成功的 log

6-chrome-url-01

然后请求 手机 ip:8181 端口,正常返回结果,到这环境就搭建成功了

call sgmain 70102

参照上面的 RequestTestCallback 类,再添加一个

7-frida-js-01

上图,添加了新增了一个 post 请求
执行 adb push a.js /sdcard/fridascript 把脚本,push 到手机里,稍后通过 fridaManager 持久化

frida manager

8-qtscrcpy-01

左边选中目标 app 右边选择 frida 脚本
选择完成后,重启手机,打开某宝 app

9-shell-02

打开后,先通过 adb shell 执行 curl http://127.0.0.1:8181/ 查看,是否成功

10-python-01

在写个 requests.post 请求,结果正常返回结果

12 条评论
本文作者:
本文链接: https://www.qinless.com/?p=134
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 qinless 的博客!
100

12 条评论

浩然

这个sgmain 70102 可以用unidbg 实现吗 ?回有什么卡点吗?

回复

会爬山的小脑虎

@浩然 问题挺多的,

回复

凯多多

com.example.appdemo这个是什么app呀

回复

会爬山的小脑虎

@凯多多 自己写的 app demo ,用于测试的

回复

凯多多

@会爬山的小脑虎 那换成其它app名可以吗,试了好像不行

会爬山的小脑虎

@凯多多 给读取存储空间权限呢

凯多多

@会爬山的小脑虎 Failed to load script: 'utf-8' codec can't decode byte 0xbc in position 26: invalid start byte
哦哦,应该不是那个问题,启动frida报的文件编码问题

会爬山的小脑虎

@凯多多 没遇到过这个问题,一半给了读取权限就OK了,

凯多多

frida出来的上面四个参数爬取手淘爬不了数据了

回复

会爬山的小脑虎

@凯多多 2027762055 vx 讨论

回复

凯多多

大佬,现在手淘抓搜索接口hook还能用吗,会被风控死吗

回复

会爬山的小脑虎

@凯多多 啥意思,是 frida rpc 主动调用吗,我没试过了,之前测试的控制下频率还是可以请求的

回复

发表评论

返回顶部