買車報價APP sign分析
VSole2023-01-12 11:14:54
1、charles抓包圖

很明顯這里面要分析的就是這個p_sign,那么直接把APK扔jadx看看,果然沒那么簡單加殼了還是某數字企業殼,這下難度增高了、這里省略脫殼的步驟。數字企業殼懂得都懂不可能全部脫下來的只能用哪些類就脫哪些了,略微麻煩點。
2、尋找sign如何生成的
這里直接通過p_sign是很難搜索到對應代碼塊的,這里大概嘗試了N種方法都沒有找到有價值的信息。想著通過url的地址去找對應的發請求的位置是不是可以,于是通過搜索url路徑找到了一個類。


通過Hook AppUrlConstant類的getAPPDomain方法找到、然后打印堆棧信息找到跟這個方法相關的一些類,截圖如下:

那么接下來就從圖上這幾個類分析了,最終定位在BaseRequest這個類,在這個類里找到了我們需要分析的p_sign,下面的事情就簡單了看看它是怎么生成的了。


這是具體的加密方法,沒啥難度了。
frida hook下入參。

D291A30K cityid 430100 kw 寶馬X5 lat28.233212lon112.958713 p_appid price.android p_appversion7.4.5 p_chanel tecentmarket p_deviceid 0ac783fa_2b73_4185_871c_84c380da38d7 p_osversion 10 p_timestamp 1649402430107 type 0 D291A30K
基本上一目了然就是把appKey和請求參數加固定參數拼接起來做MD5運算,然后在對md5結果做一些處理。
frida代碼也貼上:
Java.perform(function(){ let AppUrlConstant = Java.use("com.cubic.choosecar.data.AppUrlConstant"); AppUrlConstant.getAPPDomain.implementation = function(){ console.log('getAPPDomain is called'); let ret = this.getAPPDomain(); console.log('getAPPDomain ret value is ' + ret); printStack(); return ret; }; let EncryptionHelper = Java.use("com.autohome.baojia.baojialib.tools.EncryptionHelper"); EncryptionHelper.md5s.overload('java.lang.String').implementation = function(str){ console.log('md5s is called str ',str); let ret = this.md5s(str); console.log('md5s ret value is ' + ret); return ret; }; })}function printStack() { Java.perform(function () { console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new())); });}function print(maps){ var JSONObject = Java.use("org.json.JSONObject") var result = JSONObject.$new(maps) console.log(result.toString())}setImmediate(main)
VSole
網絡安全專家