首页
社区
课程
招聘
[原创]unidbg读写跟踪还原X-Gorgon
发表于: 2025-2-14 15:20 10212

[原创]unidbg读写跟踪还原X-Gorgon

2025-2-14 15:20
10212

使用版本 33.2.5
mssdk提供给 libsscronet.so 网络库的接口地址是 0x88ee0
参数签名函数调用序列 0x88ee0 -> 0x87e48 -> 0x86d60 -> 0x6B14c
0x6B14c -> 0x6Db40 -> 0x73908-> 0x7d3f0 (X-Argus)
                              -> 0x73968 -> 0x7dd18(X-Ladons)
                                -> 0x73688 -> 0x811a8(X-Gorgon)
本文只分析X-Gorgon参数生成方式,关键加密函数位于0x7e530

1、unidbg读写跟踪

1
2
3
4
5
6
7
String traceFile = "C:\\Users\\Administrator\\Desktop\\tracecode.txt";
PrintStream traceStream = new PrintStream(new FileOutputStream(traceFile), true);
emulator.traceCode(module.base + 0x7e530, module.base + 0x807B4).setRedirect(traceStream); //追踪函数指令
traceStream = new PrintStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\traceread.txt"), true);
emulator.traceRead(0, 0xFFFFFFFF).setRedirect(traceStream);//追踪内存读
traceStream = new PrintStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\tracewrite.txt"), true);
emulator.traceWrite(0, 0xFFFFFFFF).setRedirect(traceStream);//追踪内存写

2、unidbg调用运行
运行后生成3个跟踪文件 tracecode.txt traceread.txt tracewrite.txt分别记录了函数0x7e530的执行指令,全局的内存读写记录。
输出X-Gorgon字符串:
8404e0a6000006292b2e51bf21d8e270474e655a4379e5d3f7f6

3、跟踪字符串生成过程
1)函数输入参数1:
0000: 12 B4 93 96 00 00 00 00 00 00 00 00 20 05 00 05    ............ ...
0010: 67 90 66 CC
分别是 md5(url_param) + md5(body) + sdk版本 + timestamp,共20字节

2)函数输入参数2:
buffer地址 0x4041a6e0

3)每个字节写入过程
从tracewrite.txt中提取地址 0x4041a6e0到 0x4041a6f9写入记录  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Memory WRITE at 0x4041a6e2, data size = 1, data value = 0xe0, PC=RX@0x405b03d0[libmetasec_ov.so]0x803d0, LR=unidbg@0x13
Memory WRITE at 0x4041a6e3, data size = 1, data value = 0xa6, PC=RX@0x405afbd4[libmetasec_ov.so]0x7fbd4, LR=RX@0x405af5c8[libmetasec_ov.so]0x7f5c8
  
Memory WRITE at 0x4041a6e4, data size = 1, data value = 0x00, PC=RX@0x4066742c[libmetasec_ov.so]0x13742c, LR=RX@0x405afd88[libmetasec_ov.so]0x7fd88
Memory WRITE at 0x4041a6e5, data size = 1, data value = 0x00, PC=RX@0x4066742c[libmetasec_ov.so]0x13742c, LR=RX@0x405afd88[libmetasec_ov.so]0x7fd88
  
Memory WRITE at 0x4041a6e6, data size = 1, data value = 0x06, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6e7, data size = 1, data value = 0x29, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6e8, data size = 1, data value = 0x2b, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6e9, data size = 1, data value = 0x2e, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6ea, data size = 1, data value = 0x51, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6eb, data size = 1, data value = 0xbf, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6ec, data size = 1, data value = 0x21, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6ed, data size = 1, data value = 0xd8, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6ee, data size = 1, data value = 0xe2, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6ef, data size = 1, data value = 0x70, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6f0, data size = 1, data value = 0x47, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6f1, data size = 1, data value = 0x4e, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6f2, data size = 1, data value = 0x65, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6f3, data size = 1, data value = 0x5a, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6f4, data size = 1, data value = 0x43, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6f5, data size = 1, data value = 0x79, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6f6, data size = 1, data value = 0xe5, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6f7, data size = 1, data value = 0xd3, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6f8, data size = 1, data value = 0xf7, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13
Memory WRITE at 0x4041a6f9, data size = 1, data value = 0xf6, PC=RX@0x405b04e8[libmetasec_ov.so]0x804e8, LR=unidbg@0x13

第1个字节 0x84,指令地址 0x81138,直接写入无需计算

1
2
3
4
5
6
.text:0000000000081124                 MOV             W8, #0x16
.text:0000000000081128                 MOV             W9, #0x4A
.text:000000000008112C                 MOV             W10, #0x84
.text:0000000000081130                 STRB            W8, [X19,#2]
.text:0000000000081134                 STRB            W9, [X19]             
.text:0000000000081138                 STRB            W10, [X20]       W10 = 0x84

第2字节 0x04,指令地址 0x805A4,直接写入无需计算

1
2
3
4
5
6
.text:0000000000080590                 LDR             X10, [X19,#0x28]
.text:0000000000080594                 MOV             W11, #4
.text:0000000000080598                 MOV             W12, #0xBB
.text:000000000008059C                 MOV             W13, #0x160
.text:00000000000805A0                 LDR             X10, [X10,#0x10]
.text:00000000000805A4                 STRB            W11, [X10,#1]     W11 = 0x04

第3字节 0xe0,指令地址 0x803d0

1
2
3
[libmetasec_ov.so 0x0803c8] [ad1d4039] 0x405b03c8"ldrb w13, [x13, #7]" x13=0xbfffdb70 => w13=0xe0            0xbfffdb77 加载
[libmetasec_ov.so 0x0803cc] [100a40f90x405b03cc"ldr x16, [x16, #0x10]" x16=0xbfffdf30 => x16=0x4041a6e0    取内存首地址
[libmetasec_ov.so 0x0803d0] [0d0a00390x405b03d0"strb w13, [x16, #2]" w13=0xe0 x16=0x4041a6e0 => w13=0xe0   写入 + 0x2 偏移

0xe0从地址 0xbfffdb77 读取
跟踪地址0xbfffdb77写入记录:

1
Memory WRITE at 0xbfffdb77, data size = 1, data value = 0xe0, PC=RX@0x405ae648[libmetasec_ov.so]0x7e648, LR=RX@0x405ae638[libmetasec_ov.so]0x7e638

地址 0xbfffdb77的值在 地址 0x7e648 处写入:

1
2
3
4
[libmetasec_ov.so 0x07e638] [e00a40f9] 0x405ae638"ldr x0, [x23, #0x10]" x23=0xbfffdf30 => x0=0x4041a6e0  X23是传入的string参数, X0是string对象的buffer地址,通过 malloc分配得到(可以当成随机数)
[libmetasec_ov.so 0x07e644] [087c48d30x405ae644"ubfx x8, x0, #8, #0x18" x8=0x4041a6e0 x0=0x4041a6e0 => x8=0x4041a6
[libmetasec_ov.so 0x07e648] [80721f380x405ae648"sturb w0, [x20, #-9]" w0=0x4041a6e0 x20=0xbfffdb80 => w0=0x4041a6e0  这里在 0xbfffdb77 写入 0xe0
[libmetasec_ov.so 0x07e64c] [88321f380x405ae64c"sturb w8, [x20, #-0xd]" w8=0x4041a6 x20=0xbfffdb80 => w8=0x4041a6    这里在 0xbfffdb73 写入 0xa0

第4字节 0xa6,指令地址 0x7fbd4

1
2
3
4
[libmetasec_ov.so 0x07fbc8] [692a42a90x405afbc8"ldp x9, x10, [x19, #0x20]" x9=0xaaa2 x10=0xe7700 x19=0xbfffdb90 => x9=0xbfffdb70 x10=0xbfffdf30
[libmetasec_ov.so 0x07fbcc] [290d40390x405afbcc"ldrb w9, [x9, #3]" x9=0xbfffdb70 => w9=0xa6                从地址 0xbfffdb73 加载一个字节 0xa0
[libmetasec_ov.so 0x07fbd0] [4a0940f90x405afbd0"ldr x10, [x10, #0x10]" x10=0xbfffdf30 => x10=0x4041a6e0
[libmetasec_ov.so 0x07fbd4] [490d00390x405afbd4"strb w9, [x10, #3]" w9=0xa6 x10=0x4041a6e0 => w9=0xa6      写入

第5和6字节 0x0000,指令地址0x13742c,初始化buffer为0后没有再写入

1
2
Memory WRITE at 0x4041a6e4, data size = 1, data value = 0x00, PC=RX@0x4066742c[libmetasec_ov.so]0x13742c, LR=RX@0x405afd88[libmetasec_ov.so]0x7fd88
Memory WRITE at 0x4041a6e5, data size = 1, data value = 0x00, PC=RX@0x4066742c[libmetasec_ov.so]0x13742c, LR=RX@0x405afd88[libmetasec_ov.so]0x7fd88

后20字节 0x06292b2e51bf21d8e270474e655a4379e5d3f7f6,指令地址 0x804e8。都是同一个地址,应该是在做加密运算。0x804e8 是最终写入地址,实际上有每个字节有3次写入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[17:49:07 930][libmetasec_ov.so 0x0804bc] [8df15f38] 0x405b04bc: "ldurb w13, [x12, #-1]" w13=0x18e x12=0x4041a6e7 => w13=0xb7  去除 0xb7
 
[17:49:07 930][libmetasec_ov.so 0x0804c0] [50040d0a] 0x405b04c0: "and w16, w2, w13, lsl #1" w2=0xffffffaa w13=0xb7 => w16=0x12a   运算
[17:49:07 931][libmetasec_ov.so 0x0804c4] [6d044d0a] 0x405b04c4: "and w13, w3, w13, lsr #1" w3=0x55 w13=0xb7 => w13=0x51
[17:49:07 931][libmetasec_ov.so 0x0804c8] [0d020d2a] 0x405b04c8: "orr w13, w16, w13" w16=0x12a w13=0x51 => w13=0x17b
[17:49:07 931][libmetasec_ov.so 0x0804cc] [b0751e53] 0x405b04cc: "lsl w16, w13, #2" w16=0x12a w13=0x17b => w16=0x5ec
[17:49:07 931][libmetasec_ov.so 0x0804d0] [8d084d0a] 0x405b04d0: "and w13, w4, w13, lsr #2" w4=0x33 w13=0x17b => w13=0x12
[17:49:07 931][libmetasec_ov.so 0x0804d4] [10761a12] 0x405b04d4: "and w16, w16, #0xffffffcf" w16=0x5ec => w16=0x5cc
[17:49:07 931][libmetasec_ov.so 0x0804d8] [0d020d2a] 0x405b04d8: "orr w13, w16, w13" w16=0x5cc w13=0x12 => w13=0x5de
[17:49:07 932][libmetasec_ov.so 0x0804dc] [b01d0453] 0x405b04dc: "ubfx w16, w13, #4, #4" w16=0x5cc w13=0x5de => w16=0xd
[17:49:07 932][libmetasec_ov.so 0x0804e0] [b06d1c33] 0x405b04e0: "bfi w16, w13, #4, #0x1c" w16=0xd w13=0x5de => w16=0x5ded
[17:49:07 932][libmetasec_ov.so 0x0804e4] [0d02084a] 0x405b04e4: "eor w13, w16, w8" w16=0x5ded w8=0xffffffeb => w13=0xffffa206
 
[17:49:07 932][libmetasec_ov.so 0x0804e8] [8df11f38] 0x405b04e8: "sturb w13, [x12, #-1]" w13=0xffffa206 x12=0x4041a6e7 => w13=0xffffa206 写入一个字节 0x06

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

最后于 2025-2-17 12:06 被CCTV果冻爽编辑 ,原因: 新增附件
上传的附件:
收藏
免费 112
支持
分享
最新回复 (116)
雪    币: 81
活跃值: (687)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2025-2-14 16:49
0
雪    币: 2105
活跃值: (1732)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
6666
2025-2-14 16:50
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
牛啊
2025-2-14 16:53
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
6666
2025-2-14 16:53
0
雪    币: 130
活跃值: (990)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
66
2025-2-14 16:54
0
雪    币: 725
活跃值: (5946)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习 学习
2025-2-14 16:55
0
雪    币: 29
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8

这个讨论对我很有帮助,谢谢!
2025-2-14 16:55
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
6666666
2025-2-14 16:56
0
雪    币: 420
活跃值: (280)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
666
2025-2-14 16:56
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
66666666666
2025-2-14 16:57
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
666666
2025-2-14 16:57
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
11
2025-2-14 16:57
0
雪    币: 24
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
666
2025-2-14 16:57
0
雪    币: 216
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
666
2025-2-14 16:57
0
雪    币: 218
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
888
2025-2-14 16:58
0
雪    币: 75
活跃值: (364)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
666
2025-2-14 16:59
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
666
2025-2-14 16:59
0
雪    币: 544
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
666
2025-2-14 16:59
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
666
2025-2-14 17:01
0
雪    币: 3136
活跃值: (1189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
666
2025-2-14 17:01
0
雪    币: 2691
活跃值: (3767)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
火钳刘明
2025-2-14 17:03
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
2025-2-14 17:03
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24
插眼
2025-2-14 17:03
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
火钳刘明
2025-2-14 17:03
0
游客
登录 | 注册 方可回帖
返回