首页
社区
课程
招聘
[原创] 48位 __NS_sig3 算法分析还原
发表于: 2023-12-23 12:51 10797

[原创] 48位 __NS_sig3 算法分析还原

2023-12-23 12:51
10797

众所周知该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数据的生成算法进行描述。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2023-12-25 14:15 被amwait编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (8)
雪    币: 6041
活跃值: (4970)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大佬,给个版本号
2023-12-23 19:02
0
雪    币: 156
活跃值: (2102)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
mb_rjdrqvpa 大佬,给个版本号
欢迎学习交流,版本号是11.11.10.34366
2023-12-23 19:20
0
雪    币: 3525
活跃值: (31011)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2023-12-23 22:49
1
雪    币: 19
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
大佬unidbg能跑起来吗,我的unidbg跑一半挂了,貌似是初始化函数没执行完导致有些全局变量的值不对
2023-12-24 14:43
0
雪    币: 2614
活跃值: (1722)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6

1

最后于 2024-9-14 16:12 被杨如画编辑 ,原因:
2023-12-25 23:39
1
雪    币: 2614
活跃值: (1722)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7

1

最后于 2024-9-14 16:12 被杨如画编辑 ,原因:
2023-12-25 23:39
0
雪    币: 156
活跃值: (2102)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
app版本是 11.11.10.34366
2023-12-26 09:58
0
雪    币: 19
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
感谢分享
2024-9-6 21:20
0
游客
登录 | 注册 方可回帖
返回
//