首页
社区
课程
招聘
[原创]2026腾讯游戏安全竞赛pc端初赛 可复现的wp
发表于: 2026-4-13 13:52 2661

[原创]2026腾讯游戏安全竞赛pc端初赛 可复现的wp

2026-4-13 13:52
2661




目录

一、成功加载驱动并与之正确通信,理解题目基本机制

1.1题目基本机制

1.2驱动加载

二、隐匿通信手段总结

2.1命名事件泄漏

2.2命名信号量泄漏

2.3 TEB 字段泄漏

2.4 句柄属性泄漏

2.5 页属性泄漏

2.6完整脚本验证

附:详细分析见后文

三、探索迷宫

3.1驱动端静态分析

3.2驱动端动态分析

3.3 迷宫地图

四、求解路径

五、flag

六、详细分析(针对隐蔽通道的分析)

6.1三环程序静态分析

6.2三环程序动态分析

6.3驱动静态分析

6.4命名事件泄漏

6.5命名信号量泄漏

6.6 TEB 字段泄漏

6.7句柄属性泄漏

6.8页属性泄漏

七、脚本介绍

7.1 监控脚本

7.2 解密脚本

 


一、成功加载驱动并与之正确通信,理解题目基本机制

 

1.1题目基本机制

题目提供两个文件:

- `ShadowGateApp.exe`:用户态控制台程序(Ring3

- `ShadowGateSys.sys`:内核驱动(Ring0

系统由用户态控制台与内核驱动通信,驱动内部隐藏一个加密迷阵。表面上系统不给任何反馈,但存在 5 种隐蔽信息泄露通道。需要:发现泄露通道、还原迷宫、求解最短路径、提取 Flag

 

三环程序启动时打印的 Banner 明确提示:

"The system is not as silent as it seems. Five hidden flaws betray the result of every move... after each reset, the first five successful moves reveal each flaw exactly once, in a fixed order."

 

即:每次 reset 后,前 5 次成功移动会按固定顺序各触发一次泄漏事件。

 

1.2驱动加载

 修改系统日期,驱动可以打上过期签名,即可成功加载。

二、隐匿通信手段总结

动态分析得到关键泄漏操作API槽位

 

 

 

2.1命名事件泄漏

驱动通过 ZwOpenEvent / ZwSetEvent 操作命名事件,将移动结果编码到事件信号中。

 

2.2命名信号量泄漏

驱动通过 ObReferenceObjectByName + KeReleaseSemaphore 操作用户态预先创建的命名信号量,将结果编码到信号量计数变化中。

 

2.3 TEB 字段泄漏

驱动通过 PsGetThreadTeb 获取目标线程的 TEB,并直接写入 TEB+0x68,也就是 LastErrorValue,从而把结果写入用户态可读字段。

 

2.4 句柄属性泄漏

驱动读取 TEB+0x1748 中保存的用户态句柄,并调用

ZwSetInformationObject(ObjectHandleFlagInformation) 修改该句柄的 HandleAttributes

 

2.5 页属性泄漏

 

驱动修改imagebase+0x5000页的属性为PAGE_EXECUTE_READWRITE (0x40)

 

2.6完整脚本验证

脚本验证(monitor_shadowgate.py

 

五条泄漏的正确判断:

[0001] 23:05:35

  rule1 event : OK

[0002] 23:05:36

  rule2 sem   : A 0->1 (delta=+1) ; B 0->0 (delta=+0)

[0003] 23:05:37

  rule3 teb68 : 0x00000000 -> 0xC0DE0001(success)

[0004] 23:05:38

  rule4 slot  : 0x00000000000000A4 -> 0x00000000000000A4

  rule4 attr  : attr16=00 00 (none) -> attr16=00 01 (PROTECT_FROM_CLOSE)

[0005] 23:05:39

  rule5 prot  : 0x00000004 (PAGE_READWRITE) -> 0x00000040 (PAGE_EXECUTE_READWRITE)  

 

五条泄漏的错误判断:

 

rule1 event : WALL

rule2 sem   : A 5->5 (delta=+0) ; B 0->1 (delta=+1)

rule3 teb68 : 0xC0DE0001(success) -> 0xC0DE0000(wall)

rule4 attr  : attr16=00 01 (PROTECT_FROM_CLOSE) -> attr16=00 00 (none)

rule5 prot  : 0x00000040 (PAGE_EXECUTE_READWRITE) -> 0x00000004 (PAGE_READWRITE)

 

 

 

附:详细分析见后文

 

三、探索迷宫

 

 

3.1驱动端静态分析


 



看到了关键信息,申请了页,名为Maze”,猜测为迷宫存储的具体位置。

3.2驱动端动态分析

双机验证一下,


 

Windbg下断点,

bp nt!PnpCallDriverEntry+0x44

g

加载驱动

bp rax

g

成功到DriverEntry,对比IDA,成功断下。

 

Pool2 = (void *)ExAllocatePool2(64, 0x1D8, 'ezaM');下断点,

 

成功断下,然后执行单步走,rrax存储的值,继续执行,打开三环进行通信,windbg访问内存,得到如下图:

 

 

3.3 迷宫地图

00 00 00 00 00 00 00 01 00 00 00 00 00

01 01 01 01 01 01 00 01 01 01 00 01 00

00 00 00 00 00 01 00 00 00 00 00 01 00

00 01 01 01 00 01 01 01 01 01 01 01 00

00 01 00 00 00 00 00 00 00 00 00 01 00

00 01 00 01 00 01 01 01 01 01 00 01 00

00 01 00 01 00 01 00 00 00 01 00 01 00

00 01 00 01 01 01 00 01 00 01 01 01 00

00 01 00 00 00 00 00 01 00 01 00 00 00

00 01 01 01 01 01 01 01 00 01 00 01 01

00 00 00 01 00 00 00 01 00 01 00 01 00

01 01 00 01 00 01 00 01 00 01 00 01 00

00 00 00 00 00 01 00 01 00 00 00 00 00

 

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

 

 

四、求解路径

 

脚本:shortest_path.py

DDDDDD SS DDDD WW DD SSSS SSSS AA SSSS DD

五、flag

 

flag{SHAD0WNT_HYPERVMX}

 

 

六、详细分析(针对隐蔽通道的分析)

 

已知前五步,每一步都有一种隐蔽的通信方式,并且拿到了地图和flag(第三部分)。

6.1三环程序静态分析

ida_ida.inf_set_auto_enabled(False)  ida停止自动分析

 

 

主函数如上图;驱动通信:MessageByEvent();MessageByIOwhile循环,其他基本都是打印。

 


[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

最后于 2026-4-14 21:53 被h1111编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (5)
雪    币: 1016
活跃值: (170)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
我跑的是模拟执行全程没遇到蓝屏,跑出来的五类泄露分别是 1. Event 泄漏;2.Semaphore 泄漏;3.TEB 写入泄漏;4.TEB/线程上下文读探测;5.PEB 读探测
2026-4-14 01:41
0
雪    币: 422
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我是直接拿驱动里的地图的,第五步成功是将权限04->40,然后第六步失败给的反馈是40->04
2026-4-14 21:44
0
雪    币: 422
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
清野 我跑的是模拟执行全程没遇到蓝屏,跑出来的五类泄露分别是 1. Event 泄漏;2.Semaphore 泄漏;3.TEB 写入泄漏;4.TEB/线程上下文读探测;5.PEB 读探测[em_032]
还有佬,脚本能给一下吗,我复现学习一下
2026-4-14 21:46
0
雪    币: 422
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
清野 我跑的是模拟执行全程没遇到蓝屏,跑出来的五类泄露分别是 1. Event 泄漏;2.Semaphore 泄漏;3.TEB 写入泄漏;4.TEB/线程上下文读探测;5.PEB 读探测[em_032]
我是直接拿驱动里的地图的,第五步成功是将权限04->40,然后第六步失败给的反馈是40->04
2026-4-14 21:55
0
雪    币: 104
活跃值: (8407)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
tql
2026-4-15 11:50
0
游客
登录 | 注册 方可回帖
返回