最近學習python的過程中,無意接觸到了AI平臺方篮,然后跟著學習了一下協(xié)議請求名秀。為了鞏固基礎(chǔ),嘗試著分析一款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請求:(為了安全趾访,關(guān)鍵名稱用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有一個嚴重的關(guān)鍵信息泄露,就是sign加密方法中的最后一行Log輸出捐友。使用了Android系統(tǒng)自帶的log類淫半,導(dǎo)致sign相關(guān)的信息泄露。
我們來看另一款app的協(xié)議請求中加密部分匣砖,其中x.b方法為md5加密科吭。是不是很眼熟。猴鲫。对人。
協(xié)議請求的特點決定了加密方式不會特別的復(fù)雜,所以對關(guān)鍵信息的隱藏就顯得格外重要拂共。java層的代碼很容易被反編譯牺弄,而將關(guān)鍵信息放在native中后,反編譯就不是那么容易了匣缘,因為需要破解者懂得匯編代碼猖闪。