搞個大點的 某團購App mtgsig

1、目標

李老闆: 奮飛呀,最近更新的都是些小App,要不要分析個大點的?java

奮飛: 你是老闆,你說了算嘍。android

大公司果真大氣,人家簽名是一個字段,他直接一堆字段。安全

mtgsig 就是咱們今天的目標微信

2、步驟

Jadx搜索 「mtgsig」

結果app

public static final String MTG_SIG_HEADER = "mtgsig";

繼續Jadx MTG_SIG_HEADERide

找到了這個 makeHeader 函數函數

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;
}

跑起來ui

>>> 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"}

沒問題,就是他了, 收工回家this

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來跑就內心有底了。

3、總結

大公司仍是有大公司的特色,人家工資高,工做時間長,必然是要搞的複雜點。

而後就是分析的時候仍是得多掌握幾門手藝,先簡單明瞭的驗證下,再進行下一步。不要貿然寫一堆代碼下去,這年頭代碼這麼貴,先打個草稿不香嗎?

我認爲,對世界的狀態長吁短嘆沒什麼意義,除非你能想到什麼方式來改進它。不然,要麼老實搬磚,要麼去找個公園,躺着曬太陽吧。 ----海淀野生仁波切

TIP: 本文的目的只有一個就是學習更多的逆向技巧和思路,若是有人利用本文技術去進行非法商業獲取利益帶來的法律責任都是操做者本身承擔,和本文以及做者不要緊,本文涉及到的代碼項目能夠去 奮飛的朋友們 知識星球自取,歡迎加入知識星球一塊兒學習探討技術。有問題能夠加我wx: fenfei331 討論下。

關注微信公衆號 奮飛安全,最新技術乾貨實時推送

相關文章
相關標籤/搜索