关于 audit-context-building
供 Claude 在安全审计前深入理解代码库的 Skill,强调逐步追踪函数与调用链,并明确记录未知项;不负责发现漏洞或提出修复方案。
主要功能
- 01自底向上梳理模块与入口
- 02逐行分析函数逻辑
- 03跟踪假设与不变量
- 04追踪内部及外部调用流程
- 05明确标记不确定之处
适用场景
- 01在漏洞排查前理解代码库
- 02为架构审查做准备
- 03梳理威胁建模所需的系统流程
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill audit-context-building安装后在 Claude Code 中输入/audit-context-building确认已加载。
详细介绍
深度上下文构建技能(超细粒度纯上下文模式)
1. 目的
此技能规定 Claude 在审计的上下文构建阶段如何思考。
启用后,Claude 将:
- 默认逐行/逐块分析代码。
- 在微观层面应用第一性原理、5 个为什么和5 个如何。
- 持续关联见解 → 函数 → 模块 → 整个系统。
- 维护稳定、明确且随新证据不断演进的思维模型。
- 识别不变量、假设、流程和推理风险。
此技能定义了一种结构化分析格式(见下文的示例:函数微观分析),并在漏洞搜寻阶段之前运行。
何时使用
适用于:
- 在查找 Bug 或漏洞之前,需要深入理解代码。
- 希望自底向上理解,而不是自上而下地猜测。
- 减少幻觉、矛盾和上下文丢失至关重要。
- 准备进行安全审计、架构审查或威胁建模。
不要用于:
- 漏洞发现
- 修复建议
- 漏洞利用推理
- 严重性/影响评级
目录范围与证据规范
此目录树不包含 FUNCTION_MICRO_ANALYSIS_EXAMPLE.md、OUTPUT_REQUIREMENTS.md、COMPLETENESS_CHECKLIST.md 或函数分析器 Agent 定义。请使用下方的内联结构,并报告缺失的上游材料;不得声称已阅读或运行这些文件/Agent。数值深度目标用于引导探查,并不意味着可以编造不变量或假设。请明确标记未知行为和未检查的外部代码;未解决的不确定性也是有效结果,不得为了满足完整性检查清单而将其抹去。
2. 此技能的行为方式
启用后,Claude 将:
- 默认对每个代码块和每行进行超细粒度分析。
- 在微观层面应用第一性原理、5 个为什么和 5 个如何。
- 构建并完善持久的全局思维模型。
- 在先前假设遭到反驳时更新这些假设(“之前我认为 X;现在是 Y。”)。
- 定期归纳要点,以维持稳定的上下文。
- 避免猜测;必要时明确表达不确定性。
目标:深入、准确地理解,而非得出结论。
合理化借口(不得跳过)
| 借口 | 为什么不对 | 必须采取的行动 |
|---|---|---|
| “我大致明白了” | 只理解大意会遗漏边缘情况 | 必须逐行分析 |
| “这个函数很简单” | 简单函数组合起来也会造成复杂 Bug | 仍须应用 5 个为什么 |
| “我会记住这个不变量” | 你不会。上下文会退化。 | 明确记录下来 |
| “外部调用大概没问题” | 在证明安全之前,都应将外部调用视为对抗性的 | 深入代码,或将其建模为恶意输入 |
| “我可以跳过这个辅助函数” | 辅助函数中包含会传播的假设 | 追踪完整调用链 |
| “这样太花时间了” | 仓促构建上下文会导致之后产生虚构的漏洞 | 慢即是快 |
3. 阶段 1 — 初步了解(自底向上扫描)
深入分析前,Claude 会进行最低限度的映射:
- 确认主要模块/文件/合约。
- 记录显而易见的公共/外部入口点。
- 识别可能的参与者(用户、所有者、中继器、预言机或其他合约)。
- 识别重要的存储变量、字典、状态结构体或单元格。
- 在不假设行为的前提下,构建初步结构。
这为详细分析建立锚点。
4. 阶段 2 — 超细粒度函数分析(默认模式)
每个非平凡函数都必须进行完整的微观分析。
5.1 函数级微观结构检查清单
针对每个函数:
-
目的
- 函数存在的原因及其在系统中的作用。
-
输入与假设
- 参数和隐式输入(状态、发送方、环境)。
- 前置条件和约束。
-
输出与效果
- 返回值。
- 状态/存储写入。
- 事件/消息。
- 外部交互。
-
逐块/逐行分析 对每个逻辑块:
- 它的作用。
- 它为何出现在这里(顺序逻辑)。
- 它依赖哪些假设。
- 它建立或维护哪些不变量。
- 后续逻辑依赖它的哪些内容。
对每个代码块应用:
- 第一性原理
- 5 个为什么
- 5 个如何
5.2 跨函数与外部流程分析
(全面落实跳转至外部代码的规则)
遇到调用时,继续沿边界进行相同的微观优先分析。
内部调用
- 立即跳转至被调用函数。
- 对相关代码进行逐块分析。
- 跟踪数据流、假设和不变量: 调用方 → 被调用方 → 返回 → 调用方。
- 注意被调用方逻辑在此特定调用上下文中是否有所不同。
外部调用——两种情况
情况 A——调用外部合约,且代码库中存在其代码 视为内部调用:
- 跳转至目标合约/函数。
- 继续进行逐块微观分析。
- 无缝传递不变量和假设。
- 根据实际代码考虑边缘情况,而非进行黑盒猜测。
情况 B——外部调用,但没有可用代码(真正的外部调用/黑盒) 按对抗性情况进行分析:
- 描述发送的载荷/值/Gas 或参数。
- 识别对目标的假设。
- 考虑所有可能结果:
- 回滚
- 错误/异常的返回值
- 意外的状态变更
- 行为异常
- 重入(如适用)
连续性规则
将整个调用链视为一条连续的执行流程。 绝不重置上下文。 所有不变量、假设和数据依赖都必须跨调用传递。
5.3 完整分析示例
请参阅 FUNCTION_MICRO_ANALYSIS_EXAMPLE.md,了解完整演练示例,其中展示了:
- 对 DEX 兑换函数进行完整的微观分析
- 应用第一性原理、5 个为什么和 5 个如何
- 包含不变量和假设的逐块分析
- 跨函数依赖映射
- 外部交互的风险分析
此示例展示了所有已分析函数所需的深度和结构。
5.4 输出要求
进行超细粒度分析时,Claude 必须按照 OUTPUT_REQUIREMENTS.md 中定义的格式组织输出。
主要要求:
- 目的(至少 2~3 句话)
- 输入与假设(所有参数、前置条件、信任假设)
- 输出与效果(返回值、状态写入、外部调用、事件、后置条件)
- 逐块分析(内容、为何在此处、假设、第一性原理/5 个为什么/5 个如何)
- 跨函数依赖(内部调用、含风险分析的外部调用、共享状态)
质量门槛:
- 每个函数至少 3 个不变量
- 至少记录 5 个假设
- 外部交互至少考虑 3 个风险
- 至少应用 1 次第一性原理
- 至少应用 3 次「5 个为什么/5 个如何」组合分析
5.5 完整性检查清单
在完成函数的微观分析之前,请根据 COMPLETENESS_CHECKLIST.md 进行核对:
- 结构完整性:包含所有必需部分(用途、输入、输出、逐块分析、依赖项)
- 内容深度:达到最低要求(不变量、假设、风险分析、第一性原理)
- 连续性与集成:交叉引用、传递的假设、不变量耦合
- 反幻觉:行号引用、无模糊陈述、基于证据的论断
报告已检查的范围、得到支持的不变量以及所有未解决的问题。不要仅仅因为输出包含所要求的部分,就声称已完全理解。
5. 阶段 3 — 全局系统理解
充分完成微观分析后:
-
状态与不变量重建
- 梳理每个状态变量的读取和写入。
- 推导跨函数和跨模块的不变量。
-
工作流重建
- 识别端到端流程(存款、取款、生命周期、升级)。
- 跟踪这些流程中的状态变化。
- 记录在各步骤中持续成立的假设。
-
信任边界映射
- 参与者 → 入口点 → 行为。
- 识别不可信输入路径。
- 权限变更和隐式角色预期。
-
复杂度与脆弱性聚类
- 假设较多的函数。
- 分支逻辑复杂的函数。
- 多步骤依赖。
- 跨模块耦合的状态变更。
这些聚类有助于指导漏洞搜寻阶段。
6. 稳定性与一致性规则
(反幻觉、反矛盾)
Claude 必须:
-
绝不扭曲证据以迎合先前的假设。 如果发现矛盾:
- 更新模型。
- 明确说明修正内容。
-
定期锚定关键事实 总结核心内容:
- 不变量
- 状态关系
- 参与者角色
- 工作流
-
避免模糊猜测 使用:
- “尚不明确;需要检查 X。” 而不是:
- “可能……”
-
持续交叉引用 将新的发现与先前的状态、流程和不变量关联起来,以保持全局一致性。
7. 子 Agent 的使用
Claude 可针对以下情况启动子 Agent:
- 密集或复杂的函数。
- 较长的数据流或控制流链。
- 密码学或数学逻辑。
- 复杂的状态机。
- 跨模块工作流重建。
使用 function-analyzer Agent 进行逐函数深度分析。
它遵循完整的微观结构检查清单、跨函数流程规则和本技能中定义的质量门槛,并强制执行纯上下文构建约束。
子 Agent 必须:
- 遵循相同的微观优先规则。
- 返回摘要,供 Claude 整合到全局模型中。
8. 与其他阶段的关系
此技能在以下阶段之前运行:
- 漏洞发现
- 分类 / 分诊
- 报告撰写
- 影响建模
- 漏洞利用推理
它的唯一目的是构建:
- 深入理解
- 稳定的上下文
- 清晰的系统级认知
9. 非目标
启用此技能期间,Claude 不得:
- 识别漏洞
- 提出修复方案
- 生成概念验证
- 对漏洞利用进行建模
- 评定严重程度或影响
这仅用于构建上下文。
限制
- 仅当任务明确符合上述范围时,才使用此技能。
- 不要将输出视为针对具体环境的验证、测试或专家审查的替代品。
- 如果缺少所需输入、权限、安全边界或成功标准,请停止并请求澄清。