首页
社区
课程
招聘
8
[分享]某短视频平台最新sig3字段算法分析(一)
发表于: 2025-1-12 16:13 49042

[分享]某短视频平台最新sig3字段算法分析(一)

2025-1-12 16:13
49042

最近看到手里的某短视频APP来了兴致,特意拿来分析记录下,整个系列文章大概分为抓包,java层分析,so定位,so去花,unidbg,算法还原等几个部分,这几篇文章会记录下我的整个调试过程,前面的文章会比较基础,入门级玩家基本可以略过了,因为考虑到文章的连续性我这边还是会记录发表下。

因为需要对关键字段的算法进行分析,所以个人习惯还是要先抓下协议看一下,先不管别的用BurpSuite抓个包出来看下


抓到后总体感觉进包速度跟APP的流量不太匹配,感觉大概率是走了其他协议。既然抓到的包里面有sign字段,就先从sign字段入手看下,

用frida hook看下调用栈

后面根据调用栈顺藤摸瓜分析就好,最后找到了发送函数发现跟okhttp有关

试着将okhttp的接口发送与接收接口打印一下看看

找到了__NS_sig3字段,这个是我们需要分析算法的字段,之前Burp Suite抓不到包的原因也出来了,走的是quic协议。

直接在代码搜索__NS_sig3进行定位

一直往里面进

调用接口找到了

直接搜索C0526k开始

至此,so与调用so的接口都确定下来了。

将定位到的lib文件导入IDA,f5之后发现 JNI_OnLoad出现jumpout了

直接汇编先分析一下

从注释基本都可以看出来,前期开栈到恢复栈,就弄了一堆花里胡哨的算了下绝对跳转地址,x0与x1未变化,也比较符合花指令的特性。只要把前面的垃圾指令nop掉,绝对跳转改成相对跳转即可。

先手动使用IDA插件Keypatch试一下,先nop掉垃圾指令。

在修改跳转指令为相对跳转

修改完需要导入patch到so中

重新用IDA打开按F5即可生效,但是一个个修改比较麻烦,还是需要用脚本根据特征码定位进行修改会比较方便,对比JNI_OnLoad与JNI_UnLoad就会发现特征码比较明显


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 8
支持
分享
赞赏记录
参与人
雪币
留言
时间
shutterbug
感谢你分享这么好的资源!
2025-3-19 14:53
东方玻璃
你的帖子非常有用,感谢分享!
2025-2-20 14:32
conlin
感谢你的积极参与,期待更多精彩内容!
2025-1-20 18:03
西贝巴巴
+1
感谢你的积极参与,期待更多精彩内容!
2025-1-16 15:29
mb_bppcorlj
+1
你的帖子非常有用,感谢分享!
2025-1-16 01:27
troublebao
感谢你的积极参与,期待更多精彩内容!
2025-1-13 23:18
Ram98
你的帖子非常有用,感谢分享!
2025-1-13 10:23
酒仙桥之虎
为你点赞!
2025-1-12 17:34
最新回复 (11)
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
向大佬学习
2025-1-12 16:21
0
雪    币: 226
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
学到了
2025-1-13 10:24
0
雪    币: 493
活跃值: (798)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
大佬牛逼,向大佬学习。
2025-1-17 13:59
0
雪    币: 143
活跃值: (2418)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
有相关附件吗?想实现一下
2025-1-22 22:12
0
雪    币: 507
活跃值: (530)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
bluegatar 有相关附件吗?想实现一下
私信给你了
2025-1-22 22:49
0
雪    币: 143
活跃值: (2418)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7

function hook_so() {    var base = Module.findBaseAddress("libkwsgmain.so");    if (base) {        var addr_doCommandNative = base.add(0x40cd4);        Interceptor.attach(addr_doCommandNative, {            onEnter: function (args) {                console.log("doCommandNative() args[2] = " + args[2])            }, onLeave: function (retval) {            }        })        var addr_gdbf = base.add(0x408a4);        Interceptor.attach(addr_gdbf, {            onEnter: function (args) {                console.log("gdbf() enter")            }, onLeave: function (retval) {            }        })        var addr_dcabk = base.add(0x40948);        Interceptor.attach(addr_dcabk, {            onEnter: function (args) {                console.log("dcabk() enter")            }, onLeave: function (retval) {            }        })        var addr_gdgi = base.add(0x403bc);        Interceptor.attach(addr_gdgi, {            onEnter: function (args) {                console.log("gdgi() enter")            }, onLeave: function (retval) {            }        })        var addr_gksf = base.add(0x407f0);        Interceptor.attach(addr_gksf, {            onEnter: function (args) {                console.log("gksf() enter")            }, onLeave: function (retval) {            }        })    } }




这个流程是如何得到的???求解

2025-1-24 13:38
0
雪    币: 519
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
HandsomeBro 私信给你了
大佬我也要
2025-1-24 16:24
0
雪    币: 733
活跃值: (934)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
bluegatar function hook_so() {    var base = Module.findBaseAddress("libkwsgmain ...

报错的同时也打印了jni注册流程,是因为这一句:

vm.setVerbose(true);    //打印日志

2025-1-24 19:54
0
雪    币: 143
活跃值: (2418)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
Conney 报错的同时也打印了jni注册流程,是因为这一句:vm.setVerbose(true);    //打印日志
多谢指导
2025-1-25 12:58
0
雪    币: 346
活跃值: (690)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11

frida.InvalidOperationError: script is destroyed

最后于 2025-1-31 02:10 被tubecityman编辑 ,原因:
2025-1-31 01:01
0
雪    币: 254
活跃值: (455)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
大佬我想要
2025-2-23 15:12
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册