最近要做一些数据分析,所以来钻研一下快手的sig3参数的起源!
sig3参数的定位 入口
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.
hook sub_3E550函数看后果.
应用frida hook该函数,后果如下:
抓包的后果如下:
能够看到sub_3E550函数的返回值是sig3算法局部后果,并且该函数调用了两次,第一次是要加密的内容,第二次是一个base64的值。下一步开始还原该算法。
4、sub_3E550函数还原
sub_3e550函数局部片段如下:
点击dword_9e338查看
很显著这是sha256算法的常量表,该函数是sha256的变形。话不多说,开始调试。
用肉丝姐的反调试rom间接附加,胜利断下。
开始欢快的trace之旅。
通过框选区域发现,a3是来自a2.a办法,且str2通过上方代码得悉是sig签名后果,b2是一个url,然而执行了b()可能进行了一些解决,这里临时先不论b2数据是什么,先最终到最终a调用的中央。
最初依据trace文件胜利还原该算法。
除了ida trace之外还能够应用unicorn进行trace,集体认为unicorn trace的后果要比ida trace的后果好剖析一些。
持续跟进
5、sub_3FDA4 算法还原。
frida hook sub_3fda4后果如下:
能够看到,通过sha256算法的返回值在通过这个函数,把sub_3FDA4 函数的后果在通过base64之后在进行base64就是sig3算法的局部值。同样,trace之后进行还原。
这两个地位的值,是读取图片的数据之后加密取得的,具体没去跟,因为同一个版本这个值不会变所以dump出数据就行,有趣味的能够去跟下。至此sig3算法的局部还原实现。
6、残余局部算法还原。
sig3前面的局部曾经还原,但后面局部并没有, 通过一系列的查找,确定算法地位为sub_24404
与以后工夫戳异或一个值后进行进行加密。
3、算法验证
看下图 python源码 运行后果
计算sig3
计算sig 参数这个比较简单。
而后应用fiddler模仿申请胜利,出数据!功败垂成,至此 sig3和sig曾经全副搞定转了python源码。
花了大把工夫和精力曾经转了java和python源码。一起交流学习吧