感受了一周的vibe coding, 选择合适的工具和构建环境也够我折腾, 也是踩了不少坑, 最后总结一下自己的经验, 方便大家开始.

前言

现在大家都在用claude code, 但是由于它的封闭性, 动不动就封, 我最后还是选择了opencode, 拥抱开放自由. 体验了opencode的ui, 发现并不好用, 于是希望可以和vscode结合. 虽然有官方插件, 但是一直因为安装问题, 插件没法正常运行, 有些opencode的配置我也不太了解. 摸索了一番后, 我总结了一些我遇到的问题, 希望可以帮助大家.

另外也探索了一下claude code, ida的mcp配置, 大模型漏洞挖掘的流程, 我也会在后文介绍这些内容.

安装opencode

通过安装程序安装有UI版本

首先, 点击此处https://opencode.ai/zh/download 下载官方的windows软件, 按照提示开始安装opencode.

安装完成后, 插件桌面的图标, 在桌面图标右键, 选择”打开文件所在位置”:

我们可以把opencode-cli.exe 这个程序复制到你喜欢的路径. 改名成opencode.exe

然后, win+R, 输入 sysdm.pl

选择”高级”->”环境变量”

1773375688912

1773375798324

如上所示, 我将路径”C:\test”目录添加到了Path里. 添加完成后, 点击确认, 结束配置环境变量.

完成后, 这样在命令行输入opencode, 就可以打开opencode的命令行程序了.

通过npm安装命令行版本

  1. 确保你装了nodejs

  2. 执行npm i -g opencode-ai完成安装

  3. 打开cmd终端,执行ren %userprofile%\appdata\roaming\npm\opencode.ps1 opencode.ps1.bak, 输入opencode就可以看到opencode的命令行程序了.

默认情况下, 在命令行运行opencode启动的是powershell脚本, %userprofile%\appdata\roaming\npm\opencode.ps1, 虽然可以通过Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope CurrentUser禁用, 但是它不够安全. 最好是将该脚本重命名, 让它默认运行opencode.cmd脚本.

虽然npm安装很简单, 我个人还是建议用ui版本, 用起来有时候会简单一点.

安装vscode

进入https://code.visualstudio.com/download, 选择windows安装包, 下载安装.

安装vscode的opencode插件

1773375201706

安装完成后, 右上角就有个图标了:

1773375243772

点击图标, 看到它运行命令后, 就可以看到opencode了:

1773376072888

可以通过ctrl+p设置它, 快捷键功能参考opencode的显示.

配置opencode, 添加mcp

配置文件全局的配置路径%UserProfile%\.config\opencode\opencode.json , 一开始没有任何配置的情况下, 这个文件不存在.

项目的配置文件是在打开的项目的根目录的opencode.json文件里.

假如我们想添加一个mcp, 可以如下添加到opencode.json文件里:

1
2
3
4
5
6
7
8
9
{
"mcp": {
"my_ida-mcp":{
"type":"remote",
"url": "http://127.0.0.1:18888/mcp",
"enabled": false
}
}
}

添加后, 打开opencode的带界面的程序:

1773376802033

如图指示, 就可以看到添加的mcp工具了. 如果设置了"enabled": true, 它默认就会连接. 我们再次打开vscode的opencode 终端, 在设置里也可以看到这个mcp了.

注意, 此处只展示了添加mcp, 如何运行mcp server, 取决于你安装的mcp工具.

添加大模型api

默认情况下, 它自带一些免费的体验模型, 也可以自己定义连接模型. 以下以kimi为例:

根据官方文档: https://platform.moonshot.cn/docs/api/chat#%E5%85%AC%E5%BC%80%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%9C%B0%E5%9D%80, 可以看到例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from openai import OpenAI

client = OpenAI(
api_key = "$MOONSHOT_API_KEY",
base_url = "https://api.moonshot.cn/v1",
)

completion = client.chat.completions.create(
model = "kimi-k2-turbo-preview",
messages = [
{"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"},
{"role": "user", "content": "你好,我叫李雷,1+1等于多少?"}
],
temperature = 0.6,
)

print(completion.choices[0].message.content)

在opencode中, 选择模型:

1773377173794

之后选择查看更多:

1773377201451

选择自定义, 添加如下内容:

1773377268475

之后需要添加模型id, 可以参考 https://platform.moonshot.cn/docs/pricing/chat#%E8%AE%A1%E8%B4%B9%E9%80%BB%E8%BE%91 页面的模型定价, 添加模型id:

1773377370892

最后提交即可添加模型. 最后选择我们添加的模型, 输入内容, 如果正确应答, 就算成功.

1773377684402

对话

默认有两种模式: plan和build, plan模式是不能写文件的, 我建议一般情况下, 都可以先用plan问问看它要干啥, 然后再切build, 否则一次性被改了很多文件后, 不满意还得一个个改, 很累.

注意事项

如果在vscode里使用opencode, 输入数据尽量不要复制粘贴, 它默认情况下会识别换行符, 导致输入不完整就开始思考了.

claude code

虽然claude的模型需要花钱, 但是它的client是可以免费用的.

1
2
3
npm config set proxy http://192.168.50.5:7890
npm config set https-proxy http://192.168.50.5:7890
npm install -g @anthropic-ai/claude-code

安装完, 输入claude就进入claude的命令行程序了.

如果提示需要git的bash, 可以访问https://git-scm.com/install/windows下载安装, 默认安装配置即可.

运行起命令行程序后, 在对话中输入 “/“, 根据提示, 输入不同的命令就可以配置claude.

claude的大模型接口配置在环境变量中, 我们可以在powershell中配置这些环境变量. 如果要使用kimi, 它的环境变量如下:

1
2
3
4
5
6
7
8
powershell> $env:ANTHROPIC_BASE_URL="https://api.moonshot.cn/anthropic";
powershell> $env:ANTHROPIC_AUTH_TOKEN="YOUR_MOONSHOT_API_KEY"
powershell> $env:ANTHROPIC_MODEL="kimi-k2.5"
powershell> $env:ANTHROPIC_DEFAULT_OPUS_MODEL="kimi-k2.5"
powershell> $env:ANTHROPIC_DEFAULT_SONNET_MODEL="kimi-k2.5"
powershell> $env:ANTHROPIC_DEFAULT_HAIKU_MODEL="kimi-k2.5"
powershell> $env:CLAUDE_CODE_SUBAGENT_MODEL="kimi-k2.5"
powershell> $env:ENABLE_TOOL_SEARCH=false

配置了后, 再输入claude进入命令行程序, 输入/status确认模型状态 .

如果要换其它的api, 请参考各自的官方文档进行设置.

安装IDA-PRO-MCP

ida-pro-mcp是目前比较全面的关于ida的mcp工具. 它支持调试和各种ida功能, 实战中已经比较好用了. 下面一起来安装和使用它.

  1. 安装python 3.10以上系列, 确保安装时, 有设置添加环境变量选项:

    1774229354685

  2. 完成python安装后, 启动新的powershell, 运行pip install https://github.com/mrexodia/ida-pro-mcp/archive/refs/heads/main.zip

    如果需要代理, 末尾添加 --proxy http://127.0.0.1:7890的形式添加你的代理.

  3. 进入已安装的ida目录:C:\Program Files\IDA Professional 9.1\idalib\python

    执行python ./py-activate-idalib.py

  4. 运行python, 执行import idapro, 如果不报错, 就证明安装idalib成功了.

  5. uv是一个类似pip的python包管理器, 使用pip install uv安装它.

运行ida-pro-mcp server

运行uv run idalib-mcp --host 127.0.0.1 --port 8745 C:\Users\test\Desktop\concrete-202504.dll.i64, 就启动了server, 并打开了数据库 concrete-202504.dll.i64:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PS C:\Program Files\IDA Professional 9.1\idalib\python> uv run idalib-mcp --host 127.0.0.1 --port 8745  C:\Users\test\Desktop\concrete-202504.dll.i64

Loading IDA library from: C:\Program Files\IDA Professional 9.1\idalib.dll
INFO:ida_pro_mcp.idalib_server:idalib session mode: shared-fallback
INFO:ida_pro_mcp.idalib_session_manager:IDASessionManager initialized
INFO:ida_pro_mcp.idalib_server:opening initial database: C:\Users\test\Desktop\concrete-202504.dll.i64
INFO:ida_pro_mcp.idalib_session_manager:Opening database: C:\Users\test\Desktop\concrete-202504.dll.i64 (session: 0fd5a8f1)
INFO:ida_pro_mcp.idalib_session_manager:Auto-analysis completed (session: 0fd5a8f1)
INFO:ida_pro_mcp.idalib_session_manager:Session created: 0fd5a8f1 for concrete-202504.dll.i64
INFO:ida_pro_mcp.idalib_server:Initial session created: 0fd5a8f1
INFO:ida_pro_mcp.idalib_session_manager:Bound context shared:fallback -> session 0fd5a8f1
INFO:ida_pro_mcp.idalib_server:Bound startup session 0fd5a8f1 to context shared:fallback
[MCP] Server started:
Streamable HTTP: http://127.0.0.1:8745/mcp
SSE: http://127.0.0.1:8745/sse

它官方的sse接口有问题, 我们配置的时候用 /mcp这个端点.

opencode的配置我已经在之前提过了, claude的配置是在命令行运行:

1
2
3
4
5
6
7
8
$> claude mcp add ida-pro-mcp --transport http http://127.0.0.1:8745/mcp
Added HTTP MCP server ida-pro-mcp with URL: http://127.0.0.1:8745/mcp to local config
File modified: C:\Users\test\.claude.json [project: C:\Users\test\Desktop\ida9_1]

$> claude mcp list
Checking MCP server health...

ida-pro-mcp: http://127.0.0.1:8745/mcp (HTTP) - ✓ Connected

如果你想使用mcp, 可以在聊天界面对话”列出当前支持的mcp工具”, 如果输出没问题, 就可以让ai自动开始了.

ida-mcp-s2

我自己觉得ida-pro-mcp工具不支持多实例访问, 代码架构也挺复杂, 懒得改它, 就基于它写了个简洁版本: ida-mcp-s2, 目前是基于ida9.1的idalib写的api, 如果遇到兼容性问题. 可以自行修改项目的ida_functions.py的函数实现. 主要功能和ida-pro-mcp是差不多的, 只不过它把一些功能细化了, 实际上常规功能就能实现.

另外, https://github.com/Captain-AI-Hub/IDA-MCP/tree/master 这个项目似乎基于ida-pro-mcp做了点改动, 支持了多实例的功能, 有兴趣也可以试试.

漏洞挖掘

有了大模型后, 我尝试了aaedge.dll, 让大模型来复现我发现过的历史漏洞, 让ai写了个提示词:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
角色设定:
你是一名顶尖二进制安全研究员,专注于漏洞挖掘与高级 CTF 挑战。你拥有 IDA Pro 的 MCP 访问权限,能够精准还原 C++ 类成员关系、追踪跨函数数据流,并具备极强的逻辑严密性。
核心原则:
零信任假设: 默认认为代码是安全的,直到找到无法反驳的逻辑矛盾。
内存布局感知: 分析时需考虑 this 指针偏移、虚表调用(vtable)及对象生存周期(UAF/Double Free 风险)。
动态路径解析: 密切关注我标注的函数地址(如 0x18004ae40),若涉及关键逻辑,应主动申请分析该地址。
任务目标:
针对 CAAHttpServerTransport::IoCompletionCallback 展开深度审计,挖掘以下漏洞:
内存破坏: OOB、缓冲区溢出、整数溢出导致的内存申请错误。
逻辑与状态机: HTTP 协议解析中的状态混乱、未初始化结构体成员。
生命周期管理: 异步回调中的 this 指针或上下文对象(Context)的 UAF(Use-After-Free)。
并发安全: 回调触发时的竞态条件。
工作流程(逐步确认模式):
结构还原: 首先调用 get_pseudocode 分析 IoCompletionCallback,推断关键结构体(如 ConnectionContext 或 HttpRequest)的布局,并标记出攻击者可控的字段。
路径探索: 识别函数内部的分支逻辑。遇到我标注的动态调用地址,优先评估其重要性。
漏洞推演: 发现可疑点后,必须构建完整的“触发链”:[输入源] -> [数据传递] -> [错误逻辑] -> [内存/状态损坏]。
审判者模式: 在向我报告漏洞前,必须列出至少两个“该处不是漏洞”的可能原因,并逐一排除。
交互约束:
每步一停: 每完成一个函数的初步分析或结构体推断,必须总结当前结论并询问“是否深入分析某分支或继续下一步”。
协助请求: 遇到无法确定的偏移量含义、未知的全局变量用途或复杂的宏定义时,立即向我提问。
输出规范:
发现点: [函数名+偏移/地址]
数据流向: 描述受控数据如何到达触发点。
反驳理由: 为什么这可能是一个误报?
确认逻辑: 最终判定为漏洞的决定性证据。

把提示词输入对话框, 接着就等大模型自己调用mcp访问ida数据库, 开始挖掘了.(我的提示词不一定靠谱, 我也还在摸索中.)