Repository navigation
Releases: ip2867/ctf-re-tool
Release list
v1.7.3 — AI Agent 运行时 + 对话滚动修复 + 分组密码能力补齐
主要更新
一、AI Agent 运行时(借鉴 openclaude)
新增 electron/agent-runtime.js,解决长任务的三个核心痛点:上下文爆掉、原地打转、崩溃丢进度。
| 能力 | 机制 |
|---|---|
| 大输出落盘 | 60% 头 + 40% 尾预览(错误堆栈/flag 常在尾部),超 24k 字符写盘可回读 |
| 旧结果微压缩 | 保留最近 6 条;不清 is_error(错误是纠错依据) |
| 确定性上下文压缩 | 90k token 触发,抽硬事实(偏移/常量/骨架/已排除路线);熔断 3 次/冷却 5 分钟 |
| 连续调用拦截 | sha256(工具+完整入参) × 3 即拦 |
| 跨轮失败环 | 三键计数,第 2 次提醒、第 3 次判死;NoSymbol 给候选函数名 |
| 工具预检 | 错误必带"怎么改":路径不存在给相近文件 |
| 结构化经验检索 | 按题型特征词打分,零命中不注入 |
| 会话续跑 | JSONL + 剥离未完成 tool_use(不清洗会 400) |
| API 重试 | 5 次指数退避、429 上限 3、4xx 不重试 |
二、复查抓到的 4 个致命缺陷
| 缺陷 | 后果 |
|---|---|
预检/失败环伪造 tool_use_id |
API 400,整轮求解中断 |
needPath 错列 run_python/ida_decompile |
两个核心工具被判"缺 path"而拒绝 |
| IDA 参数名写错(function vs function_name) | IDA 工具永远无法通过预检 |
| 压缩切点落在 tool_result 上 | 对应 tool_use 被丢弃 → API 400 |
三、对话滚动修复
流式输出时每收到一个 token 就 scrollTop = scrollHeight,用户上滑一次立刻被拽回底部。改为 stick-to-bottom(距底 ≤48px 才跟随;滚轮上滑/PageUp/Home 立即脱离),新增"回到底部"按钮;日志面板同样受保护。
四、离线可用性
Font Awesome 全量本地化(约 1MB),CSP 收紧为 font-src 'self'。原来依赖 cdnjs,实测超时 16 秒导致 <link> 阻塞解析、页面卡在 loading——内网/离线环境会表现为启动卡死。
五、分组密码能力(v1.7.0–1.7.2)
crypto-tables.js:AES/SM4 全表知识库classifySbox():exact / XOR·ADD / GF(2) 仿射三级判定(高斯消元 + 回代验证)- S 盒非线性度(Walsh 谱):修正两处公式错误——旧实现把 AES/SM4 标准表也算成 -128
inferCipherStructure():SM4 / AES 骨架推理- 多骨架解密器:SM4 全组合枚举 + AES pycryptodome 主路径;DES/Blowfish 明确不支持
测试
25 个测试文件 / 13 道真实回归题 / 全绿。
安装包:CTF-RE-TOOL.exe 需本地 npm run build:exe 后上传(便携单文件)。
CTF-RE-TOOL v1.6.0 — 自主解题能力
核心转变:从"给 AI 喂结论"到"用数据验证假设"
v1.6.0 把工具从"辅助解题"推进到"自主解题"。四个阶段全部落地,并经过多轮真机实测验证。
一、载荷检测流水线(可插拔)
新增 PAYLOAD_DETECTORS 注册表,"找下一层载体"不再是单一公式:单字节 XOR/ADD × stride 1/2/4、
周期 XOR(2/3/4/8 字节,用 DOS stub 已知明文恢复密钥)、滚动 XOR/ADD、Base64/Hex 文本、ELF/DEX、裸 shellcode 序言。
新增形态只需注册一个函数,主流程/提示词/测试都不用改。
二、负面断言自动反证(本项目最重要的机制)
AI 说"没有第二载体 / 没有加密 / 真 flag 不在此文件"时,工具不再被动采信,而是用扫描数据反驳:
- 规则表:
no-second-carrier/no-crypto/no-decoding/no-vm/delegates-to-user - 只报确定性证据(偏移、长度、魔数),不用猜测反驳猜测
- 反证成立且本轮无 flag → 自动追加一轮 AI,把反驳当新一轮输入
delegates-to-user 专门拦截"请用户提供 stage2"这类把可自动完成的活推给人的结论。
三、假设—实验—反馈闭环
- 求解脚本输出
[FAIL]/[MISS]结构化行 → 自动归因为"算法错 / key 错 / 参数形态错 / 密文取错" rankAttempts()按信息增益排序候选(工具识别的算法优先、已排除组合降权)- 失败组合落盘
excluded_paths.json,下一轮提示词注入"已排除的路"
四、跨阶段自主接力
- 扫描到高置信度 PE/ELF/DEX 载荷且本层无算法指纹时,工具自动解码→写盘→校验魔数→接力
- 判据区分「载荷定位结论」与「算法指纹结论」
- 四段式交接包;层数上限 3→6
五、常量差分分析 + SM4 变体全组合解密
针对"AI 认出了算法却仍解不出"的实测问题(曾耗 345 秒 / 59 次工具调用未果):
analyzeCustomBlockConstants():比对 S 盒与标准表、定位轮常量表并算出精确差分
(如"该表 = 标准 SM4 CK 的每一字节都 +0x1")、给出 FK 候选与字节序线索buildSM4VariantDecryptScript():生成可执行脚本,枚举 密文候选 × FK 候选 × key 候选
× 8 种字节序 × 3 种块内排列,命中即退出- 工具直接执行该脚本,1.1 秒解出,不再消耗 AI 预算
能力边界(明确声明):脚本只覆盖 SM4 骨架。无 SM4 形态轮常量表时拒绝生成;
未命中时明确标注"不代表算法认错",避免 AI 误推翻正确结论。
六、修复真机暴露的 3 个通用缺陷
analysisData跨作用域引用(3 处)→ ReferenceError 吞掉整轮 AI 结果- "内嵌 PE/high" 被当作算法指纹 → 自动接力在每道 loader 题上失效
_inStageHandoff阻断多层接力 → 多层题只能剥一层
另修复两个解码 bug:ADD 编码方向写反;JS 模板里的 "\n" 劈开 Python 字符串。
七、测试与回归
- 16 个测试文件,全部通过
- 13 道真实赛题回归集(正例验证能力生效,负例验证不误伤)
- 能力边界 14 项断言(非 SM4 结构必须拒绝生成脚本)
- 新增
test_scope_safety.js:静态扫描跨作用域引用,防止同类 bug 复发
八、同步修复的遗漏
electron/preload.js的scanCryptoFingerprints桥接此前只在源码仓存在,现已同步- README 补上 v1.5.3 更新日志(此前遗漏)
下载:CTF-RE-TOOL.exe(单文件便携版,约 73 MB)
SHA256:0209f3ccc202496f0dfd512f70dd270d99c50d4b28856e0809f269957a2c7d9b
v1.5.1 — 修复消息路由误拦 + 全局中文输出
CTF-RE-TOOL v1.5.1
修复实战反馈的两个可用性问题。
一、消息路由宽泛关键词误拦(严重)
旧路由用 includes('工具') 做子串匹配——消息里只要出现「工具」二字(如"不要调用工具"),就直接返回固定文案并 return,AI 完全收不到消息。同类宽泛拦截共 13 处(输出/脚本/流程/反调试/签名 及 tea/aes/rc4/md5/apk/pe/elf 等)。
→ 全部改为精确匹配(整句命令 or 明确意图短语),自然语言提问一律交给 AI。
二、AI 输出中英混杂
AI 推理叙述常输出英文。
→ 在主进程请求构造处单点注入中文约束,100% 覆盖所有 AI 调用路径(聊天/Tool-Use/分级模型/复盘/题解)。代码、flag、路径、寄存器名保持原样不翻译。
下载
- CTF-RE-TOOL.exe(73MB portable)
- SHA256:
7FB826508EA4B478E6F09F332359F5C233551E4656F0C8947F1620279A272641
Full Changelog: v1.5.0...v1.5.1
v1.5.0 — CTF² 8 题实战打磨(验证闭环三修 + 新题型分流)
CTF-RE-TOOL v1.5.0
CTF² Agent Arena 真实解题 8/8 全解出后的实战打磨版:验证闭环三修、新题型分流、题目隔离。
验证闭环三修(custom 契约命中率 0/3 → 3/3)
- 调用形态自适应 — AI 常写单参 decrypt(target),旧脚本只按双参调用全灭;现按 inspect.signature 自动尝试五种调用形态
- expected 双向包含 — AI 截断的 flag 前缀不再全等必败
- printable() 剥协议头 — RC4 明文的控制字符封装头不再把 flag 埋进 hex
新题型分流
- detect-file-type 新增 XML / TXT 两类;新增 analyzeXMLText() 全文直读 + Tool-Use 求解
- OOXML(xlsx/docx/pptx)按 ZIP 容器解压;主文件按公式数主导打分(支持 Excel 公式逆向题)
平台/下载器加固
- 下载器目录碰撞自动改名(EISDIR 整轮中止 → 消除)
- 每题附件独立子目录 + 多附件主文件类型权重(防 AI 跨题读到历史残留)
- CTF² 自动解题流水线保留代码内,平台拉题按钮从 UI 移除
下载
- CTF-RE-TOOL.exe(73MB portable)
- SHA256: FEEDE65F8FD531F314FC2C3AF080E6E9602468DABA1D5551EE3A8C4311055F75
Full Changelog: v1.4.0...v1.5.0
CTF-RE-TOOL v1.4.0
CTF-RE-TOOL v1.4.0 — 修复 Frida Hook 证据被噪音淹没 / 降噪失效 / 经验跨阶段丢失
审查两次真实运行日志(一次 APK 自动解题、一次 Frida 动态 Hook)后,发现并修复三个真实缺陷。
一、Frida 输出"真证据被噪音挤出 AI 结论窗口"(高危,可能漏 flag)
Hook 输出回灌 AI 前,旧逻辑把 [DATA]/[FLAG] 真证据与 [HIT] 噪音混在一个池子里再 slice(-120)。而噪音(可达上百条)通常出现在真证据之后 → 尾部 120 条几乎全是噪音,真证据被整段丢弃。
本次实测复现:131 条关键行 = 2 条真证据 + 129 条噪音,slice(-120) 后真证据保留 0 条。
(这次 flag 没丢,是因为另有一条独立逻辑直接收割 [FLAG] 行兜底;但若 flag 只以 [DATA]/普通解密输出形式出现,就会彻底漏掉。)
修复:改为分级保留 —— 高价值行([DATA]/[FLAG]/flag 形态/加解密实参/SP 读写)全部保留、不参与截断;仅对 [HIT] 噪音限量(保留末尾 40 条作线索)。实测:真证据 ✅必留。
二、Frida String.equals 降噪形同虚设(129 条 [HIT] 全是误报)
两条根因:
- 关键词正则
/flag|ctf|key|secret|token|pass|stage/i命中了应用包名本身 —— 本题包名com.nctf.hookmysecret同时含ctf与secret,导致每条涉及包名的比较都被判"有意义"而刷屏; - 兜底规则"两串 ≥6 字且长度差 ≤2"太松,把
include==ViewStub、pathInterpolator==linearInterpolator、res/*.xml等框架/资源串全部放行。
修复:重写为"高熵优先 + 噪音形态黑名单"——
- 高熵串(flag 形态 / 长 hex / base64)先保留(
flag==flag这种最终校验不能被误杀); - 双方均为噪音形态(包名 / 资源路径 / 绝对路径 / 算法名 / 框架词)→ 排除;
- 语义词命中且非噪音形态才打印。
修复前后对比:129 条噪音 → 0 条(降噪 100%),5 个正例(flag、hex key、password 对)全部保留。
三、经验"跨阶段丢失"(前序暂存的经验永远进不了库)
一次 APK 解题里,阶段2(初步分析)AI 产出的经验被"暂存",阶段2.5(Tool-Use)解出 flag 后只入库了它自己那条 —— 阶段2 那条滞留在内存 pendingExperience,既不入库、也不持久化(关应用即丢)。且该暂存区从不随换题清空,会跨题残留。
修复:① 换题(加载新文件)时清空 pendingExperience;② 解题成功时把本题前序暂存的全部经验一并入库(含防御性去重)。实测:阶段2 暂存 1 条 + 阶段2.5 成功 1 条 → 库内 2 条、暂存清空、重复幂等。
验证
- 修复 #1:真证据必留 ✅(旧逻辑已丢,新旧对照复现)
- 修复 #2:降噪 128/128 = 100%;正例 5/5 全保留 ✅
- 修复 #3:经验接管与幂等 ✅
- 无回退:经验流 6/6、相似度判别 5/5、
finalizeSolve契约 2/2、求解路径审计 10/10 node --check:main.js/app.js/preload.js全过
下载:CTF-RE-TOOL.exe(Windows 便携单文件,双击即用)
适用范围:CTF 竞赛、授权渗透测试、自有系统的安全研究。
CTF-RE-TOOL v1.3.14(2026-10-14 汇总)
CTF-RE-TOOL v1.3.14 — 2026-10-14 当日汇总
本 Release 汇总 2026-10-14 当天的全部更新。当天原按里程碑分成了 v1.3.6 ~ v1.3.14 多次发布,现合并为一个版本,统一保留本页说明;其余同日 Release 已下线(仅保留最新安装包)。
下载即用最新构建,无需逐个版本看。
一、解题结构根治(v1.3.13 / v1.3.14)
"三件套"收口为单一入口 finalizeSolve()
过去"验证闭环"和"经验沉淀"是两步、散落在 9 个求解流程里各写一遍,于是反复出现"某条路径漏接"。现已收口:finalizeSolve(text, {source}) 一步内含「验证闭环 → 失败自动枚举 → 登记 flag → 解题成功则经验自动入库」,9 处全部改调它 —— 从结构上让"漏接"不可能发生。
5 类"只会指路"的入口改为真正解题
审计发现 .dex / .jar / .class / Mach-O / .luac 的处理器只有 15~24 行,只启动外部工具或打印一段指引,AI 完全不参与:
| 类型 | 旧行为 | 新行为 |
|---|---|---|
| DEX | 只启动 jadx | JEB MCP 采集类列表 + 关键类反编译 → AI 求解 → 验证闭环 |
| JAR / .class | 只启动 jadx | 同上(JEB 优先,不可用时降级 jadx 并明确告知) |
| Mach-O | 只打印文字 | IDA MCP 采集 → 二进制求解闭环 |
| .luac | 只打印文字 | 扫描明文串/长hex/base64/常量 → AI 求解 → 验证闭环 |
分流表 12/12 全部路由到真实求解器(ZIP 除外,其本就不是题目文件)。
修复跨文件 MCP 缓存泄漏(v1.3.14 复审发现)
analyzeJavaLike未清缓存 → 连解多题时上一题的类代码混进本次提示词;现入口先clearMcpCache()。state._keyClassesByContent(APK 内容命中筛查产物,用于把高价值类置顶)从不重置 → 会把上一题的类强行排到本题最前,挤掉真正的关键类;现并入clearMcpCache()重置。
二、经验与知识库"真正帮到解题"(v1.3.11 / v1.3.12)
经验机制:从"只暂存、要手动保存"改为解题成功自动入库;去重从"按整行(含日期)比对、换日必重复"改为与日期无关的内容级去重(精确 + 二元组相似度≥0.78 + 子串判定,阈值经真实样本双向校准,不误合并不同题);经验注入补全到所有求解路径。
题库攻略不再"存了没用":修复 wiki_search 解析 YAML meta 的正则 bug(m 标志令 $ 匹配行尾)—— 列表写法的 attack_chain/failed_attempts 曾被解析为空,43 篇题库仅 13 篇解法链可用。修复后 13 → 38 篇,检索摘要升级为 要点 + 解法链 + 避坑(失败教训)。
主路径自动预取:新增 prefetchKnowledge(),从已采集代码里探测算法/工具/混淆特征词,调用 AI 前主动检索题库并把攻略摘要内联进提示词(禁止调工具的固定清单路径由此也能拿到题库)。已覆盖 APK/PE/ELF、PYC、Web/JS、DEX/JAR、Lua。
三、PYC 逆向从"无解"到可用(v1.3.8)
- 多后端自动回退:配置的 pycdc → xdis/pydisasm → 原生 marshal+dis → 纯字节串扫描(永不空手)。
- 内置零依赖助手
electron/pyc_decompile.py:判定 Python 版本(3.4~3.13)、递归 dump 反汇编与常量、单列CONSTS表。 - 求解器兼容 PYC 高频写法:
xor单字节整数密钥(xor_key=199,此前被当b"199"三字节必解不出)、custom返回str/list[int]归一化。
四、验证闭环与动态 Hook 通用性(v1.3.6 / v1.3.7)
- 修复 IDA 采集 0 反编译(最严重):
window.electronApi拼写错 → TypeError 被空 catch 吞掉 → 一个 native 函数都拿不到;改正后实测反编译 0 → 19 个。 - 验证闭环不再"没契约就放弃":新增
synthesizeHypotheses()自合成候选矩阵(≤24 组)。 - AES/DES-CBC 缺 IV/给错 IV 不再必然失败(枚举全零/首块/前置 IV + 回退 ECB);口令 key 自动派生(MD5/SHA-256/零填充)。
- 动态 Hook 修复"抓到输出却报 0 条关键数据"、手动 Hook 自动驱动界面、枚举失败改按 PID attach、
String.equals降噪。 - 多候选密文交叉校验 + 自动裁决(IDA
xrefs_to判"哪条被校验函数引用"),防"变种题"陷阱。
五、重构引入问题的修复(v1.3.9 / v1.3.10)
- v1.3.9:验证闭环 7 处复制粘贴收敛为
verifyAndRecord()(纯重构,行为不变)。 - v1.3.10:修复该重构遗漏 ——
autoSolveFlag/autoSolveBinaryFlag只解构verifiedFlags却仍引用裸flags,导致ReferenceError: flags is not defined(AI 明明分析成功却报异常)。
下载:CTF-RE-TOOL.exe(Windows 便携单文件,双击即用)
适用范围:CTF 竞赛、授权渗透测试、自有系统的安全研究。
CTF-RE-TOOL v1.3.5
结构化知识库 + 解题成功率优化
知识库重构(结构化 + RAG 友好)
- 新增全局检索索引
wiki/AI-SEARCH-INDEX.md与速查表wiki/PAYLOAD-CHEATSHEET.md - 新增历年逆向题条目库
wiki/reverse/:44 篇纯逆向题(从 132 候选筛选、剔除 PWN/杂项),每题带attack_chain(解法链)/reasoning_chain(思维链)/failed_attempts(避坑)等 YAML meta - 修复结构化检索失效:
wiki_search此前只解析---front matter,而条目库把 meta 放在```yaml围栏里,导致 tags/attack_chain 加权完全失效;现兼容两种写法,并新增vuln_type/contest/difficulty加权 - 命中片段优先展示
one_liner+attack_chain,且保留原文大小写(防止把大小写敏感的 flag 小写化) - 系统提示瘦身:不再逐条列出 44 篇逆向条目路径(交给
wiki_search检索),每次请求省约 1.5k tokens
Frida 能力增强
- 吸收两大开源 Frida Hook 项目精华:RegisterNatives 拦截、JCE 通杀自吐、SSL pinning 绕过(Java + native)、脱壳、反检测
- 兜底模板注入题目情报(包名/类名/native 方法/算法特征)做针对性 Hook,不再是固定模板
AI 解题流程优化
- APK/PE/ELF 深度求解改为四阶段流水线提示词:①收集代码+数据 → ②定位算法 → ③写脚本本地验证 → ④出结论
- AI 脚本语法错自动重新生成 2 轮
环境自愈
- frida client/server 版本一致性自检、双 adb 互杀重连、装 APK 前 package 服务就绪轮询、GUI 窗口可见性修复(IDA/JEB/Nox)
隐私与安全
- 移除源码/文档中硬编码的私有 AI 中转地址(Base URL 默认留空,未配置时明确报错)
git-filter-repo抹除历史中的私有域名与本机路径- 清理构建残留与一次性调试脚本
修复
wikiSearch结构化 meta 解析失效(见上)baseUrl为空时由Invalid URL改为明确的中文配置提示
下载:CTF-RE-TOOL.exe(Windows 便携单文件,双击即用)
适用范围:CTF 竞赛、授权渗透测试、自有系统的安全研究。
CTF-RE-TOOL v1.3.4
CTF-RE-TOOL v1.3.4 — 首个公开版本
便携单文件 exe,下载后双击即用(Windows 10/11,无需安装)。
功能
- 文件类型自动识别(APK / PE / ELF / DEX / PYC / JAR / WASM 等)
- 一键调用逆向工具(IDA / DIE / JEB / jadx / UPX / apktool / pycdc)
- Frida 自动 Hook,支持进程内解密直接出 flag
- 解密脚本生成 + 验证闭环([VERIFY] / [HYPOTHESES] 契约)
- 内置 11 个逆向方法论技能 + 可检索知识库(Frida 专题、固件解包与仿真)
- MCP 实时集成:IDA / JEB / Burp / 浏览器
适用于 CTF 竞赛、授权渗透测试与自有系统的安全研究。