記xhs算法的一次混淆還原分析

小紅書的so比較簡單, 安全程度和某音相比不是一個級別, 下面記錄一次xhs算法的一個簡單還原。

首先定位到算法關鍵位置。

通過分析,發現其實真是塊就四塊。 借鑑一下大佬的思路,虛假快對程序無影響,那麼我們可以在真是塊結束的位置,手動patch直接跳轉到真實塊,繞過虛假塊,比如b loc_5CF32指令,可以直接改成b loc_5cF02,類似的把真實塊連接起來,那麼問題來了,如何確認真實塊的執行順序,這裏我們藉助ida的trace功能,得到真實塊的so執行順序。

 我們就可以根據trace文件的內容手動還原。

未修復之前的f5 ,結果如下:

手動修復之後的f5 結果如下:

混淆已經被我們取出來,

最後把patch掉的so, 放到xhs apk上, 無報錯。 代表patch成功。

更新:針對這種情況,寫了一個腳本。 具體原理就是先得到函數的block,在通過特徵匹配得到虛假block,我們認爲不是虛假塊的就是真實塊(ps:死循環路徑需要特判), 再通過trace文件得到真實塊的執行順序,最後把它patch起來。

去混淆之後的cfg:

參考鏈接:https://bbs.pediy.com/thread-257878.htm

github:https://github.com/HCZHONG/xhsdeflat

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章