四年参赛老兵报道了。。
题目描述
(1) 成功加载驱动并与之正确通信,理解题目基本机制,识别并排除干扰信息。需在 writeup 中说明分析过程。(满分1.5分)
(2) 发现「宫殿」系统的隐匿通信手段并编写可工作的检测工具,发现的手段种类越多、利用越完整,得分越高,需提交相关源码并在 writeup 中说明分析过程(满分5.0分)
(3) 探索出「宫殿」系统完整的迷宫墙壁布局,需提交迷宫地图和自动化探索脚本。(满分1.5分)
(4) 在还原的迷宫地图上求解起点到终点的最短路径。需提交求解算法和路径结果。(满分0.5分)
(5) 提交正确的 Flag 得 1.5 分;到达终点但未能正确解密得 0.5 分。(满分1.5分)
本篇分析按照 1->3->4->5->2 的顺序分析。
加载驱动并通信
首先分析 R3 程序,字符串大法好
直接就能看到一个驱动通信的设备:
\\.\ShadowGate
同时还看到两个全局事件:
Global\MazeMoveOK
Global\MazeMoveWall
信息获取完,直接看驱动程序,顺着 DriverEntry 找到关键逻辑,由于 sub_1400018A0 被 vm 了,所以它被识别为了 no return,取消掉就可以看清楚所有逻辑了。
具体通信设备就是 \\.\ShadowGate,开始分配了一个 0x1D8 大小的内存,指针保存在全局变量 P 中,tag 为 Maze。
往下翻可以发现驱动是通过 IRP 通信的
具体就是 R3 程序通过 DeviceIoControl 与驱动通信。
探索地图&求解最短路
查看 DeviceControl 函数,有三个控制码
经过逆向分析,猜测出 P 的结构。
0x00~0xA8
169B
13×13 迷宫网格(0=通行,1=墙壁)
偏移
大小
说明
0xAC~0xB3
当前坐标 (x, y)
0xB4~0xBB
其他状态
0xBC~0xBF
总移动计数(每次 checksum 通过的 IOCTL 递增)
0xC0
状态标志
0x1C0
SpinLock
0x1C8~0x1CF
调用进程 PID
0x1D0~0x1D7
调用线程 TID
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290794.htm
[原创]2026腾讯游戏安全PC初赛Writeup
389 浏览
2 回复
牛逼
还能这么搞