最近學習python的過程中,無意接觸到了AI平臺,然后跟著學習了一下協(xié)議請求。為了鞏固基礎,嘗試著分析一款app的協(xié)議請求。
首先抓包查看請求,通過分析接口請求,確定sign值即為加密參數(shù)。

接著,反編譯app,嘗試搜索一下請求接口。這里我們能很明顯的看到該app使用了retrofit2框架,請求都使用注解封裝了起來。

我們還是通過/search/list這個接口查找,來到參數(shù)賦值的方法。

經(jīng)過分析,我們可以知道獲取sign值的函數(shù)就是ap類的String a方法。

邏輯也非常簡單,一目了然。加密方法為:
sort排序所有不為空的參數(shù) + uuid + platformandroid + v + loginToken + 3542e676b4c80983f6131cdfe577ac9b(鹽)
例如圖一中的charles請求:(為了安全,關鍵名稱用xxx隱藏)
curl -H 'xxxuuid: 008796750803109' -H 'xxx。platform: android' -H 'xxxchannel: xiaomi' -H 'xxxv: 3.3' -H 'xxx。loginToken: e7683834|9146839|1f41cd472b09d614' -H 'xxx。deviceTrait: ' -H 'User-Agent: xxxapp/3.3(android;4.4.4)' -H 'Host: xxx' -H 'Cookie: xxxToken=xxx' --compressed 'xxx/search/list?size=[]&title=&typeId=0&catId=1&unionId=11&sortType=0&sortMode=1&page=0&limit=20&sign=c6ff18d0f3e97024f5b3718b431b5db2'
則最終需要加密的字符串為:(token用xxx隱藏)
catId1limit20loginTokenexxxpage0platformandroidsize[]sortMode1sortType0titletypeId0unionId11uuid008796750803109v3.33542e676b4c80983f6131cdfe577ac9b
md5一下:

可以看到最終md5加密的值即為sign值。c6ff18d0f3e97024f5b3718b431b5db2
這里不得不提的是,該app有一個嚴重的關鍵信息泄露,就是sign加密方法中的最后一行Log輸出。使用了Android系統(tǒng)自帶的log類,導致sign相關的信息泄露。
我們來看另一款app的協(xié)議請求中加密部分,其中x.b方法為md5加密。是不是很眼熟。。。

協(xié)議請求的特點決定了加密方式不會特別的復雜,所以對關鍵信息的隱藏就顯得格外重要。java層的代碼很容易被反編譯,而將關鍵信息放在native中后,反編譯就不是那么容易了,因為需要破解者懂得匯編代碼。