記一次安卓小程式sign的逆向
記一次安卓小程式sign的逆向
最近因為疫情原因居家辦公了,而且任務量比較大,其餘的時間也都在學習,這次記錄一個前幾天遇到的一個特殊的sign值的逆向,之前寫的安卓測試技巧閱讀量還可以,可以看出大家對安卓測試還是比較感興趣,這次的sign逆向也跟安卓有關
1. 準備
微信公眾號:小惜滲透,歡迎大佬一起交流進步
首先拿到的是一個小程式(不是微信小程式),小程式在app裡面,並且目前沒有上架,而且就算是測試環境也需要用到特定的手機卡放到卡槽1的位置才可以,這就無形中給了很多阻礙
- 模擬器不行,因為要檢測卡槽
- 普通安卓裝置也不行,因為無法解決安卓7以上的證書問題
- 蘋果也不行,這個小程式也會檢測
- 同時app還會檢測root情況,如果是root手機,app會閃退
沒辦法只好拿出我祖傳的小米,然後刷了第三方RCE--TWRP
,然後進行卡刷,刷入Magisk,安了個MT管理器(用來移動證書,如果不懂看我之前安卓測試的文章),至此,證書問題解決,但是因為app會檢測root許可權,所以用Magisk隱藏對該應用隱藏root
如下圖所示,開啟Zygisk,然後重啟,然後在配置排除列表
中新增本次測試的app,即可,這樣它就檢測不到root了
2. 過程
在測試過程中,發現請求體為json,header中存在sign值,如果我改動請求體,會提示校驗錯誤,看來sign值是根據請求體來進行加密的,那麼我肯定要找到加密規則,不然的話基本上測不出來什麼東西
so,查殼
沒有,nice,直接將app拖入jadx,(下圖為模擬圖,真實app中沒這麼多東西),一看東西少之又少,然後簡單搜尋一下,沒找到任何有用的東西
這就難辦了,於是我轉回去查了一下歷史請求,發下一個可疑的請求
搞毛線,你請求zip幹嘛?然後我就訪問了這個地址拿到了這個zip檔案,解壓看看
後來我一想對啊,它是小程式啊,這個sign簽名可能不是app給加的,而是這個小程式自己加的,小程式如果想要在前端加簽名,那麼一定要有js檔案才對,那麼這不就找到了
然後開始分析,直接搜尋sign發現有41處,有點多,不過沒有關係,因為sign是在header裡面,而header一般定義的時候都是{aaa:bbb}
所以改變搜尋方式,縮小範圍
最後確定位置
接下來反推s
的值,就在上圖的上方還存在一些程式碼,如下
可以推測,Object(n["a"])是一個函式,而它的引數就是e,最後執行的結果賦值給了s,而這個e在上方還能看到data: e
的字樣,所以e應該為請求體,接下來只需要定位到Object(n["a"])這個函式即可
隨便再往上翻翻
直接搜這個5a6e,這個就很像了
這裡推薦一個網站,平時js逆向或者xss繞過的時候很有幫助https://jsrun.net/new,同樣的我利用這個網站將其還原,其中我們不知道這個i.a
是什麼,不過沒有關係,直接百度
這回應該知道是什麼了,就是CryptoJS,還原