ARTICLE · 1338433
2026数信杯CTF复盘:四道真题,从零讲给你听
工控取证 · APK 逆向 ·数据隐写 ·恶意软件分析
如果你刷到过“CTF 比赛”这个词,大概率会有点懵。CTF 的全称是 Capture The Flag(夺旗赛),是网络安全圈最常见的比赛形式:主办方把各种藏在数据、程序、流量里的秘密做成题目,选手的目标只有一个——找到那串以 flag{ 开头的答案字符串。找到了,这道题就算拿下。
而 WriteUp(解题报告),就是赛后把每道题“怎么找到答案”的过程写成文章。这篇就是 2026 数信杯比赛当日的复盘,覆盖工控流量取证、APK 逆向与密码学、医疗数据隐写、恶意软件分析四个方向,四道题全部解出;当天还有五道没做出来的题,也一并记在文末。
全文不假设你有任何安全背景,专业词出现时都会顺手解释,放心往下读。
先认识几个词,再往下看
抓包文件(pcapng):相当于把网络里跑的数据原样录下来的“录像带”,谁给谁发了什么、什么时候发的,全在里面。流量分析题的基本材料就是它。
MD5:一种常见的哈希算法,能把任意内容压缩成固定 32 位十六进制字符的“指纹”,内容改一个字符,指纹就完全变样。CTF 里常用它做最终答案的拼接校验。
逆向:拿到一个软件,不看它呈现给你的界面,而是把它拆开、研究内部代码逻辑。手机安装包(APK)和 Windows 程序都可以这样分析。
隐写:不加密、只藏匿——把秘密信息伪装进看起来完全正常的数据里,比如把一句话藏进心电图数值的细微变化中。
01|无人机黑匣子:从流量录像里揪出真凶
题目背景:一架无人机失控坠毁,残骸黑匣子里留有一份 pcapng 流量记录。你需要回答四个问题:真正操纵它的控制端 IP 是谁、它从哪儿起飞(起飞点经纬度)、原本计划袭击哪儿(目标经纬度)、精确机型是什么。答案按题目指定格式拼接,计算 32 位小写 MD5 提交。
第一步,过滤出 MAVLink 报文。MAVLink 是无人机行业最常用的通信协议,航点、姿态、“家”的位置等信息都靠它传输。解析这份流量,还能看到多个 FTP 归档会话。
第二步,找起飞点。协议里编号 242 的消息叫 HOME_POSITION,字面意思“家的位置”,正是起飞点坐标的来源。
第三步,找真凶。流量里有两个 IP 在发指令:192.168.33.1 发送的是正常巡航航点,还夹带一堆干扰用的 FTP 会话;而 198.51.100.77 发送的航点里,有一个高度为 0 的 WP10 航点——飞行高度压到 0,等于让它直接砸下去,这就是俯冲攻击指令。真正的控制端就是 198.51.100.77。
第四步,找机型。FTP 会话里混着一份 BIN 飞行日志,其中的 MODL 字段直接写着精确机型。
把控制端 IP、起飞点坐标、目标坐标、机型按格式拼接,计算 MD5,得到:
Flag:flag{8da6322c98ca561e11a877cc06e9a0f4}
坑在哪:题目故意塞了多个长得几乎一样的 FTP 归档会话当烟雾弹,顺着它们找控制端必被带偏。正确的锚点,是那个“高度为 0 的攻击航点”——谁发的攻击指令,谁才是真凶。
02|理赔助手 APK:藏在安装包里的数学题
题目背景:警方在一个叫“理赔助手”的安卓应用里,发现一段加密的机器人归档数据。解开它的材料被拆散在应用的多个资源文件里,而会话密钥藏在一道数学题背后——低密度 0/1 背包问题。
先用一句话解释背包问题:给你一堆固定的“物品重量”和一个目标总重量,问挑哪几件能恰好凑出目标。把密钥的每一位看成“挑或不挑”,所有挑法就构成一个 0/1 选择向量。本题从资源文件里提取出 64 个 160 位的背包权重,外加密钥派生参数(KDF)、ChaCha20 加密要用的 nonce(一次性随机数)和明文校验值。
坑一,目标值解析。目标总重量藏在 notice_template.bin 里,必须严格按照文件结构提取 21 字节载荷,拼成 165 位的目标值——多取或少取一个字节,背包都必然无解。
坑二,求解工具。这类背包要用格规约(LLL 算法)来解。我们构造了 65 维的 CJLOSS 嵌入格,一开始用 sympy 自带的 LLL 和手写实现,精度不够,算不出结果;换成 python-flint 的 fmpz_mat.lll() 后一次成功。同一个算法,库的强度决定成败。
解出选择向量后,由它生成密钥,经 SHA-256 校验,再用 ChaCha20(一种流加密算法)解开加密文件 robot_cache.dat。在明文里筛选同时满足 role=dispatcher、status=archived、risk=high 的唯一记录,Flag 就藏在它的 memo 字段里:
Flag:flag{knapsack_chacha20_bot_vault}
03|四元生命信号:监护仪数据里的隐形信件
题目背景:医院的物联网医疗平台(IoMT)截获一批远程生命监护回传数据,数据用的是 FHIR——医疗行业标准的电子病历数据格式,里面有心率、呼吸频率、血氧饱和度、体温、血压五项体征。蹊跷的是,每项数值都被限制在四个离散档位上。有人把信息编成四进制符号混进了监护数据,你要把它还原出来。
第一步,从抓包文件里提取 HTTP 响应体中的 FHIR Bundle,也就是一批监护记录。
第二步,逐项统计。心率、呼吸、血氧、体温全程纹丝不动,只有血压在四档之间跳:收缩压和舒张压各能取 4 个值,一组读数恰好对应 16 种组合,折成 4 个比特——半个字节。
第三步,直接按“档位对应数字”翻译,出来的全是乱码。说明档位值不是直接当数字用,中间隔着一层 GF(2) 线性混合。GF(2) 听着唬人,其实就是只在 0 和 1 之间做异或运算的代数系统。
第四步,破解映射。好在 Flag 开头的比特格式是已知的,拿它当约束去枚举所有可能的 4×4 线性映射,只有唯一一个能解出完整可读明文:输出的 4 个比特里,有的直接取自档位值的某一位,有的是收缩压与舒张压档位比特的异或组合(精确关系为 bit3=s1 异或 d0、bit2=s0、bit1=s0 异或 d1、bit0=d0)。
第五步,还原明文。84 组血压读数各贡献 4 个比特,两两拼成 1 字节,共 42 字节,正好是一段标准 UUID(通用唯一识别码):
Flag:flag{ea79aec5-8afc-4412-a617-de6e4c0404bf}
考点:真实信息只藏在血压的两个子项里,其余字段全是烟雾弹;档位和比特之间隔着一层可逆的异或混合,直接查表必翻车。
04|W64Time:给伪装的后门做全身体检
题目背景:Windows 系统里潜伏着一个恶意服务。系统自带的时间服务叫 W32Time,它给自己取名 W64Time——一字之差,用来鱼目混珠。题目要求把它查个底朝天:服务名、注册表路径、本体文件、凭据、启动参数、通信方式、指令码、超时值,全部答对后按格式拼接成 Flag。
分析思路是把服务 DLL(w64time.dll)放进分析工具,一边对照注册表路径 ControlSet001\Services\W64Time,一边读代码分支逻辑,逐项确认。
它把启动参数伪装成 svchost.exe -k TimeService,借 Windows 系统进程 svchost.exe 给自己打掩护;对外通信走 POST 请求,自定义 Header 字段名叫 Title;代码里硬编码的超时值是 60000 毫秒。最核心的是指令码表:0x1 创建进程、0x4 回传文件、0x3 下载落地、0x7 管道交互、0xB 重载 C2——C2 就是攻击者的指挥控制服务器,这份指令码就是后门的“遥控器说明书”。
所有分析项都做了交叉验证(注册表与代码两边对得上),字段按题目指定格式拼接即得 Flag。这一题此前曾被反馈“FLAG 错误”,最终拼接串未在报告里留档。做这类拼接题,字段顺序、大小写和分隔符务必严格照抄题目要求,一个字符都不能自由发挥。
05|当天没做出来的五道题
没解出来也是复盘的一部分。记录在这里,一方面诚实交代,另一方面它们本身就是一份不错的进阶学习清单:
HART-IP 网关数据外传(工控):化工厂 HART-IP 网关被植入外传逻辑,攻击者取地址 1/2/3 三台变送器,把 Command 9 变量状态字段的最高两位当作四进制符号,设备身份按地址顺序拼接后经 SHA-256 派生 128 位密钥,用 XTEA-CBC 加密。难在要从海量正常轮询、重传、损坏帧里,把被污染的回声信息捞出来。
T-Box 黑匣子 SOME/IP(车载):制动相关服务正常广播(Offer)后被注销(StopOffer),仍有端点冒用它发送 SOME/IP-TP 通知。要提取攻击 IP、VIN(车架号)、ECU 标识、车辆与目标坐标、恶意制动动作、压力、时长、ServiceID、MethodID 等十余个字段再拼 MD5,工程量不小。
物联网固件题:AT89C52 单片机加 24C02 EEPROM 的老式数据汇聚终端,要从固件、存储转储和串口会话里恢复协议与保护逻辑,找到唯一有效的维护操作,再解密 EEPROM 里的 flag。
Web 题《云梦的秘密》:考点是微信 bizmsgmenu 历史协议的 XXE 注入,即诱导服务端解析恶意 XML。当天完成了出题描述理解和模糊测试,但没拿到 flag。
Web 统一入口网关:文档中心、设施门户、供应商准入三处审查,加上 Jetty 服务器的已知漏洞 CVE-2025-41242(classpath 静态资源问题),多个 Payload(攻击载荷)都被拦截,未收敛。
写在最后
四道题复盘下来,套路高度一致:先搞懂题目所在领域的“语言”——无人机的 MAVLink、医疗的 FHIR、工控的 HART、车载的 SOME/IP;再从一堆正常数据里定位异常行为;最后用数学或代码工具完成还原。干扰项永远比考点多,而四道题共同的答案是:靠“谁做了异常动作”来定位,而不是靠“谁长得像”。
对零基础的读者,流量分析是最友好的入口:装一个 Wireshark(最常用的抓包分析工具),配一份公开数据集,就能把第一题的完整思路复现一遍。文末那五道没做出来的题,也欢迎照着上面的方向继续钻研。
















































































