搞个大点的 某团购App mtgsig
2021-04-27 19:17:52 Author: 91fans.com.cn(查看原文) 阅读量:168 收藏

一、目标

一、目标

李老板: 奋飞呀,最近更新的都是些小App,要不要分析个大点的?

奋飞: 你是老板,你说了算喽。

大公司果然大气,人家签名是一个字段,他直接一堆字段。

main
1:main

mtgsig 就是我们今天的目标

二、步骤

Jadx搜索 “mtgsig”

结果

public static final String MTG_SIG_HEADER = "mtgsig";

继续Jadx MTG_SIG_HEADER

找到了这个 makeHeader 函数

s1
1:s1

Hook之

var signCls = Java.use("com.mxx.android.common.mtguard.wtscore.plugin.sign.core.WTSign");
signCls.makeHeader.implementation = function(a,b){
        var rc = this.makeHeader(a,b);

        console.log(">>> rc=" + rc);
        return rc;
}

跑起来

>>> rc={"a0":"1.5","a1":"9b69f861-e054-4bc4-9daf-d36ae205ed3e","a2":"73a251e151ab949912ab68226ab96799b478eb2a","a3":2,"a4":1619572653,"a5":"OgkiOY9ddFObzxjxdyEibG6zSvjMTm+1miRg447HjfNOCqFrudZ/vrOpk6hai/+TacmmG83UPjqoWk1mQlHcIxCSzerxptOiGEaOt25zjBGPhjHt1sg9bhqg/mnWDTYUNA25WxMDtFxX9r8OZFJjH/cU3MhTSEkgTmw+pYDawdJbPF4CwrO99app5xY82x/4nZD/1CHYcggE1gkepGw5LF2gaJsDHqtLVNHb/DKL8UWdMNohVPYTXIX5Q2oPvxqVyQefBBat15vf9levYWKLfMVQ4xCfCfbbCBzixUb8VKw7JM9tzArMqpkbM+lM","a6":0,"d1":"9f3b94a2f89b7830da8c16ed73e7419e83870877"}

没问题,就是他了, 收工回家

RPC调用前的准备

李老板:奋飞呀,友司都已经 996007 了,咱们起码不能6点就准时下班吧? 这样下去我下午和别的老板吹牛X的时候会被笑话的。

奋飞: 那好吧,你是老板,你说了算喽。 咱们6点01分下班,把公司门口的表调慢一分钟。以后你就是新时代的李扒皮了,够拉轰吧。

我们观察下 makeHeader 函数, 第一个参数是 byte[] 类型,第二个参数是枚举型。 用我们之前的 bytesToString 函数打印下

console.log("a=" + bytesToString(a));
console.log("b=" + b);
console.log(">>> rc=" + rc);

好的,没问题,入参清晰了。

a=GET /mop/entry/guideLayerEntry __reqTraceID=bf7c285b-f476-425d-805f-2c33abd974cb&ci=10&latlng=&model=MI%20NOTE%20Pro&msid=8673020214763141619572366484&userid=-1&utm_campaign=AgroupBgroupC0E0Ghomepage&utm_content=867302021476314&utm_medium=android&utm_source=wandoujia&utm_term=1100080206&uuid=00000000000002EE5C4ACB0554DCE9FFF3AB6EA7AA1740000000000000108337&version_name=11.8.206
b=FAST
>>> rc={"a0":"1.5","a1":"9b69f861-e054-4bc4-9daf-d36ae205ed3e","a2":"fc568f7eff071afdc5d12aaf0eeb9dc734fbed7a","a3":2,"a4":1619572653,"a5":"OgkiOY9ddFObzxjxdyEibG6zSvjMTm+1miRg447HjfNOCqFrudZ/vrOpk6hai/+TacmmG83UPjqoWk1mQlHcIxCSzerxptOiGEaOt25zjBGPhjHt1sg9bhqg/mnWDTYUNA25WxMDtFxX9r8OZFJjH/cU3MhTSEkgTmw+pYDawdJbPF4CwrO99app5xY82x/4nZD/1CHYcggE1gkepGw5LF2gaJsDHqtLVNHb/DKL8UWdMNohVPYTXIX5Q2oPvxqVyQefBBat15vf9levYWKLfMVQ4xCfCfbbCBzixUb8VKw7JM9tzArMqpkbM+lM","a6":0,"d1":"2d1d2f72034de8360ee6e21f29837e94d5254857"}

那么下一步就是构造个字符串,转成 byte[] ,然后调用下 makeHeader 不就OK了。

感觉有点麻烦,李老板这么坏,咱们得摸会鱼,前几天在清华公开课学的 摸鱼学导论 得用上,我们讲究学以致用。

var signCls = Java.use("com.meituan.android.common.mtguard.wtscore.plugin.sign.core.WTSign");
signCls.makeHeader.implementation = function(a,b){
        var rc = this.makeHeader(a,b);


        var StrCls = Java.use('java.lang.String');
        var OutStr = StrCls.$new("GET /mop/entry/guideLayerEntry __reqTraceID=bf7c285b-f476-425d-805f-2c33abd974cb&ci=10&latlng=&model=MI%20NOTE%20Pro&msid=8673020214763141619572366484&userid=-1&utm_campaign=AgroupBgroupC0E0Ghomepage&utm_content=867302021476314&utm_medium=android&utm_source=wandoujia&utm_term=1100080206&uuid=00000000000002EE5C4ACB0554DCE9FFF3AB6EA7AA1740000000000000108337&version_name=11.8.206");
        var myRc = this.makeHeader(OutStr.getBytes(),b);
        console.log("#### myRc=" + myRc);


        console.log("a=" + bytesToString(a));
        console.log("b=" + b);
        console.log(">>> rc=" + rc);

        return rc;
}

我们偷个懒,直接在Hook这个函数的时候,写死一个字符串值,然后 getBytes 转成 byte[] ,直接调用下看看结果:

#### myRc={"a0":"1.5","a1":"9b69f861-e054-4bc4-9daf-d36ae205ed3e","a2":"fc568f7eff071afdc5d12aaf0eeb9dc734fbed7a","a3":2,"a4":1619574692,"a5":"g/pDS/G/6rmL0K1YP94jPk7oWNSpEp+MuACRTKqTgl+oUG/rIn7XPv/bvLjNRK80rtInhRbJGKfrpXXqw3CLreUr7q0fGBQfrcGL15kJQ66OaVBkvlt3fH2WsqpgTanIKvGNmTtT4hfJfIe0y1JcbGA0xW0V69I6L3jBaCiE6E54HsNtGSaCAnBBn5jzRpe88vtx+MTB3FGdme/cLlHcDGTyBNP4tbKXseHLT2wvUrlLDYiWxAHYNkoREwtpKZns1xUyJRSl1EfvPE3R2Jo4/8OtEYlu9NiS6BJ9VRrH+nwKzW5VSDrXZmXXk55E","a6":0,"d1":"c5a9bf4c610171f14c20559dd34154ecb35ccfb3"}

结果证明:

  • 入参一致的情况下,a0 a1 a2 不变, a3 看上去像是时间戳, a5 和 d1的值不一样了。

后面我们不管是实际来RPC调用或者用unidbg来跑就心里有底了。

三、总结

大公司还是有大公司的特点,人家工资高,工作时间长,必然是要搞的复杂点。

然后就是分析的时候还是得多掌握几门手艺,先简单明了的验证下,再进行下一步。不要贸然写一堆代码下去,这年头代码这么贵,先打个草稿不香吗?

ffshow
1:ffshow

我认为,对世界的状态唉声叹气没什么意义,除非你能想到什么方式来改进它。否则,要么老实搬砖,要么去找个公园,躺着晒太阳吧。 ----海淀野生仁波切

100

关注微信公众号,最新技术干货实时推送

100

文章作者 奋飞

上次更新 2021-04-27

许可协议 奋飞安全原创,转载请注明出处。


文章来源: http://91fans.com.cn/post/mtgsigone/
如有侵权请联系:admin#unsafe.sh