论坛首页 CTF竞赛交流区 阅读主题

[原创]腾讯游戏安全竞赛2025复赛题解(加强版)

221 浏览 5 回复
#1 楼主 2026-06-01 21:08:54
由于去年很多分析的不到位的地方,故今年想详细分析一遍整体逻辑。


本篇帖子基于赛后复盘的角度去分析,相比之前发文会有更多详细且有理有据的逻辑分析,少很多暴力和猜测的结果(虽然一些部分还是需要靠猜),旨在真正学习其中的技术。
题目描述

(1)在intel CPU/64位Windows10系统上运行sys,成功加载驱动(0.5分)
(2)能在双机环境运行驱动并调试(1分)
(3)优化驱动中的耗时算法,并给出demo能快速计算得出正确的key(1分)
(4)分析并给出flag的计算执行流程(1.5分),能准确说明其串联逻辑(0.5分)
(5)正确解出flag(1分)
(6)该题目使用了一种外挂常用的隐藏手段,请给出多种检测方法,要求demo程序能在题目驱动运行的环境下进行精确检测,方法越多分数越高(3分)
(7)文档编写,详细描述解题过程,详述提供的解题程序的演示方法。做到清晰易懂,操作可以复现结果;编码工整风格优雅、注释详尽(1.5分)

加载驱动
开双机调试,加载,驱动直接蓝屏,不要慌。

先 .reload 加载符号,再 lm 列出所有模块。如果 NT 的符号没有加载上 lm 是列不出所有模块的,因为列模块的行为需要依赖 nt 的 pdb。

然后直接 dump 蓝屏的加载好的驱动,IDA 打开之后发现连 text 段都没有被正确映射。

但是去查看对应的内存肯定有,原因是题目加了 vmp 壳,它破坏了 PE 头,导致 IDA 按照错误的 section 去映射了文件内容,因此我们需要修一下。

可以看到,SizeOfRawData 值被置为 0 了,当该值被置 0 时,PE 文件认为这个 section 没有映射任何文件内存,因此需要修复这个 dump。
修 dump 的手段很简单:令所有节区的 section[i].PointerToRawData = section[i].VirtualAddress 且 section[i].SizeOfRawData = (section[i].Misc.VirtualSize + FileAlign - 1) & ~(FileAlign - 1)
这里的 FileAlgin 是 PE 的一个字段,通常是 0x200,把它对齐即可。
这里给出一下我修复的代码

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289853.htm
#2 2026-06-01 21:08:54
tql
#3 2026-06-01 21:08:54
tql
#4 2026-06-01 21:08:54
Make ctf great again!
#5 2026-06-01 21:08:54
不小心多发了,请巨佬帮我删个楼,对不起

最后于 2026-3-6 20:20
被n00bzx编辑

,原因:
#6 2026-06-01 21:08:54
又想打ctf了...

请登录后参与讨论

立即登录 注册账号