小紅書的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: