背景:
radare2,昵称“r2”,是一个强大的开源反汇编器。r2ai是一个为 r2 开发的开源插件,用于与人工智能进行交互。
场景:使用 r2 进行恶意软件分析。
免责声明:以下关于我个人偏好的模型和配置仅代表我的个人观点(不代表我的雇主),并且仅适用于恶意软件分析这个场景。对于其他场景(如文本处理),结果可能会不同。
我使用 r2 和 AI 分析恶意软件的配置
到目前为止,我一直在使用 r2ai 配合运行在远程第三方服务器上的模型。例如,我申请了一个 Anthropic 的 API 密钥。该密钥被提供给 r2ai(存储在~/.r2ai.anthropic-key中),我的 r2ai API 配置为使用 anthropic(r2ai -e api=anthropic),模型则设置为 Claude Sonnet 3.7(r2ai -e model=claude-3-7-sonnet-20250219)。每当我发出一个请求(r2ai -d或r2ai -a),我的问题就会被发送到 Anthropic 的服务器,我的账户会被扣除几美分,然后我就能收到回复。
这种方式效果不错,是我分析恶意软件所设置的最佳方案,只是会在 Claude Sonnet 的模型版本上有些变化。
成本与保密性问题
然而,这种配置并非在所有情况下都完美:
- 成本:访问 Claude Sonnet 的 API 不是免费的。虽然不贵,但仍然是一笔开销。
- 第三方:我的问题及其上下文会被发送给第三方。由于是恶意软件,通常关于可执行文件本身没有保密性问题 😉。我可能更在意的是告诉第三方我如何进行分析。这接近于“知识产权”。幸运的是,作为一名研究人员,我通常会公开我的分析方法,所以这也不是什么大问题。尽管如此,能够完全控制仍然是更可取的。
成本问题可以通过使用免费模型来解决。有很多选择,比如 Mistral 的devstral-small-2505或codestral-latest。在我的使用场景中,这些免费模型的效果远不及 Claude Sonnet,但对于我知道不太复杂的问题,它们仍然有帮助。
Ollama vs LM Studio
第三方问题可以通过运行我们自己的 LLM 服务器来解决,例如使用Ollama或LM Studio。
对于恶意软件分析,我们需要良好的推理模型和工具支持(MCP 或 r2ai 自动模式)。在普通的台式机/笔记本电脑上运行的结果通常不尽如人意,我弄到了一台性能强劲的主机,配备 2 块 NVIDIA AD104GL GPU、超过 300GB 的内存和 160TB 的硬盘 😃。在上面安装 Debian 和 CUDA 驱动后,我们就可以运行 Ollama 或 LM Studio 了。
Ollama 有点慢,而 LM Studio 的优势在于速度更快、配置更容易,并且它的模型库包含gpt-oss(免费)。
r2ai 与 LM Studio
我启动了 LM Studio 服务器,并确保我的工作主机可以远程访问它(“在本地网络上提供”)。
我的 LM Studio 服务器在一台专用主机上,位于一个实验室内,与我的工作主机是分开的。因此,我需要将其设置为在“本地网络”上提供服务。
在 r2ai 中,要连接到指定的服务器,我们必须设置baseurl配置(r2ai -e baseurl=http://IP地址:端口)。不过我不得不修复了 r2ai 的一个小bug,因为到目前为止,使用 baseurl 意味着使用符合 Ollama 格式(带有“api”后缀)的 URL,这与 OpenAI 的格式(带有“v1”后缀)不同。
然后,正如我所说,将 api 设置为 openai:r2ai -e api=openai。这样几乎就完成了。要列出 LM Studio 上可用的模型,使用:r2ai -e model=?,然后选择一个。
演示
在下面的视频中,我通过 LM Studio 服务器使用 r2 分析一个 Linux/Trigona 的恶意样本,模型为gpt-oss-20b。Trigona 是一个众所周知的勒索软件家族,最初出现在 Windows 上,后来被移植到 Linux。这个具体的样本在 2025 年 4 月被检测到,并有几个变种(顺便说一下,我将在两周后的 Barb’hack 会议上讨论这个)。
(视频无声音。请观看并阅读下方的完整说明)
我故意选择了一个困难的样本,以便我们遇到真实的问题。对于简单的二进制文件,一切都会更顺利,但话说回来,如果二进制文件很简单,我就不需要 AI 来帮忙了 😉。
在视频中,你会注意到的第一个问题是我们的上下文太大了。该恶意软件的 main 函数过于复杂,产生了太多的 token,远远超出了限制,无法处理。我们通过在 LM Studio 中增加模型的上下文长度来克服这个问题。请注意,上下文越大,模型速度越慢,并且需要更多的内存。
第二个问题:即使有了更大的上下文,模型仍然无法回答。我们不得不尝试变通,要求它只反编译函数的部分内容。目前,在 r2ai 中,还没有任何功能可以要求反编译一个地址范围(希望有一天能实现)。而r2ai -d会反编译整个函数。解决技巧是调用r2ai -a(自动模式),然后手动告诉它反编译 main 函数的一部分。
第三个问题:在自动模式下,模型可能会发送 r2 命令来执行。我不完全清楚原因,但在某个时刻,模型搞错了一个 r2 命令(即反编译指定数量指令的命令)。因此,我必须修正这个命令,但实际上,这完美地说明了为什么用户必须审查和编辑命令。
成功了!我们得到了反编译的输出,这正是我想在这个视频中展示的全部内容:使用 LM Studio 配合 r2ai,以及如何为模型调整参数。
就质量而言,生成的代码可以更好。这是因为我使用了gpt-oss。使用Claude Sonnet 3.7+,我能获得更好的质量。但 Claude Sonnet 只能通过 Anthropic 的服务器访问,不能通过 LM Studio,所以这是另一个话题了。
希望你喜欢阅读这篇文章,并希望能在 Barb’hack 会议上见到你们中的一些人,听我关于 r2ai 的演讲!
— Cryptax
CSD0tFqvECLokhw9aBeRqiW9mF1EF8JsDP2bFrzI5p+QxZTj1TOZ2PDOp6S9uV9uLcOo5bOI0Ly+xOt+fTycwkUB3ARPbiCNEjFLraSuQnQ=
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)