首页
社区
课程
招聘
[原创]2026 年腾讯游戏安全初赛 PC方向
发表于: 3小时前 55

[原创]2026 年腾讯游戏安全初赛 PC方向

3小时前
55

注:本人草台班子出身属于是那种可以整出效果但是文章过程一坨的 这里文章还要让ai帮我润色的,看了论坛大佬的文章也发现了一堆丢分的点只能说下次努力吧 ,答案以官方公布为准 


1. 开局先摸题

这题第一眼看题面就知道不是单纯的用户态程序,真正有东西的是 `ShadowGateSys.sys`,而 `ShadowGateApp.exe` 更像一个控制台壳子,负责发指令、接回包、展示结果。

先从题面和字符串把外轮廓摸出来。很快能确定三个关键信息:

一是设备名是 `\\.\\ShadowGate`;二是控制台会创建多组命名 Event / Semaphore;三是初始化 IOCTL 会返回迷宫尺寸和起终点坐标。


2. 先把协议抓出来

因为驱动混淆挺重,直接静态啃 DeviceIoControl 分支会很慢,所以先用 Frida 把 App 挂起来,把 `CreateFileW / CreateEventW / CreateSemaphoreW / DeviceIoControl` 全部打一遍日志。(这里就是第一个丢分点了连驱动都没有加载,直接就是用户态 hook 抓协议,然后离线模拟驱动逻辑直接恢复了迷宫和最终 flag)

这样做的好处是非常直接:哪几个对象被创建了、IOCTL 号是多少、初始化回包长什么样,一眼就能看出来。

最终抓到的核心协议是:`0x8001200C` 为初始化,`0x80012004` 为移动,`0x80012008` 为 reset。初始化返回 24 字节,也就是 6 个 `uint32`。真正的迷宫不是 16x16,而是 13x13,终点在 `(12,12)`。

 1  协议抓取与初始化回包解析

3. 五种隐藏泄漏怎么定位

题面说得很抽象,说系统表面没反馈,但每次 reset 后前五次成功移动会按固定顺序暴露五种漏洞。这个描述其实已经很像引导了:说明泄漏不是随机的,而是状态机。

先在用户态日志里把对象名字收集出来,再配合驱动模拟,把 move 分支一层层跑通。最后确认的五类泄漏顺序如下:

1. Event 泄漏;2.Semaphore 泄漏;3.TEB 写入泄漏;4.TEB/线程上下文读探测;5.PEB 读探测。

这里最坑的一点是,后面三类已经不是简单对象信号了,而是 attach 到用户进程后对 TEB / PEB 做读写,所以如果只盯着事件对象会漏掉一大半。


 2  reset 后前五次成功移动对应的五类泄漏

4. 迷宫怎么还原

这题真正难的是混淆,不是业务逻辑本身。把导入和几个时间种子 helper stub 掉以后,DriverEntry 和 DeviceIoControl 就能在用户态里跑起来。

驱动初始化完成之后,会在全局状态块前 169 个字节里留下一个 13x13 的二值网格。把它按行展开以后,`.` 代表可走,`#` 代表墙,完整迷宫就是文档里的截图。

这样子到这一步题目已经从『逆向 + 隐蔽泄漏』变成了一个标准最短路问题,剩下直接 BFS 不就解决了(对的我当时想的就是这么简单)。



 3  还原出的 13x13 迷宫与最短路径

5. 最短路和最终 flag

对迷宫做 BFS 后,最短路径长度是 `32`,路径串是 `DDDDDDSSDDDDWWDDSSSSSSSSAASSSSDD`。

当这条路径完整送进驱动以后,最后一次 move 的回包尾部会出现 `!NIW` 开头的字样。这个地方其实是在提示 `WIN!`,只是写进缓冲区时顺序反了一下。

继续从偏移 0x40 往后解,最后拿到的字符串就是 `flag{SHAD0WNT_HYPERVMX}`。

 4  终点回包与 flag 解码

关键结论

初始化回包:`0d000000 0d000000 00000000 00000000 0c000000 0c000000`

最短路径:`DDDDDDSSDDDDWWDDSSSSSSSSAASSSSDD`

最终 flag:`flag{SHAD0WNT_HYPERVMX}`


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

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回