Programming

面向 CTF 与安全分析的编程题

编写小型程序来转换数据、自动化调查,并解决难以手工完成的安全任务。

你将学到什么

  • 解析并转换证据数据
  • 将调查拆分为可验证步骤
  • 自动化重复的安全分析

编程挑战

共 47 题。

Programming难度 3

编程:多线程结果重组

`worker-results.jsonl` 在启动时由注入的 FLAG 生成。Base64 解码 result,用各 worker 的 SHA-1 XOR,再按 slot 连接。

Programming难度 3

编程:内存转储分析

`memory.img` 在启动时由注入的 FLAG 生成。提取 `ALLOC:0x4040` 的 little-endian 长度区域,并用 `MD5(heap-0x4040)` XOR 解密。

Programming难度 3

编程:已知明文密码分析

`known.txt` 与 `ciphertext.b64` 在启动时由注入的 FLAG 生成。请从已知明文推导重复 XOR 密钥流,再解密 RESULT。

Programming难度 3

编程:自定义协议

`protocol.bin` 在启动时由注入的 FLAG 生成。遍历带长度的 KINO frame,选择 type=3 的 payload 并用 `0x23` XOR 解密。

Programming难度 3

编程:图像隐写

`image.pgm` 在启动时由注入的 FLAG 生成。按 8 bit 一组读取像素 LSB,直至 NUL 终止符以恢复旗标。

Programming难度 4

高级 Python:执行自定义 VM 字节码

`program.kvm` 是自定义四寄存器 VM 的字节码。根据 README 的指令规格实现 Python 解释器,并恢复 VM 输出。

Programming难度 4

二进制修复:固件头与 CRC32

修复 `firmware.bin`:将 byte 0-3 写为 `KINO`,并把 byte 12 之后数据的 little-endian CRC32 写回 byte 8-11。将修复文件交给 `challenge.py`…

Programming难度 4

编程:C2 通信分析

`beacon.log` 在启动时由注入的 FLAG 生成。按 seq 连接 Base64 payload,并以 `beacon-v1` 的 SHA-256 前八字节重复 XOR 解密。

Programming难度 4

编程:缓冲区溢出崩溃报告分析

`crash-report.txt` 在启动时由注入的 FLAG 生成。选择 SIGSEGV 且匹配 fault_offset 的记录,用 `training-stack-canary` 密钥 XOR 解密…

Programming难度 4

编程:模糊测试结果分析

`fuzz-results.log` 在启动时由注入的 FLAG 生成。选择触发 SIGSEGV 的输入,并以 `BLAKE2s(fuzz-case-17)` XOR 解密。

Programming难度 4

编程:区块链事件重组

`blocks.json` 在启动时由注入的 FLAG 生成。筛选 `FlagFragment` 且 topic 为 `0xfeedface` 的事件,按 index 连接并十六进制解码。

Programming难度 4

编程:Rootkit 视图差异

`proc_ps.txt` 与 `proc_kernel.txt` 在启动时由注入的 FLAG 生成。比较两份进程视图的差异,并对隐藏 marker 做 ROT13 解码。

Programming难度 4

编程:异常检测

`requests.csv` 在启动时由注入的 FLAG 生成。请选出 signal 最大的记录,对其 payload 做 Base85 解码后 XOR 解密以恢复旗标。

Programming难度 4

编程:渗透测试框架

`findings.json` 在启动时由注入的 FLAG 生成。定位可达的 critical finding,反转其 `reversed_token` 以恢复旗标。

Programming难度 4

编程:异步扫描器

`scan.json` 在启动时由注入的 FLAG 生成。选择 `443/tcp` 为 open 的验证主机,将其 `review_fragments` 以十六进制解码来恢复旗标。

Programming难度 5

高级 Python:还原并发事件 DAG 因果关系

`events.jsonl` 混合了多个服务和 trace 的乱序事件。从标记的 auth.failed 事件出发,沿 parent 引用的因果 DAG,按逻辑时钟连接可达的 worker.decrypt 片段。

Programming难度 5

编程:APT 模拟

`timeline.jsonl` 在启动时由注入的 FLAG 生成。请筛选 exfiltration 事件,按 part 排列、反转 packet 后连接并作十六进制解码。

Programming难度 5

编程:AI 漏洞检测

`audit_samples.py` 在启动时由注入的 FLAG 生成。请用 AST 定位 `subprocess.run` 的 `shell=True`,并将 `review_token` 的十六进制片段还原为旗标。

Programming难度 5

编程:AWS 渗透测试

`cloud_inventory.json` 与 `approved.json` 在启动时由注入的 FLAG 生成。验证 forensic-reader 的 `s3:GetObject` 路径,并 URL-safe Base64 解码…

Programming难度 5

编程:IoT 固件解析

`firmware.bin` 在启动时由注入的 FLAG 生成。验证 KFW1 末尾 SHA-256 标签,解析 salt、长度与 payload 以恢复旗标。

Programming难度 5

编程:覆盖率引导模糊引擎

`coverage-queue.jsonl` 在启动时由注入的 FLAG 生成。按 offset 排列 Base64 input,并用 `SHA-256(edge-0x5e7)` XOR 解密以恢复旗标。

Programming难度 5

编程:零点击消息分析

`messages.ndjson` 在启动时由注入的 FLAG 生成。按 sequence 排列 payload_hex,以 `0x31` XOR 解密并连接。

Programming难度 5

编程:时序攻击数据分析

`timings.csv` 在启动时由注入的 FLAG 生成。对每个 position 选择 `median_us` 最大的 candidate,按位置连接以恢复旗标。