-
-
[原创] 48位 __NS_sig3 算法分析还原
-
发表于:
2023-12-23 12:51
10592
-
[原创] 48位 __NS_sig3 算法分析还原
众所周知该app请求头中有个sig3算法。该算法的主要实现在libksgmain.so中,在java层通过JNICLibrary类中的doCommandNative方法进行调用,从而计算出sig3值。本次分析的app版本是 11.11.10.34366
该so用到了跳转表来计算函数的真实地址,在分析之前需要对so去花处理。这里不再赘述,感兴趣的读者可以参考我之前的文章理解其花指令修复。
https://bbs.kanxue.com/thread-278103.htm
用unidbg跑一下,可以快速定位到doCommandNative函数地址在0x46435,doCommandNative函数根据java层传入的指令号,执行相应的逻辑,hook 可以发现sig3对应的指令序号在10418。
那么我们主要关注的地方是该case分支,如下图,是该case分支的一部分。
hook一下sub_41594函数,发现第二个参数的前24个字节就是最后的sig3值。
继续向上查看v496(sig3)值的生成。
在for循环中 v496 和 v156进行异或处理,才是最终的sig3,而v156是在do while循环中计算出来的,可以看出v156的结果是v496前23个字节的和。基于上述分析,我们可以hook出未进行异或之前的sig3值,也就是v496.
在适当的位置hook拦截一下未进行异或之前的v496值,如下图所示。
通过多次hook分析发现,v496的数据组成如上图,其中最复杂的是数据e0c281e3数据的生成。
下一小节,将对e0c281e3数据的生成算法进行描述。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2023-12-25 14:15
被amwait编辑
,原因: