记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

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