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

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

2025-1-12 16:13
38478
  • 前言

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

  • 抓包

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


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

用frida hook看下调用栈

var ins_C82880ba = Java.use("com.kuaishou.weapon.ks.ba");
ins_C82880ba.a.overload('java.lang.String', 'java.lang.String').implementation = function(a, b) {
    var ret = this.a(a, b)
    show_stacks()
    console.log(ret)
    return ret
}

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

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

var ins_okhttp = Java.use("okhttp3.OkHttpClient")
ins_okhttp.newCall.overload('okhttp3.Request').implementation = function(a) {
    console.log(a);
    //show_stacks()
    return this.newCall(a);
}
		
var ins_RealCall = Java.use("okhttp3.RealCall");
ins_RealCall.execute.overload().implementation = function() {
    //show_stacks()
    var ret = this.execute();
    console.log(ret.toString())
    return ret
}

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

  • 接口定位

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

一直往里面进

调用接口找到了

  • SO定位

直接搜索C0526k开始

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

  • SO去花

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

直接汇编先分析一下

.text:0000000000045854 ; jint JNI_OnLoad(JavaVM *vm, void *reserved)
.text:0000000000045854                 EXPORT JNI_OnLoad
.text:0000000000045854 JNI_OnLoad                              ; DATA XREF: LOAD:0000000000003AD0↑o
.text:0000000000045854
.text:0000000000045854 var_20          = -0x20
.text:0000000000045854 var_10          = -0x10
.text:0000000000045854 var_8           = -8
.text:0000000000045854
.text:0000000000045854                 STP        X0, X1, [SP,#-32]!	#sp开辟32个字节的空间,x0,x1入栈
.text:0000000000045858                 STP        X2, X30, [SP,#16]	#x2,x30入栈 栈从下往上依次是x0,x1,x2,x30
.text:000000000004585C                 ADR        X1, dword_4587C	# x1 = 0x4587c
.text:0000000000045860                 SUBS       X1, X1, #4		# x1 = 0x4587c-4->x1 = 0x45878
.text:0000000000045864                 MOV        X0, X1		# x0' = x1 -> x0' = 0x45877c
.text:0000000000045868                 ADDS       X0, X0, #0x34 ; '4'	# x0' = x0' + 0x34 -> x0' = 0x458ac 
.text:000000000004586C                 STR        X0, [SP,#24]		# [SP,#24] = x0' -> 栈从下往上依次是x0,x1,x2,x0'
.text:0000000000045870                 LDP        X2, X9, [SP,#16]	# x2 = [SP,#16],x9=[SP,#24] -> x2 = x2, x9=x0'
.text:0000000000045874                 LDP        X0, X1, [SP],#0x20	# x0 = [SP],x1=[SP,#8] -> x0 = x0,x1=x1 sp恢复栈平衡
.text:0000000000045878                 BR         X9		        # br  x0' -> br 0x4669c

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

收藏
免费 8
支持
分享
最新回复 (11)
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
向大佬学习
2025-1-12 16:21
0
雪    币: 226
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
学到了
2025-1-13 10:24
0
雪    币: 362
活跃值: (653)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
大佬牛逼,向大佬学习。
2025-1-17 13:59
0
雪    币: 84
活跃值: (2183)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
有相关附件吗?想实现一下
2025-1-22 22:12
0
雪    币: 496
活跃值: (490)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
bluegatar 有相关附件吗?想实现一下
私信给你了
2025-1-22 22:49
0
雪    币: 84
活跃值: (2183)
能力值: ( 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
雪    币: 686
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
HandsomeBro 私信给你了
大佬我也要
2025-1-24 16:24
0
雪    币: 733
活跃值: (859)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
bluegatar function hook_so() {    var base = Module.findBaseAddress("libkwsgmain ...

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

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

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

frida.InvalidOperationError: script is destroyed

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