创建他的思维模式:我将 AI 当做人,我告诉他方法论、文档、规范、知识库、总结、经验。AI智能的分析出用什么工具、手头有什么工具,如果我提供的工具不满足它的需求,要么它去安装,要么它基于基于已有工具写特定逆向目标的脚本。我沉淀了一套IDA脚本如何写、Frida如何用、Union如何用,什么时机用什么工具等等的本地知识库,所以我没关心过AI怎么去用它们,我训练他,我只要结果。
思维是道,工具是术,思维模式不同,越努力差异越大。
本文记录一种将大语言模型与专业二进制分析工具链深度结合的架构实践——Binary Analysis Agent 。系统基于 OpenCode 的 Agent + Plugin 机制构建,让 AI 充当"分析编排器",通过标准化的工具脚本间接操作分析引擎,实现从自然语言到结构化分析结果的闭环。文章重点阐述设计哲学与架构决策,辅以关键实现细节,供安全研究人员参考和复现。
---
效果说明:
1. 简单难度的算法很快就能逆向出来,难度99、100很慢,半天到一天能够逆向出来,破解算法生成注册机。
2. 如果只破解不逆向算法 ,难度99、100也是很快 的。
逆向过程视频:
[AI自动逆向] 看雪 CTF 难度99 CORE CrackMe v2.0
[AI自动逆向] 看雪 CTF 难度100 TencentPediyKeygenMe
由于录像软件有问题,时不时会卡主。
Reverse中打对钩的是我运行AI去分析的题,这三个目前都解出来了:
选择二进制逆向工程作为 AI 能力的测试场,并非偶然,而是经过深思熟虑的结果。
逆向工程是工程领域的"全能铁人三项"。 它同时考验阅读理解(从机器码中还原逻辑)、抽象推理(识别算法模式、追踪数据流)、领域知识(密码学、操作系统、编译原理)和系统思维(将零散线索拼成完整图景)。一个 AI 能做好逆向,意味着它在上述每一项上都达到了可用的水平;反过来,任何一项的短板都会直接导致分析失败——没有蒙混过关的余地。
评判标准客观且严格。 逆向的结果对就是对、错就是错:注册机能不能算出正确的 Key,脱壳后能不能还原出可编译的代码,漏洞能不能实际触发。不存在"差不多""言之有理即可"的灰色地带。这比让 AI 写一篇总结或回答一个开放式问题,更能反映真实的智能水平。
难度可以精确调节。 从简单的 CrackMe 到混淆加固的商业软件,逆向目标的难度谱系极其宽广。这让我们能够精准地定位 AI 的能力边界——它到底卡在哪一步?是读不懂汇编、看不穿混淆、还是推理链条不够长?这种细粒度的诊断能力,是通用基准测试很难提供的。
对我的实际工作有直接价值。 我日常就需要做逆向分析。如果 AI 能承担其中哪怕 30% 的重复性工作,生产力提升就是实实在在的。这比"AI 能不能通过图灵测试"这类学术问题有意义得多。
简单说:逆向工程是一道难题,而难题是最好的试金石。
---
现代二进制分析工具(如 IDA Pro、Ghidra 等)功能强大,但操作门槛高:分析师需要记忆大量 API、手动执行重复性操作、在反汇编/反编译视图间反复切换。与此同时,大语言模型具备理解自然语言和推理分析的能力,却无法直接操作专业工具。
这两者之间存在一个明确的鸿沟:AI 有推理能力但无工具操作能力,工具链有操作能力但无自主推理能力。
Binary Analysis Agent 的设计目标就是填补这条鸿沟——构建一套"AI 可调用的标准化工具接口",让 AI 模型作为编排器,根据用户自然语言描述的分析需求,自主选择并调用合适的工具操作,最终输出经过验证的分析结果。
---
系统基于 OpenCode 构建,利用其 Agent + Plugin 机制实现三件关键的事:
用户在 OpenCode 中用自然语言描述分析需求,Agent 自动接管后续所有操作——解析目标、收集信息、制定方案、调用工具、验证结果,全程输出进度和推理过程。
此外还有一个进化命令 (Evolve),用于从实际分析复盘中发现改进点,经评估后按严格质量流程实施系统升级。
---
关键约束:依赖方向严格单向 ——基础设施 ← 业务工具 ← 共享分析 ← 操作脚本。禁止反向依赖和循环依赖。这条规则确保了每一层可以独立测试和演进,而不会因上游变更引发连锁故障。
---
这是整个系统最核心的设计决策。专业分析工具的 GUI 是为人类设计的交互界面,AI 无法也不应直接操作。系统利用分析引擎提供的命令行 headless 模式,通过 `-A -S"脚本路径"` 参数让分析引擎加载二进制文件后自动执行指定脚本。
所有分析操作都被封装为"无头"模式:脚本启动 → 等待分析完成 → 执行业务逻辑 → 输出 JSON 结果 → 退出进程。AI 只需要构造正确的命令行调用,就能获取结构化的分析数据。
系统强制要求分析型需求必须经过"信息收集 → 方案规划 → 执行监控"三阶段框架,不允许跳过任何阶段。AI 在拿到目标后不能直接开始调用工具,而是必须先输出完整方案(场景分类、计划步骤、预计耗时、每步失败后的切换方向),方案可见后方可执行。
这一规则的目的是防止 AI 在复杂分析中"走一步看一步"导致方向错误、反复重试。实践表明,先花 2 分钟规划,往往能节省 20 分钟的无效尝试。
Agent Prompt 是系统中非常宝贵的资源——它决定了 AI 的"注意力"分配。如果将所有规则、策略、细节都塞进主 Prompt,不仅占用上下文窗口,还会分散 AI 的注意力,导致分析质量下降。
系统采用"渐进式披露"策略:主 Prompt 控制在 500 行以内 ,只包含核心规则和触发条件。18 份知识库文档仅在特定场景下按需加载——检测到加壳才读取加壳处理策略,遇到密码学特征才读取密码学验证方案,需要生成脚本才读取脚本生成规范。
系统不会为了"完整性"而添加功能。每个新增的工具脚本、每条新增的 Prompt 描述都需要经过"四维度量"评估:是否能减少上下文占用、减少对话轮次、提升分析速度、提升结果准确度。
满足条件的脚本经过验证后"沉淀"到脚本库并注册索引。不满足条件的方案被明确拒绝——比如"给简单异或解密写脚本",因为 AI 自己就能完成这类计算,额外脚本只会增加系统复杂度。
系统内置了完整的结果验证框架 ,要求分析结论必须经过验证才能报告给用户。验证手段按可靠性分层:
核心禁令 :绝对禁止用自己重实现的代码验证自己的结论(作弊式验证)。验证必须让原始程序实际执行,从外部观察结果。
系统在技术栈选择上不绑定 Python——什么技术适合就用什么。内置了技术选型决策树:计算密集型(如暴力搜索、大数运算)用 C/C++(10-100 倍性能优势);算法验证优先模拟执行而非手动重实现;性能不确定时先用 Python 原型验证正确性,必要时转 C 加速。
同一分析方向连续失败 2 次即强制切换方向,不允许第三次尝试。Agent Prompt 中预定义了常见失败模式和对应的切换方向。累计耗时上限 120 分钟,防止陷入无限循环。
---
长对话中 AI 面临三类上下文丢失问题:规则丢失(多轮后不再遵守约束)、知识丢失(压缩后之前的分析结论消失)、环境丢失(每轮无法感知工具链状态)。
Agent 解决规则问题——每轮对话都携带完整的编排行为定义,确保 AI 始终知道"该怎么做"。
Plugin 解决环境和压缩问题——通过 OpenCode 的 Hook 机制在三个时机注入信息:
这保证了即使对话被压缩,AI 仍然记得当前分析到哪了、什么方向已经试过并失败。
系统定义了强制执行的六阶段分析框架:
阶段 A 的信息收集会产生 `scene_tags`(场景标签),如 `packed`、`crypto`、`gui`。阶段 B 根据标签加载对应的知识库方案模板:
场景可组合,按优先级处理:先脱壳,再识别密码学特征,最后处理 GUI 交互。
分析引擎的脚本依赖专有模块,不能直接用系统 Python 执行,必须通过命令行工具的 headless 模式加载运行。AI 编排器直接构造命令行调用,通过环境变量传递参数,脚本内部按固定模式运行:
这套模板被封装为公共基础设施,具体脚本只需实现业务函数。依赖注入通过环境变量实现——分析引擎的 `-S` 机制只支持指定脚本路径,脚本在引擎内部运行时命令行参数被框架接管,环境变量是唯一可靠的跨层传参方式。
当分析目标需要与 GUI 程序交互(如验证结果是否正确)时,系统采用视觉驱动 方案:
这个方案的优势是通用性强——不依赖特定 UI 框架(Win32/MFC/Qt/WPF 都适用),只要人眼能看懂,AI 就能操作。
系统内置了多级降级策略,确保在各种环境下都能工作:
每一级降级都保留了回切能力——降级后每次操作前仍尝试上一级方案,一旦恢复就切回。
对于需要向运行中的进程写入补丁、代码或数据的场景,系统提供了进程 Patch 工具,支持:
Patch :修改指定地址的字节(如跳转指令改写)
Write Data/Code :向空闲内存区域写入数据或代码
Capture :捕获指定地址的内存值(读取中间计算结果)
Signal :等待特定内存标记出现(同步机制)
Trigger :通过 GUI 交互触发执行(如点击按钮)
这类操作作为最后手段,仅在常规方法全部失败时使用。
---
系统的独特之处在于它有一套自我改进机制——进化命令 。核心思想是:从实际分析复盘中发现高价值改进,经用户讨论确认后按严格质量流程实施。
进化流程中一个关键的工程实践是步骤拆分 :需求文档必须将实施拆分为可验证的小步骤,每个步骤代码改动不超过 200 行,必须有明确的验证点。Phase 5 执行时禁止合并或跳过步骤,每步完成后写进度摘要到文件(防止上下文压缩丢失进度)。
进化流程中内置了反模式警告,防止"为了改进而改进":
---
AI 编排器的核心逻辑写在 Markdown Prompt 中(约 500 行),而非 Python 代码。这个决策的原因是:
[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
最后于 13小时前
被不歪编辑
,原因: