某box平臺演算法解析(wToken)

Kaiser6發表於2022-05-07

寫在前面:

本文僅限交流學習使用,請勿使用在任何非法商業活動,禁止用於非法用途。否則後果自負。如有侵權,請告知刪除,謝謝!


隨著元宇宙概念的興起,國內數字藏品市場也隨之發展起來,由於NFT的特性,因此,國內更多用“數字藏品”來表示。數字藏品交易平臺,是NFT數字藝術品交易的基礎設施,正在呈現出強勁的發展趨勢。


環境

  • windows10

  • Nexus 5X(已root)

  • jadx

  • BlackDex32

  • python3.7.2

  • frida 12.8.0

抓包

  • 以登入包為例,如下(可能包含個人資訊,部分內容已做刪減):

https://api-app.ibox.art/nft-mall-web/v1.1/nft/user/login
 
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-Hans-CN;q=1, en-CN;q=0.9
Connection: keep-alive
Content-Length: 45
Content-Type: application/json
Host: api-app.ibox.art
IB-APP-VERSION: 1.1.3
IB-DEVICE-ID: 1796j7e5-97e7-499f-b515-7fbb8fds12762
IB-PLATFORM-TYPE: ios
IB-TRANS-ID: ec465gh35-7ff7-42e6-bf82-c19sd46ge3bf_iOS
User-Agent: Box/1.1.3 (iPhone; iOS 15.3.1; Scale/2.00),BoxApp
wToken: e647_uxbnmgn1x3q4uKIl34OyAvHxRugJ0DSkK5nieNSTPtjRbXk5TCvBuN0IoZ/7q3T4GNMk8jK/++wDj4m7Jt8X1Xioyp/UQSoK++VT7EPzKVlUt2NXP4OZu4AZAWCKw+tgrBUdV8mWmzDhgnSK4pgN55dOsI/4Q+c0Tyc1WLD+MsoUgFF+wnzp3e++3AZvFlMS8wFfEF4mkEf/GRsZP3gEp4drE5n8vCQfv1LZ6AJ0w/rNnetE19ia3fSR+poqK97&b7ee_80691B702C79BA20B03FF244FS43FE7ACA9254090BD35B29B8A7
 
 
{"code": "000000","phoneNumber": "11111111111"}
  • 分析可見,請求體為明文,協議頭裡也僅有一個看起來較為複雜的wToken,本篇便以wToken為例,展開分析

反編譯

  • 這個案例app是有殼的,由於脫殼過程並不複雜,這裡就不過多敘述。

  • 將脫殼的檔案直接拖入jadx,等待反編譯完成,直接搜尋關鍵詞wToken即可找到如下程式碼塊:

某box平臺演算法解析(wToken)


  • 繼續跟進,程式碼如下:

某box平臺演算法解析(wToken)

  • 繼續往下跟進發現最終是呼叫了so檔案,好了,到此為此我們用frida來hook上面的d方法

  • 由於該app加殼了,不能直接用Java.use載入類,以下是我獲取類載入器以及使用的方法:

Java.perform(function () {
 
        var application = Java.use("android.app.Application");
        application.attach.overload('android.content.Context').implementation = function (context) {
            var result = this.attach(context); // 先執行原來的attach方法
            var classloader = context.getClassLoader(); // 獲取classloader
            Java.classFactory.loader = classloader;
            var RootCheckUtil = Java.classFactory.use("com.ibox.libs.common.utils.RootCheckUtil");
 
            
            //由於app檢測root環境後無法正常執行,hook該方法修改返回值即可解決
            RootCheckUtil.a.implementation = function () {
                return false;
            }
            RootCheckUtil.b.implementation = function () {
                return false;
            }
 
            AliTigerTallyManager.d.implementation = function (str) {
                var result = this.d(str);
                console.log("wToken: " + result);
                return result;
            }
 
        }
    }
);
  • 注入frida,執行成功,輸出如下資訊,發現與我們想要的資訊一致

某box平臺演算法解析(wToken)

  • 但是發注入frida輸出的wToken被風控,無法正常使用。

  • 已使用unidbg完美輸出,未觸發風控,感興趣可聯絡一起交流學習


相關文章