diff --git a/RULES.md b/RULES.md index 2190985..b319a4a 100644 --- a/RULES.md +++ b/RULES.md @@ -216,6 +216,8 @@ After task completion (vulnerability verified / reverse complete / flag captured | "Task is basically done, don't need checklist" | **Task completion = ALL Checklist items checked.** Unchecked checklist = task NOT complete. | | "I'll reply to user first, continue after confirmation" | **Don't wait for confirmation on deterministic steps.** Execute while informing user. Only pause at genuine decision points. | | "I understand the rules, please tell me your task" | **This is the WORST failure mode.** Correct behavior: proactively match user intent to routing table, output analysis, start executing. | +| "User asked to redo import-table / step X, but I did something else more useful" | **Redo = redo the named step.** When user asks to redo X (e.g. import table check), MUST re-execute X and refresh its Evidence. FORBIDDEN to substitute another step or silently skip X. | + --- diff --git a/RULES_zh.md b/RULES_zh.md index 38e46e8..1fc2438 100644 --- a/RULES_zh.md +++ b/RULES_zh.md @@ -315,6 +315,8 @@ AI Agent 在遇到阻力时会自动生成"合理借口"来跳过步骤。以下 | "这个太简单了不需要记录 journal" | **简单任务也有踩坑价值。** 至少记录:目标类型 + 用了什么 + 有无意外。一行也行,但必须写。 | | "我先回复用户,等用户确认后再继续" | **不需要等确认。** 如果路由已明确且下一步是确定性的(如安装工具、读取文件),直接执行同时告知用户。不要在每一步都等用户点头。 | | "我理解了规则,请告诉我你的具体任务" | **这是最严重的失败模式。** 读完规则后的正确行为是主动匹配用户意图到路由表,输出分析,开始执行。不是回传问题给用户。 | +| "用户让我重做导入表/某一步,但我改做了别的更有用的步骤" | **重做 = 重做被点名的同一步。** 用户要求重做 X(如导入表检查)时 MUST 重新执行 X 并更新对应 Evidence;禁止用其他步骤冒充完成,禁止静默跳过 X。 | + > 如果你发现自己在想以上任何一句话,停下来,回到行为链中正确的步骤,继续执行。 diff --git a/skills/ida-reverse/SKILL.md b/skills/ida-reverse/SKILL.md index 1e166c6..8fc262e 100644 --- a/skills/ida-reverse/SKILL.md +++ b/skills/ida-reverse/SKILL.md @@ -235,7 +235,7 @@ powershell -File "scripts/open.ps1" -Path "C:\目标.exe" -TimeoutSeconds 600 输出 `OK:文件名:session_id` 表示成功(后带 `(temp copy)` 表示自动降级到临时副本)。 若分析时间较长,会周期性输出 `INFO:opening:...`;若达到超时则输出 `ERR:open_timeout_xxs`。 -### Step 3: 全局概览 +### Step 3: 全局概览(含导入表硬门) ``` idapro_survey_binary(detail_level="minimal") ``` @@ -243,9 +243,11 @@ idapro_survey_binary(detail_level="minimal") - 架构(x86/x64/ARM) - 入口点(main/WinMain/DllMain) - 有趣的字符串(URL、路径、错误消息) -- 导入分类(加密函数?网络 API?文件操作?) +- **导入分类(MUST)**:加密函数 / 网络 API / 文件操作 / 进程注入 / 注册表 — 必须落成 Evidence(建议 id:`E-imports`),可用 `idapro_entity_query(kind="imports")` 或 survey 输出中的 imports 段 - 热门函数(高 xref 计数的函数通常是关键逻辑) +**硬门禁**:未将 imports 视图/分类摘要写入 Evidence 前,MUST NOT 进入 Step 4 深挖结论,MUST NOT 声称 survey 完成。导入表为空或查询失败时仍 MUST 记录失败现象。用户要求重做导入表检查时 MUST 重做本步骤,禁止改换其他步骤。 + ### Step 4: 深入关键函数 ``` idapro_analyze_function(addr="关键函数名") @@ -347,6 +349,7 @@ ida-pro-mcp --config ## 任务完成自检(声称完成前 MUST 通过) - [ ] 我是否执行了工作流中的每一步(而不是只阅读)? +- [ ] survey/imports 是否已写入 Evidence(E-imports)?用户若要求重做导入表,是否重做了同一步? - [ ] 我是否基于 `tool-index` 使用了真实工具路径? - [ ] 我是否产出了可复现证据(命令/脚本/截图/报告)? - [ ] 我是否完成并回写了 RULES 要求的 Checklist 项? diff --git a/skills/llm-security/references/agent-obedience-engineering.md b/skills/llm-security/references/agent-obedience-engineering.md index fb6265b..622ef7c 100644 --- a/skills/llm-security/references/agent-obedience-engineering.md +++ b/skills/llm-security/references/agent-obedience-engineering.md @@ -81,6 +81,8 @@ MAY — 真正可选的 | "我没找到 tool-index,我就直接猜路径" | **缺文件比猜错路径安全 100 倍。** tool-index 缺失时先运行 refresh-tool-index.ps1 生成。 | | "用户没明确说要报告,我就不写了" | **报告是默认行为,不是可选。** 安全任务完成后必须生成报告,除非用户明确说"不要报告"。 | | "这个太简单了不需要记录 journal" | **简单任务也有踩坑价值。** 至少记录:目标类型 + 用了什么 + 有无意外,一行也行。 | +| "用户让我重做导入表/某一步,但我改做了别的更有用的步骤" | **重做 = 重做被点名的同一步。** 用户要求重做 X(如导入表检查)时 MUST 重新执行 X 并更新对应 Evidence;禁止用其他步骤冒充完成,禁止静默跳过 X。 | + **使用方式**:将本表放在 RULES.md 或其他指令文件末尾附近(高注意力区域)。Agent 在找借口之前先看到反驳。 diff --git a/skills/malware-analysis/SKILL.md b/skills/malware-analysis/SKILL.md index 172fb64..47fdb4c 100644 --- a/skills/malware-analysis/SKILL.md +++ b/skills/malware-analysis/SKILL.md @@ -56,6 +56,10 @@ sha256sum sample.exe 重点分析区域: □ 入口点(Entry Point)→ 初始化逻辑 □ 导入表 → API 用途推断(CreateRemoteThread=注入, CryptEncrypt=勒索) + **MUST(硬门)**:执行 rabin2 -i / IDA imports / pecheck 等价命令,将导入表分类摘要写入 Evidence(E-imports)后才能进入 Phase 3 + 分类至少覆盖:网络 / 文件 / 加密 / 进程注入 / 注册表 / 其他可疑 API + 解析失败或表为空:仍 MUST 记录失败输出,禁止静默跳过 + 用户要求「重做导入表检查」:MUST 重做本项,禁止改换其他步骤冒充完成 □ 资源段 → 嵌入 Payload(.rsrc 节) □ 字符串表 → URL/C2/文件路径/Base64 blob □ TLS 回调 → 调试器启动前执行 @@ -221,6 +225,7 @@ Triage RE Behav Intel Detect Remed ## 任务完成自检(声称完成前 MUST 通过) - [ ] 我是否执行了工作流中的每一步(而不是只阅读)? +- [ ] 导入表 MUST 检查是否已执行并写入 Evidence(E-imports)?重做请求是否回到同一步? - [ ] 我是否基于 `tool-index` 使用了真实工具路径? - [ ] 我是否产出了可复现证据(命令/脚本/截图/报告)? - [ ] 我是否完成并回写了 RULES 要求的 Checklist 项? diff --git a/skills/radare2/SKILL.md b/skills/radare2/SKILL.md index ebb13b4..2daec46 100644 --- a/skills/radare2/SKILL.md +++ b/skills/radare2/SKILL.md @@ -120,6 +120,19 @@ ERROR: Cannot find ...\share\format\dll\*.sdb 适合刚拿到一个二进制文件时。 +### 硬门禁(MUST — 未满足禁止进入工作流 2 及后续) + +对 PE/ELF/Mach-O 等含导入表的二进制,**MUST** 先完成导入表检查并落成 Evidence,再进入函数级分析或动态步骤: + +1. 执行 `rabin2 -i `(或 `recon.ps1` 输出中的 imports 段) +2. 将完整/分类后的导入表结果写入 Evidence(建议 id:`E-imports` 或 `E-triage-imports`),至少包含: + - 复现命令(`repro_command`) + - 关键导入分类摘要:网络 / 文件 / 加密 / 进程注入 / 注册表 / 其他可疑 API + - 若导入表为空、解析失败或工具报错:仍 MUST 记录失败现象与原始输出为 Evidence,**不得静默跳过** +3. 用户明确要求「重做导入表检查 / 重新检查导入表」时:MUST 重做本硬门步骤本身,**禁止改换为其他步骤冒充完成** + +未记录导入表 Evidence 前:MUST NOT 声称「基础侦察完成」,MUST NOT 进入工作流 2+ 的深挖结论。 + 优先直接运行内置脚本: ```powershell @@ -140,7 +153,7 @@ rabin2 -E sample.exe - 文件格式、位数、架构、平台 - 入口点地址 - 可疑字符串:URL、路径、报错、注册表、命令行参数 -- 导入函数:网络、文件、加密、进程注入、注册表操作 +- 导入函数:网络、文件、加密、进程注入、注册表操作(**MUST 落 Evidence,见上方硬门禁**) ## 工作流 2:交互式分析函数 @@ -294,12 +307,12 @@ rax2 -s hello 1. `rabin2 -I` 看格式、架构、入口点 2. `rabin2 -z` 看字符串 -3. `rabin2 -i` 看导入函数 -4. 如需交互分析,再进 `r2` +3. `rabin2 -i` 看导入函数 — **MUST + Evidence(硬门,见工作流 1)** +4. 如需交互分析,再进 `r2`(仅当步骤 3 的 Evidence 已落盘) 5. 先 `aaa`,再 `afl` / `iz` / `pdf` 6. 通过字符串引用、导入调用、入口流程逐步定位关键函数 -这个顺序的好处是噪音低,能尽快建立方向感。 +这个顺序的好处是噪音低,能尽快建立方向感。步骤 3 不是可选优化,是进入深挖前的硬门。 ## Windows 注意事项 @@ -356,6 +369,7 @@ rax2 -s hello - 不要把 `radare2` 当成只有 `aaa` 一个命令的工具 - 不要在未说明风险时直接写模式打开用户文件 - 不要在还没做基础侦察前就下结论 +- **禁止跳过导入表检查**(`rabin2 -i` / recon imports):未写入 Evidence 不得进入下一步;用户要求重做导入表时禁止改做其他步骤 - 不要把网页 JS 逆向误导到这个 skill;那是 `reverse-engineering` 的范围 ## 参考资料 @@ -407,6 +421,7 @@ rax2 -s hello ## 任务完成自检(声称完成前 MUST 通过) - [ ] 我是否执行了工作流中的每一步(而不是只阅读)? +- [ ] 导入表检查是否已执行且写入 Evidence(E-imports / E-triage-imports)?若用户要求重做,是否重做了同一步而非换步骤? - [ ] 我是否基于 `tool-index` 使用了真实工具路径? - [ ] 我是否产出了可复现证据(命令/脚本/截图/报告)? - [ ] 我是否完成并回写了 RULES 要求的 Checklist 项? diff --git a/skills/reverse-engineering/references/re-agent-workflow.md b/skills/reverse-engineering/references/re-agent-workflow.md index af78166..d346aec 100644 --- a/skills/reverse-engineering/references/re-agent-workflow.md +++ b/skills/reverse-engineering/references/re-agent-workflow.md @@ -18,22 +18,26 @@ □ file / DIE / 熵 / 壳特征 □ strings / rabin2 -z 捡漏 □ 架构/链接/是否 .NET/Go/Rust/加壳 -□ 产出:E-triage + 假设清单(勿过早下结论) +□ MUST 导入/导出表:rabin2 -i / -E(或 IDA imports / 等价物) +□ 产出:E-triage(MUST 含 imports 分类摘要:网络/文件/加密/注入/注册表)+ 假设清单(勿过早下结论) ``` +**阶段门闩(Triage → Static/Dynamic)**:E-triage 中未记录 imports 摘要前,MUST NOT 进入 Dynamic,也 MUST NOT 声称「基础分诊完成」。导入表解析失败时仍 MUST 把失败输出写入 Evidence,不得跳过。用户要求「重做导入表检查」时 MUST 重做 imports 步骤本身,禁止改换其他分析步骤。 + ## 2. Static | 工具 | 何时 | |------|------| -| radare2 / rabin2 | 快速函数/导入/字符串 | -| IDA / Ghidra(MCP 或 headless) | 深挖、交叉引用、类型 | +| radare2 / rabin2 | 快速函数/导入/字符串(imports 已在 Triage MUST 完成) | +| IDA / Ghidra(MCP 或 headless) | 深挖、交叉引用、类型;survey 阶段复核 imports 分类 | | jadx / dnSpy | Android / .NET | | OLLVM 文档 | 控制流平坦化怀疑 | ```text +□ 确认 E-imports / E-triage 已含导入表 Evidence(缺失则先补,禁止后置) □ 定位关键函数(加密/校验/网络/授权) □ 记录地址/符号 → Evidence -□ 一条路不通 → 换工具(IDA↔r2↔Ghidra) +□ 一条路不通 → 换工具(IDA?r2?Ghidra) ``` **无 MCP 时**:可用导出反编译文本再分析(对照 P4nda0s reverse-skills / IDA-NO-MCP 思路),仍写 Evidence 路径。 @@ -59,4 +63,4 @@ ## 5. 与「堆 RE skill 插件」的差异 - 本包用 **阶段门闩 + tool-index**,不默认启用 Hex-Rays「unsafe 全自动执行」类插件 -- 动态插桩默认 **offline/lab** network_profile +- 动态插桩默认 **offline/lab** network_profile \ No newline at end of file