Skip to content

CTF-RE-TOOL v1.4.0

Choose a tag to compare

@ip2867 ip2867 released this 14 Oct 11:20
· 55 commits to main since this release

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 等框架/资源串全部放行。

修复:重写为"高熵优先 + 噪音形态黑名单"——

  1. 高熵串(flag 形态 / 长 hex / base64)先保留(flag==flag 这种最终校验不能被误杀);
  2. 双方均为噪音形态(包名 / 资源路径 / 绝对路径 / 算法名 / 框架词)→ 排除;
  3. 语义词命中且非噪音形态才打印。

修复前后对比: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 竞赛、授权渗透测试、自有系统的安全研究。