Frida + AndroidAsync 实现 RPC

公众号: 奋飞安全
• 阅读 2062

一、目标

我们在之前的教程里面使用 python的Flask库启动一个web Server 来实现App函数的RPC调用。

今天我们介绍一个新盆友,AndroidAsync, 用AndroidAsync来启动web Server,这样frida就直接搞定,不需要再请Python来帮忙了。

二、步骤

AndroidAsync

AndroidAsync的详细介绍大家可以自行谷歌,反正就是一个比较帅的网络库了。

它的老家在这里 https://github.com/koush/AndroidAsync

把它搞下来,然后编译成jar包再转成dex,frida可以调用了。准备工作就ok了

来个栗子

我们以昨天的 某资讯App signature签名分析 (一) 为例

先把web服务跑起来

  • 把androidAsync.dex拷贝到手机里面
adb push androidAsync.dex /data/local/tmp/
  • 在 android.app.Application.attach 的时候启动WebServer
//Java.openClassFile("/data/local/tmp/androidAsync.dex").load();

var ApplicationCls = Java.use("android.app.Application");
ApplicationCls.attach.implementation = function () {
    try {
        var AsyncHttpServer = Java.use("com.koushikdutta.async.http.server.AsyncHttpServer");
        var androidAsync = AsyncHttpServer.$new();
        androidAsync.get("/", RequestTestCallback.$new());
        androidAsync.listen(8181);
        console.log("reg webServer Ok");
    } catch (e) {
        console.error("reg webServer Error!!!, e:" + e);
    }    

    this.attach.apply(this, arguments);
};

代码就不用解释了,牛X的代码自己会说话。

在8181端口启动了WebServer,然后注册了一个测试用的 RequestTestCallback

  • 挂上心爱的Frida,试一把

打开浏览器 http://127.0.0.1:8181 木反应?

哦,晕了,这是在手机里监听8181,不是在电脑上,所以应该是访问手机的ip, http://192.168.2.113:8181/

还是木反应? 看看日志,并没有 reg webServer Ok 或者 reg webServer Error!!!

原来我们用的Frida attach 模式,可能并没有跑到 android.app.Application.attach 这个函数。

这就好办了,设置一个开关变量,直接在签名函数 signInternal 里面启动服务

var bRunServer = 0;

var SignUtilCls = Java.use("com.yxdxxx.news.util.sign.SignUtil");
SignUtilCls.signInternal.implementation = function(a,b){
        if( bRunServer == 0){
            bRunServer = 1;
            runWebServer();
        }

        var rc = this.signInternal(a,b);
        console.log("inStr = " + b);
        console.log(">>> rc = " + rc);
        return rc;
}

好了这次可以看到启动成功的提示了

[MI NOTE Pro::com.hxxx.yxdxxx]-> reg webServer Ok

主动调用 签名函数

RunServer的时候增加一个 /onenewssign 接口

// androidAsync.get("/onenewssign", OneNewsSignRequestCallback.$new());

OneNewsSignRequestCallback = Java.registerClass({
    name: "OneNewsSignRequestCallback",
    implements: [HttpServerRequestCallback],
    methods: {
        onRequest: function (request, response) {
            // 主动调用代码直接写这里
            var InStr = request.getQuery().getString("instr");
            console.log("RPC Str = " + InStr);
            var context1 = Java.use('android.app.ActivityThread').currentApplication().getApplicationContext();
            console.log(context1);

            var SignUtilCls = Java.use("com.yxdxxx.news.util.sign.SignUtil");
            var ret = SignUtilCls.signInternal(context1,InStr);
            response.send("{\"code\":0,\"message\":\"" + ret + "\"}");
        }
    }
});

好了直接调用, http://192.168.2.113:8181/onenewssign?instr=yxdxxx5.7.7.21k6lwwmig_1620967068422_166028401 算下和之前结果对不对。

结果并不一样,但是每次传相同的参数,结果都不一样,估计so的算法里面还是加入了随机数。不过应该这个结果是可用的。

三、总结

不知道是 AndroidAsync 不太稳定还是 Frida+AndroidAsync不太稳定,反正我崩了好几回。

凑活用吧,说不定是我手机的问题。多个方法总是好的。

android.content.Context 参数获取有两种方法,一种是用Api获取全局的 Context,还有一种就是 保存 signInternal 函数的参数。

注意: response.send 的返回值必须是 Json

Frida + AndroidAsync 实现 RPC

绝大多数时候,凑合着做完,比完美地半途而废要好。绝大多数时候,决定要做就直接开始,比自认为准备充分了再开始要好。

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号: 奋飞安全,最新技术干货实时推送

点赞
收藏
评论区
推荐文章
frida调试不了怎么办?着急,在线等!
一、目标frida越来越流行,针对他的检测也越来越多了,什么特征串检测,TracerPid检测,双进程保护。搞的我们茶饭不思,啤酒都不香了。今天的目标是数字壳的调试,双进程保护。二、步骤侦测下火力fspawn模式启动App,提示:fridaUfcom.asiainfo.appltest.jsnopauseProcesscrashed
https://cloud.tencent.com/developer/article/write/1830331
一、目标今天的目标是这个sign和appcode二、步骤Jadx没法上了app加了某梆的企业版,Jadx表示无能为力了。FRIDADEXDumpDexDump出来,木有找到有效的信息。Wallbreaker葫芦娃的Wallbreaker可以做些带壳分析,不过这个样本,用Frida的Spawn模式可以载入,Attach模式会失败。而直接用Objecti
某A系电商App x-sign签名分析
一、目标前不久(我去,都大半年了)分析过我们找到了几个伪装成so的jar包。虽然rpc调用ok了,但是它的实际运算过程还是在so里面的。今天我们从它们同族的App来入手,利用Native层字符串定位的方式来定位下在哪个so中去做的运算。App版本:v4.15.1二、步骤特征字符串定位一开始选择的特征字符串是x,后来发现没有xsign好使In
某汽车社区App 签名和加解密分析 (二) : Frida Dump so
一、目标App安全的主战场在Native层,分析Native层的so,最趁手的兵器就是Frida和Unidbg了。今天我们的目标是某汽车社区Appv8.0.1so的分析。二、步骤特征字符串定位我们在上一篇教程已经定位了,数据加密和解密函数再java层的位置。按照常理来说,这个java类文件中,应该有个System.loadLibrary("
Frida-syscall-interceptor
一、目标现在很多App不讲武德了,为了防止openat、read、kill等等底层函数被hook,干脆就直接通过syscall的方式来做系统调用,导致无法hook。应对这种情况有两种方案:刷机重写系统调用表来拦截内核调用inlineHookSWI/SVC指令我们今天采用第二种方法,用frida来实现内联汇编SWI/SVC做系统调用,sysc
某A系电商App doCommandNative浅析
一、目标李老板:奋飞呀,xsign你都水了好几篇了,一直在Apk里面打转,咱们啥时候分析分析它的so?奋飞:循序渐进嘛,我们上次刚定位了它的so,今天我们来分析分析。App版本:v4.15.1二、步骤Native层的入口先回忆下这个堆栈这个jni函数有两个参数,第一个参数是int型,第二个参数是Object数组我们先上frida看看它是不是我们的目
IOS 某电商App签名算法解析(二) Frida RPC调用
一、目标Android下用frida来做rpc调用计算签名,我们已经玩的很熟练了。今天介绍在IOS下的玩法。要点如下:参数类型确认NSDictionaryNSArray等ObjectC对象的构造和复制ObjectC类方法和对象方法的调用附送福利,ObjectC的nil参数如何构造二、步骤参考Android下的玩法参照某段子App协议分
IOS 联真机签名解决方案
一、目标我们之前介绍过和。那么他们搭配起来能解决什么问题呢?在Android联真机签名方案中,我们提到过Fridarpc方案的缺点:frida不是很稳定,偶尔会崩溃出退frida启动需要连PC(不过这个缺点已经被给解决了)那么在Ios下有没有类似Xposed的东东?是的,就是Tweak。二、步骤GCDWebServerGCDWebS
手把手教你搭个Frida + Sekiro Rpc框架
一、目标联手机签名是个比较取巧的方案,之前我们介绍过android连真机签名公网ip更新方案SekiroXposed签名解决方案现在frida用的比较多,并且Sekiro也升级了新版本,我们今天就来手把手教你搭个FridaSekiroRpc框架。二、步骤我们以这个手机号加密算法为例先运行服务器端官网在这里gitclone下来;在Li
Wesley13 Wesley13
2年前
Java使用Netty实现简单的RPC
造一个轮子,实现RPC调用在写了一个Netty实现通信的简单例子后,萌发了自己实现RPC调用的想法,于是就开始进行了NettyRpc的工作,实现了一个简单的RPC调用工程。如果也有兴趣动手造轮子的同学,可以先看看之前写的使用Java实现Netty通信(https://www.oschina.net/acti
公众号:  奋飞安全
公众号: 奋飞安全
Lv1
奋飞,国家高级信息系统项目管理师,独立安全研究员。 http://91fans.com.cn/
文章
59
粉丝
4
获赞
44