计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
re-ctf【效率与协作】CTF 实践网关。编排:题型识别 → 简单题直接 [[re-binary-core]] → 需自动化 [[re-angr]]/[[re-z3]] → 混淆 [[re-deobfuscate]]。 子技能:[[re-angr]] [[re-z3]] [[re-pwn]]、[[re-stego]]。 触发词:CTF、赛题、逆向题、pwn、babyre、自动解题、符号执行、angr、z3、solver、找flag。
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
按顺序执行;每步产物(题型结论 / 关键函数地址 / 约束模型 / flag)记录证据路径 + sha256(见 [[re-triage]](能力:triage)),供 writeup 引用。
crypto-identification) / [[re-crypto-decrypt]](能力:crypto-decryption),约束求解用 [[re-z3]](能力:constraint-solving)license-analysis) / [[re-keygen]](能力:license-analysis),硬推比较链用 [[re-z3]](能力:constraint-solving))debugging) / [[re-radare2]](能力:decompilation) 动态调试,运行在 [[re-sandbox]](能力:sandbox-setup))file / checksec / 熵 / strings([[re-triage]](能力:triage)),识别架构、是否带壳、是否静态链接decompilation、debugging、memory-dump、elf-parser、pe-parser、macho-parser) —— 题不需要自动化时,走通用分析(初勘 → 格式解析 → 反编译 → 调试):[[re-ghidra]](能力:decompilation、debugging) / [[re-ida]](能力:decompilation、debugging) / [[re-radare2]](能力:decompilation) 反编译主逻辑,人工还原出 flag / 注册算法。先估算复杂度:几行比较 / 简单 XOR 的题 15 分钟人工就够,上 angr 反而慢(见坑 2)symbolic-execution) / [[re-z3]](能力:constraint-solving):
symbolic-execution) 符号执行(符号化输入 → find 目标地址 → 求解)constraint-solving) 建模求解(比 angr 轻、快、稳)deobfuscation) —— 反编译产物有花指令 / 控制流平坦化 / 字符串加密:先还原再自动化。直接对混淆函数上 angr 会路径爆炸 / 解不出(见坑 3);[[re-deobfuscate]](能力:deobfuscation) 还原后回到第 2/3 步flag{...}(见坑 4:flag 格式 / 与求解结果一致性)threat-intel) 特征(如自动化解题特征)按题型特征 / 目标分支:
triage) 初勘 + 反编译扫一眼主逻辑,先人工判断(大多数简单题人工即可,别急着自动化)decompilation、debugging、memory-dump、elf-parser、pe-parser、macho-parser) 人工还原([[re-ghidra]](能力:decompilation、debugging) / [[re-radare2]](能力:decompilation)),或小规模约束直接 [[re-z3]](能力:constraint-solving) 建模symbolic-execution;符号化输入 + find 校验通过地址)constraint-solving;BitVec 建模 + solver 求解)symbolic-execution;符号化任意输入点,[[re-z3]](能力:constraint-solving) 需人工先定位变量来源)deobfuscation) 还原,再按题型走 angr / z3 / 人工(坑 3)unpack、deobfuscation、evasion-analysis;packer-id → unpack-*),脱壳后回本网关crypto-identification) 识别 → [[re-crypto-decrypt]](能力:crypto-decryption) 还原;自定义数学关系用 [[re-z3]](能力:constraint-solving) 求解exploit-development;漏洞利用入门:栈溢出 / 格式化字符串 / ret2libc)→ [[re-gdb]](能力:debugging) / [[re-radare2]](能力:decompilation) + [[re-sandbox]](能力:sandbox-setup) 动态调试(本网关以逆向题为主,pwn 作为相邻题型移交调试域)flag{...})、大小写 / 换行符 / 编码(ASCII 与宽字符)不一致,或输入长度固定需对齐;对策——用 [[re-gdb]] 断在打印处看实际输出;求解脚本按程序期望的输入通道(stdin / argv / 文件)与格式原样重放,沙箱内跑原程序验证main.pyc 只剩 sys.exit(0),题面提示却完全对不上;原因——真实逻辑不在入口脚本:可能藏在 runtime hook、冻结模块(_frozen 数组,如修改版 os 模块)、修改版 Python 运行库(重编译的 python313.dll)、bootloader 前置逻辑或运行时生成的 code object;对策——竞争假设 + 最小实验:假设 1=修改的冻结模块、假设 2=bootloader 前置逻辑,先执行成本最低区分度最高的实验(下载官方同版本 DLL 对比);冻结模块哈希差分:解析 PE 导出表读 _frozen 数组(code/size),marshal.loads 后与官方 29 个冻结模块逐一 SHA-256 对比,把 7MB 运行库压缩到单个 47KB marshal 对象;注意 marshal 格式与字节码版本强相关(必须用题目对应 Python 版本,如 3.13.1 的 magic)密文 ^ 明文 得 key 流,统计每个槽位覆盖次数(每个槽位 ≥2 次一致才可信);恢复后解密成功消息交叉验证