-
-
[原创]2026 年腾讯游戏安全初赛 PC方向
-
发表于:
2026-4-14 02:42
3201
-
注:本人草台班子出身属于是那种可以整出效果但是文章过程一坨的 这里文章还要让ai帮我润色的,看了论坛大佬的文章也发现了一堆丢分的点只能说下次努力吧 ,答案以官方公布为准
这题第一眼看题面就知道不是单纯的用户态程序,真正有东西的是 `ShadowGateSys.sys`,而 `ShadowGateApp.exe` 更像一个控制台壳子,负责发指令、接回包、展示结果。
先从题面和字符串把外轮廓摸出来。很快能确定三个关键信息:
一是设备名是 `\\.\\ShadowGate`;二是控制台会创建多组命名 Event / Semaphore;三是初始化 IOCTL 会返回迷宫尺寸和起终点坐标。
因为驱动混淆挺重,直接静态啃 DeviceIoControl 分支会很慢,所以先用 Frida 把 App 挂起来,把 `CreateFileW / CreateEventW / CreateSemaphoreW / DeviceIoControl` 全部打一遍日志。(这里就是第一个丢分点了连驱动都没有加载,直接就是用户态 hook 抓协议,然后离线模拟驱动逻辑直接恢复了迷宫和最终 flag)
这样做的好处是非常直接:哪几个对象被创建了、IOCTL 号是多少、初始化回包长什么样,一眼就能看出来。
最终抓到的核心协议是:`0x8001200C` 为初始化,`0x80012004` 为移动,`0x80012008` 为 reset。初始化返回 24 字节,也就是 6 个 `uint32`。真正的迷宫不是 16x16,而是 13x13,终点在 `(12,12)`。

图 1 协议抓取与初始化回包解析
题面说得很抽象,说系统表面没反馈,但每次 reset 后前五次成功移动会按固定顺序暴露五种漏洞。这个描述其实已经很像引导了:说明泄漏不是随机的,而是状态机。
先在用户态日志里把对象名字收集出来,再配合驱动模拟,把 move 分支一层层跑通。最后确认的五类泄漏顺序如下:
1. Event 泄漏;2.Semaphore 泄漏;3.TEB 写入泄漏;4.TEB/线程上下文读探测;5.PEB 读探测。
这里最坑的一点是,后面三类已经不是简单对象信号了,而是 attach 到用户进程后对 TEB / PEB 做读写,所以如果只盯着事件对象会漏掉一大半。

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