乐趣区

关于java:分析快手NSsig3参数算法分析研究学习过程

最近要做一些数据分析,所以来钻研一下快手的 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 源码。一起交流学习吧

退出移动版