当前位置: 首页 > 后端技术 > Java

快手__NS_sig3参数算法分析与研究学习过程的分析

时间:2023-04-01 17:11:54 Java

最近会做一些数据分析,所以研究一下快手的sig3参数来源吧!sig3参数Entry的定位1、Jni_Onload定位doCommandNative函数位置RegisterNatives函数位于sub_88F4。!sub_c060是doCommandNative。sub_c060函数初步研究。一开始看到sub_c060函数的时候,头皮发麻。ollvm混乱太乱太漂亮,导致ida和f5速度极慢。查找交叉引用,结合frida逐步确定目标函数。sub_c060->sub_26BB8->sub_3AE54->sub_3AAF8->sub_3F920->sub_3E550.hooksub_3E550函数看结果。使用fridahook这个函数,结果如下:抓包结果如下:可以看到sub_3E550函数的返回值是sig3算法的一部分结果函数被调用了两次,第一次是要加密的内容,第二次是一个base64值。下一步开始恢复算法。4、sub_3E550函数还原部分sub_3e550函数如下:点击dword_9e338查看。很明显这是sha256算法的常量表,这个函数是sha256的变形。话不多说,下面开始调试。用肉丝姐的反调试rom直接附上,成功断开。开启愉快的寻迹之旅。通过frame选择区发现a3来自a2.a方法,通过上面代码知道str2是sig签名的结果,b2是url,但是执行后可能会做一些处理b()。什么,先到最后调用a的地方结束。最后根据trace文件成功恢复算法。除了idatrace,unicorn也可以用于trace。个人觉得unicorntrace的结果比idatrace的结果更容易分析。继续跟进5.Sub_3FDA4算法还原。fridahooksub_3fda4的结果如下:可以看出,sha256算法的返回值是通过这个函数传递的,sub_3FDA4函数的结果是base64后base64是sig3算法的部分值。同样,跟踪后恢复。这两个位置的值是读取图片后加密数据得到的。具体细节我没有跟进,因为同一个版本的值是不会变的,直接dump一下数据。有兴趣的可以跟进。至此,sig3算法部分恢复完成。6.恢复其余算法。sig3后面的部分恢复了,但是前面的部分还没有。经过一系列查找,确定算法位置为sub_24404和当前时间戳异或一个值,然后加密。3.算法验证,见下图。python源码比较简单的就是计算sig参数的sig3计算。然后用fiddler模??拟请求成功,输出数据!大功告成,至此sig3和sig已经全部转入python源码。把java和python源码转过来,花费了很多时间和精力。让我们一起交流学习