最近上大学的妹妹跟我说要考英语四级,需要某度APP上每日跟读中的英语句子和翻译,手动一页一页的翻页着实是有点麻烦,所以就用技术改变生成效率。
步骤一:抓包
分析其中哪些参数是加密的,哪些是返回的,哪些是不变的。
多观察一下就发现很明显sign是一直变化的,时间戳也是变化的,lastId也是变化的。
直觉sign是个MD5的加密。目前还不知道情况,等下hook研究一下
步骤二:脱壳
APP有壳就脱,没壳就不脱。怎么差壳、脱壳我就不一一赘述了。
步骤三:Hook
壳都脱完了,接下来就是frida - Hook。
最开始我是想搜索一下sign,延续了JavaScript逆向的思路,先搜索再一步一步跟过去,锻炼一下自己Java语法的能力,but……sign确实是个高频词。我无奈的放弃了这个想法。
所以直接firda-hook MD5 的原生函数,观察,果不其然,被我发现了猫腻。
到这里一切就比较明朗了,把加密明文挨个拆解出来就行。
这里有个注意的点,就是我的代码打印我就喜欢把最开始一些感觉无用的删了,让打印台只留下当前的加密值和加密结果。如果加密值中不包含之前的加密结果还好,要是包含了之前的加密结果,那……重新再运行一次。
到这里一切加密参数就解完了,总体来说是一个很简单的APP,就这样吧,欧耶