首页
社区
课程
招聘
[原创]某书x-xx-mua算法分析
发表于: 2025-9-8 16:51 5308

[原创]某书x-xx-mua算法分析

2025-9-8 16:51
5308

新手没什么经验,花了很多天时间才定位到..
x-xx-s1的算法用了这个值,看来复杂很多

使用charles,
经过一段时间的瞎分析,最终发现使用 stringWithUTF8String: 可以找到最上层的入口, payload为NULL代表GET,否则是POST
图片描述

很明显关键就是sub_xx这个函数,但是这个函数加固了, 用了间接跳 + 块分裂,这就导致ida很难分析,全都是 br reg, ghidra可以通过patch instruction合并,但是看不习惯
图片描述
图片描述

到了这一步没有什么好办法,直接trace,由于所有请求都从这里来,最终经过对大量的汇编瞎几把分析,终于看到了这个
图片描述

根据堆栈最终可以定位到关键地方
图片描述

打印一下内容,看到 ey 开头,八九不离十了
图片描述

接下来要找到 ey字符串是如何生成的,其实就是个标准的base64,这里就不再验证了


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 2025-9-9 07:23 被just赋予编辑 ,原因:
收藏
免费 202
支持
分享
最新回复 (152)
雪    币: 2300
活跃值: (3945)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
6666
2025-9-8 16:54
0
雪    币: 359
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
佬牛逼
2025-9-8 18:13
0
雪    币: 294
活跃值: (610)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
666
2025-9-8 18:17
0
雪    币: 2357
活跃值: (2901)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
666
2025-9-8 19:02
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
感谢分享
2025-9-8 19:51
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
666
2025-9-8 20:09
0
雪    币: 2145
活跃值: (2005)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
学习大佬
2025-9-8 20:42
0
雪    币: 2422
活跃值: (4670)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
666
2025-9-8 21:50
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
111
2025-9-8 23:08
0
雪    币: 8622
活跃值: (6352)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
感谢分享
2025-9-9 00:36
0
雪    币: 309
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
366666
2025-9-9 00:54
0
雪    币: 1373
活跃值: (2095)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
tql
2025-9-9 02:20
0
雪    币: 51
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
tql
2025-9-9 08:32
0
雪    币: 104
活跃值: (7109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
tql
2025-9-9 09:12
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
tql
2025-9-9 09:37
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
感谢分享
2025-9-9 10:04
0
雪    币: 1762
活跃值: (1240)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
18
感谢
2025-9-9 10:22
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
1
2025-9-9 11:03
0
雪    币: 384
活跃值: (1316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20

对于 Chomper 调用,你说的遇到 std::string 崩溃,我怀疑是因为你没做初始化。如果你是从 TITiny::signWithMethod:url:payload: 调用的,那你需要先调用 TiTiny::initializeWithOptions: 进行初始化(当然,在进行初始化时,因为环境问题,需要 hook 绕过几个函数),如果初始化完成,TITiny::signWithMethod:url:payload: 应该会直接有结果不需要额外处理。


x-mini-s1 的话,它是一个 VMP 加密,但是反而有更好的调用点。也是一个初始化函数和一个加密入口,都是 C 函数,其中初始化函数不需要任何参数直接调用就行,加密入口实际上有 5 个参数(如果不是,那可能你找的位置并不是最终的入口),分别是:加密字符串、加密字符串长度、接收结果的缓存区指针、缓存区长度、接收结果实际长度的指针,构造好参数调用也是直接有结果(但还有一点要注意,x-mini-s1 的加密会依赖一个全局变量 sign_count,作用是记录加密次数)。

2025-9-9 11:44
1
雪    币: 204
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
666
2025-9-9 11:48
0
雪    币: 1006
活跃值: (898)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
sh4w 对于 Chomper 调用,你说的遇到 std::string 崩溃,我怀疑是因为你没做初始化。如果你是从 TITiny::signWithMethod:url:payload: 调用的,那你需要先调 ...
如果那两个16字节的全局变量算法就是随机数与私钥计算得来的且没其他妖蛾子,mua其实已经可以手搓实现了,s1的地址应该是对的,一共11个参数,4个字符串和一个接受结果的x8,大佬说s1是vmp我都想放弃了,注定trace不出结果,加密次数难道是STLXR这个指令对应的那个地址?看起来不太像..
2025-9-9 12:14
0
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
111
2025-9-9 12:26
0
雪    币: 4061
活跃值: (5857)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
24
1
2025-9-9 12:42
0
雪    币: 23
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
1
2025-9-9 12:45
0
游客
登录 | 注册 方可回帖
返回