【僵尸复活申请】分享项目中遇到的App Mpaas加密的问题解决

2022-10-21 11:21:43 2 564 3
移动开发平台(Mobile PaaS,简称 mPaaS)是源于支付宝 App 的移动开发平台,为移动开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动 App。

这次是某银行项目,需要对手机银行app进行渗透测试,但挂代理抓包后发现请求体响应体都是类似二进制的内容进行加密过的,无法改包测试。经过百度发帖啥的得到大佬的解决,发现这种方式是用了蚂蚁金服的mPaas进行了加密,需要进行逆向及hook。这是抓到的包的样子。

经过大量文章和大佬的解答,最终定位到三个类。这三个类好像是所有用了mPaas平台通用的,我看了一下支付宝app的也是这三个类

com.alipay.mobile.common.rpc.transport.http.HttpCaller
com.alipay.mobile.common.rpc.RpcInvoker
com.alipay.mobile.common.rpc.protocol.json.JsonSerializerV2



第一个看到的是com.alipay.mobile.common.rpc.transport.http.HttpCaller类,这个类的构造方法第五个参数reqData传入的是请求体,但是这里hook无法修改请求包,因为之前还有一个校验请求包完整的逻辑。
需要再hook早一点。


于是这里找调用了HttpCaller类的用例,发现只有一个地方调用了这个类,就是com.alipay.mobile.common.rpc.RpcInvoker类。

进入到com.alipay.mobile.common.rpc.RpcInvoker类的a方法,此处调用了HttpCaller,并且方法返回一个Response,经测试此处可以hook返回值用Response.getResData()来修改响应

但是请求体的body,是在中间调用serializer.packet获取到的,无法在这个方法内修改,要继续跟进Serializer

这里看了一下Serializer接口,此接口定义了packet方法,并且返回byte[]类型。


这里继续跟进getSerializer方法,跟进之后发现这个方法会返回五种实现了Serializer接口的类。
这里全部hook查看,经过测试
com.alipay.mobile.common.rpc.protocol.json.JsonSerializerV2 主要的业务请求都是经过此类,
直接hook此类的packet方法就能修改请求体,并且这里还是在请求包完整性校验生成之前。



于是逆向结束,直接hook JsonSerializerV2类的packet方法即可修改请求包,于是参考MpaasPentestTool项目写了个frida脚本导入到burp,运行流程如下。

运行后burp可以抓到包并修改请求。


具体代码放到了github:https://github.com/F6JO/mPaas-frida-hook 有兴趣的师傅可以看下。

关于作者

F6Joker4篇文章35篇回复

评论2次

要评论?请先  登录  或  注册
  • 2楼
    2022-10-25 21:29
    allforjoy

    看了师傅的那个流程图受益匪浅,这个应该也是不能实现暴露破解功能的吧,请问师傅有没有什么思路,能够实现用burp爆破呢

    1

    暂时没有呢,我也在找重放的方法

  • 1楼
    2022-10-24 16:19

    看了师傅的那个流程图受益匪浅,这个应该也是不能实现暴露破解功能的吧,请问师傅有没有什么思路,能够实现用burp爆破呢