tiktok逆向 四神算法寻找
承接上文,现在已经可以抓到包了,但是这只是开始,分析包发现,每个请求的协议头都有三个加密参数:X-Ladon、X-Gorgon、X-Argus,当然X-khronos是一个时间戳,和他们一起被大家称为四神,这些参数就是请求的风控参数。
先不直接分析,再去找文章看看别人怎么分析的,看了许多文章,确定了把app扒开靠搜索字符串是不可能找到蛛丝马迹的,而且这些字段的算法不会在java层计算。
突破点就在libsscronet.so, 推理一下,每个包都有这个些参数,说明计算有可能在请求时加上的,那就找到求的地方再反向寻找,这是思路,实话说我没找到。还是站在巨人的肩膀上直接找到了,借鉴这篇文章:https://blog.csdn.net/csdnMomBOOM/article/details/136439561,
文章里面的第二步说了特征位置,寻找比较困难可以使用相同版本,会更容易些。
这里引用一下大师的原文:
重点关注网络库libsscronet.so对libmetasec_ov.so的调用,这里应该是最直接调用加密算法的地方,成功定位到libsscronet.so 对 libmetasec.so中的加密函数的调用,最终sscronet调用metasec的地方,sscronet的0x37C294跳转x23方法,x23的地址为metasec的0x7C3D0。
sscronet中特征值"x-metasec-bypass-ttnet-features"和"Tt-Forbid-Reuse: 1"快速定位到BLR X23间接跳转的地址
第一个参数为url,第二个参数为header,返回值是最终的加密参数结果。
通过在大师指引定位到X23,再找到X23的被赋值的地方,

4dff68就是存储四神计算的入口,后面使用frida直接读取这个内存就知道libmetasec.so中具体的计算的地址了。
如图就是入口函数了:

框出来的三行代码比较特殊,可以跟着本版变化通过特征码搜索定位四神入口。
这个找不到可以去libmetasec.so中定位的调用点,从那里找也行,记录下特征码:E0 03 ?? AA E1 03 ?? AA ?? ?? 3F D6 ?? 03 00 AA
知道了libmetasec_ov.so地址,就可以直接从libmetasec_ov.so的入口调用四神方法了,特征码快速定位:00 E4 00 6F E0 03 00 91 41 00 80 52
编写脚本通过hook打印出来了加密参数,结果都是放在一起计算的,一次性都出来了。
短时间分析就不想了,先试试使用frida去调用,看看能不能正常返回,这个就下期在说吧。
浙公网安备 33010602011771号