工作原理
deobf-all 作为调度器(Dispatcher),不会一次性加载全部 9 个子 skill,而是先分类、再按需加载,最大限度节省上下文空间和工具调用次数。执行契约
目标:每次调用不超过 5 次
read_skill,除非目标类型完全未知。
分步流程
Step 1: 分类(Triage)— 0–1 次工具调用
检查目标,确定:- 目标类型:原生二进制 / JavaScript / 字节码 / 其他
- 混淆家族:CFF、VM 保护、字符串加密、加壳、JS 混淆器
- 是否有反调试 / 反逆向层
- 上下文:CTF 挑战?生产分析?快速清理?
TRIAGE: native PE, VMProtect, has anti-debug → P0:code-obfuscation-deobfuscation P1:vm-and-bytecode-reverse,anti-debugging-techniques
Step 2: 加载 P0 — 1–2 次工具调用
根据分类结果加载核心 skill:- 原生二进制 →
read_skillcode-obfuscation-deobfuscation - JavaScript →
read_skillast-deobfuscation
Step 3: 按需加载 P1/P2 — 0–3 次工具调用
仅当路由矩阵标记 ✓ 时才加载。空单元格的 skill 不要加载。Step 4: 反混淆(Deobfuscate)
- 优先静态:模式匹配、CFF 还原、字符串解密、dispatcher 内联
- 受阻时切换动态:调试器脚本、仿真、符号执行
- JavaScript:先运行
scripts/detect-patterns.js,再应用匹配的流水线 - 原生二进制:先识别保护器类型,再选择策略
Step 5: 验证(Validate)
- 将反混淆输出与原始特征对比
- 验证代码功能等价
- 检查是否有残余/嵌套混淆层
Fallback — 分类不确定时
如果检查后仍无法确定目标类型:read_skill加载deep-analysis(P2)- 遵循 deep-analysis 方法论对目标分类
- 回到路由矩阵,根据分类结果加载对应 P0/P1 skill