1. 程式人生 > 其它 >記一次安卓小程式sign的逆向

記一次安卓小程式sign的逆向

image-20221204120030560

記一次安卓小程式sign的逆向

​ 最近因為疫情原因居家辦公了,而且任務量比較大,其餘的時間也都在學習,這次記錄一個前幾天遇到的一個特殊的sign值的逆向,之前寫的安卓測試技巧閱讀量還可以,可以看出大家對安卓測試還是比較感興趣,這次的sign逆向也跟安卓有關

1. 準備

微信公眾號:小惜滲透,歡迎大佬一起交流進步

​ 首先拿到的是一個小程式(不是微信小程式),小程式在app裡面,並且目前沒有上架,而且就算是測試環境也需要用到特定的手機卡放到卡槽1的位置才可以,這就無形中給了很多阻礙

  1. 模擬器不行,因為要檢測卡槽
  2. 普通安卓裝置也不行,因為無法解決安卓7以上的證書問題
  3. 蘋果也不行,這個小程式也會檢測
  4. 同時app還會檢測root情況,如果是root手機,app會閃退

沒辦法只好拿出我祖傳的小米,然後刷了第三方RCE--TWRP,然後進行卡刷,刷入Magisk,安了個MT管理器(用來移動證書,如果不懂看我之前安卓測試的文章),至此,證書問題解決,但是因為app會檢測root許可權,所以用Magisk隱藏對該應用隱藏root

如下圖所示,開啟Zygisk,然後重啟,然後在配置排除列表中新增本次測試的app,即可,這樣它就檢測不到root了

image-20221204110702413

2. 過程

在測試過程中,發現請求體為json,header中存在sign值,如果我改動請求體,會提示校驗錯誤,看來sign值是根據請求體來進行加密的,那麼我肯定要找到加密規則,不然的話基本上測不出來什麼東西

so,查殼

image-20221204111135641

沒有,nice,直接將app拖入jadx,(下圖為模擬圖,真實app中沒這麼多東西),一看東西少之又少,然後簡單搜尋一下,沒找到任何有用的東西

image-20221204111307767

這就難辦了,於是我轉回去查了一下歷史請求,發下一個可疑的請求

image-20221204111530493

搞毛線,你請求zip幹嘛?然後我就訪問了這個地址拿到了這個zip檔案,解壓看看

image-20221204111657361

後來我一想對啊,它是小程式啊,這個sign簽名可能不是app給加的,而是這個小程式自己加的,小程式如果想要在前端加簽名,那麼一定要有js檔案才對,那麼這不就找到了

然後開始分析,直接搜尋sign發現有41處,有點多,不過沒有關係,因為sign是在header裡面,而header一般定義的時候都是{aaa:bbb}

image-20221204111838642

所以改變搜尋方式,縮小範圍

image-20221204112018492

最後確定位置

image-20221204112058108

接下來反推s的值,就在上圖的上方還存在一些程式碼,如下

image-20221204112212017

可以推測,Object(n["a"])是一個函式,而它的引數就是e,最後執行的結果賦值給了s,而這個e在上方還能看到data: e的字樣,所以e應該為請求體,接下來只需要定位到Object(n["a"])這個函式即可

隨便再往上翻翻

image-20221204114317862

直接搜這個5a6e,這個就很像了

image-20221204114404640

這裡推薦一個網站,平時js逆向或者xss繞過的時候很有幫助https://jsrun.net/new,同樣的我利用這個網站將其還原,其中我們不知道這個i.a是什麼,不過沒有關係,直接百度

image-20221204114604218

這回應該知道是什麼了,就是CryptoJS,還原

image-20221204115148592