文章总结: 本文探讨了如何将大型语言模型(LLMs)作为逆向工程和恶意软件分析的辅助工具,以提升工作效率。文中介绍了ModelContextProtocol(MCP)框架,该框架能标准化应用程序向LLM提供上下文的方式,并支持与IDAPro等反汇编器集成。文章还详细讨论了如何选择合适的LLM模型、客户端工具(如Ollama、Claude3.7Sonnet)以及本地部署方案,并通过一个真实的IcedID恶意软件样本分析案例,对比了不同LLM在分析速度、成本、隐私等方面的表现,指出了使用LLM时可能遇到的上下文窗口限制、幻觉等挑战。 综合评分: 90 文章分类: ai安全,逆向分析,恶意软件,二进制安全,渗透测试
将 LLM 当作逆向工程的得力助手
Guilherme Venere Guilherme Venere
securitainment
2026年6月9日 21:13 中国香港
在小说阅读器读本章
去阅读
- 本研究探讨了大型语言模型 ( LLMs ) 如何在逆向工程这一复杂领域中辅助而非取代恶意软件分析人员的工作。
- 在恶意软件分析过程中,LLMs 可以作为强大的助手,简化工作流程、提升效率,并提供切实可行的洞见。
- 我们将展示 LLMs 与关键工具结合使用的实际场景,这些工具包括 Model Context Protocol ( MCP ) 框架,以及业界标准的反汇编器和反编译器,例如 IDA Pro 和 Ghidra。
- 读者将了解到哪些模型和工具最适合应对恶意软件分析中的常见挑战,以及它们如何加速对未知恶意文件的识别与理解。
- 我们还会展示使用 LLMs 时常见的一些障碍如何影响结果,例如工具调用带来的成本增加,以及本地模型在输入上下文大小上的限制。
| 原文链接 | 作者 | | — | — | | https://blog.talosintelligence.com/using-llm-as-a-reverse-engineering-sidekick/ | Guilherme Venere |
Talos 建议的方法
随着 LLMs 在各行各业的加速普及,人们普遍担忧它们可能取代人类的专业能力。然而,与其将其视为对人类专业能力的威胁,我们更应把 LLMs 看作帮助恶意软件研究人员开展工作的强大工具。
我们希望通过这项研究表明,即便借助低成本的工具和硬件,恶意软件研究人员也能利用这项技术来改进自己的工作。
本文将介绍可用于与 LLMs 和反汇编器交互的各类客户端应用、选择最佳语言模型时需要考虑的特性,以及可将这些应用整合为一个稳固框架、在恶意软件分析过程中提供帮助的相关插件。
在我们的测试中,所使用的环境由一个实现了 IDA-PRO 集成的 MCP 服务器和一个基于 VSCode 的 MCP 客户端组成。借助这套技术栈,我们展示了如何利用 MCP 服务器帮助语言模型根据用户输入或在恶意代码中发现的信息来执行相应任务。
本文还提供了一份分步指南,介绍如何搭建环境,以实现一个让 LLM 在本地 GPU 上运行模型的基础配置。
MCP 简介
Model Context Protocol ( MCP ) 是一种开放协议,它对应用程序向 LLM 客户端和模型提供上下文的方式进行了标准化。MCP 服务器所提供的工具和数据源构成了这些上下文,而 LLM 模型可以根据用户请求选择访问哪个工具或数据源,也可以在运行时自主选择。
MCP 服务器通过代码以及一段指导 LLM 如何使用每个工具的说明来实现工具。这些代码可以执行任意类型的任务,无论是对接 API、访问文件或网络,还是其他任何必要的自动化操作。
图 1。该图展示了在典型部署中 MCP 服务器如何与其他组件相互连接。
这些组件可以根据需要全部部署在同一台机器上,也可以分别部署在不同的机器上。例如,本地 LLM 模型可以运行在一台配备更强 GPUs 的独立服务器上,而 IDA Pro 和 MCP 服务器则可以部署在另一台访问受到更严格限制的机器上,因为它要用于处理恶意软件。
为这项工作选择合适的工具
用户通过 MCP 客户端与 MCP 服务器进行交互。该客户端是主要的交互界面,负责向 LLM 模型发起查询、与 MCP 服务器交换数据,并将这些数据呈现给用户。任何支持 MCP 协议的应用程序都可以充当此类客户端,例如 Claude.AI Desktop ,或者 Visual Studio Code ( VSCode ) 搭配其应用市场中提供的任意一款 MCP 客户端扩展。
在本文中,我们采用 VSCode 加 Cline MCP 客户端扩展的组合,但目前可用的众多扩展中任何一款都同样适用。其中最受欢迎的有:
- Cline: https://cline.bot/
- Roo Code: https://roocode.com/
- Copilot MCP: https://marketplace.visualstudio.com/items?itemName=AutomataLabs.copilot-mcp
对于本地部署方案而言,推理引擎是另一项需要做出的选择。目前已有多款开源引擎可供选用,它们在性能和易用性上各有差异。其中一部分是 Python 框架,例如 vLLM, 另一些则是带 Python 绑定的 C++ 引擎,可以部署在完整服务器上并通过 REST API 进行调用,例如 LLama.CPP 或 Ollama。这些引擎各有优劣,对其进行全面对比已超出本文讨论范围。在我们的实验中,我们选择了 Ollama ,主要原因在于其易用性。
模型选择标准
下一个需要确定的组件是 LLM。它既可以是基于云的模型,也可以是本地运行的模型。大多数 MCP 客户端都支持种类繁多的云端服务,并预置了相应的配置选项。而对于本地运行的模型,使用 Ollama 推理引擎搭配其支持的某款模型,是兼容性最佳的方案之一。
在为 MCP 服务器挑选搭配使用的模型时,有几项特性需要纳入考量,这是由 MCP 客户端与模型及 MCP 服务器之间的交互方式所决定的。
首先,模型必须支持带有结构化指令的提示词。这是客户端用来告知模型当前有哪些 MCP 工具可用、各自的用途,以及调用它们的模板语法的途径。
其次,模型还必须支持较大的输入上下文窗口 ,以便能够解析大型代码库并进行后续分析。只有这样,客户端才能在单次查询中将所有必要信息一并传递给模型。
当 MCP 客户端向模型发送查询时,它会把 MCP 服务器提供的所有信息 ( 包括可用工具及各工具的使用方法 )、针对该模型优化过的通用指令,以及用户输入的提示词,统统整合到一条提示词中。如果属于后续查询,那么前一条命令的任意输出也会被追加到提示词里,例如某个函数的完整反编译结果或字符串列表。这样一来,提示词的长度可能很快就会逼近模型或推理引擎所允许的最大输入上下文。
对于基于云的模型而言,这一问题影响相对较小,因为它主要体现在每次请求的费用上;但对于借助 Ollama 推理引擎运行的本地模型而言,问题就严重得多,引擎可能会截断提示词,并因缺失完整上下文而给出无效的回答。
正因如此,那些未经专门训练以处理工具调用或结构化指令的模型,并不适合与 MCP 服务器配合使用,并且可能在代码分析过程中产生幻觉。
在我们的研究中,本地 LLM 选用的是 Ollama 推理引擎搭配 Devstral:24b ,云端模型则采用 Anthropic 的 Claude 3.7 Sonnet ( claude-3-7-sonnet-20250219) ,因为这两款模型都针对工具调用与代码分析进行了专门优化。若存在硬件限制、成本顾虑或个人偏好等因素,也可以替换为其他模型。
在本地模型与云端模型之间做选择时,还有以下几点值得权衡:
-
成本
:云端模型通常按输入查询及其响应所消耗的 token 数量收取 API 调用费用。在保持上下文的同时对大文件进行分析并不断追问,可能会让单次提示词所产生的费用迅速攀升。另一方面,本地模型往往运行速度较慢,并且会让 GPU 满负荷工作,从而带来一项隐性成本,即整个分析过程中维持机器运转所消耗的电力。此外,本地模型还需承担购置相应硬件的前期投入,这是云端模型所没有的。
-
隐私与机密性:
使用云端服务时,需要默认所有关于被分析文件的信息都将被传送到云端 LLM 服务商。视被分析文件的性质而定,这可能违反雇主或委托分析方所规定的保密要求。
-
速度
: LLM 是对处理器和内存都极为敏感的应用。虽然在本地单 GPU 机器上运行 LLM 在机密性和成本方面具有一定优势,但其速度远远比不上在云端服务上完成相同任务的速度。在云端 LLM 上只需几分钟的分析任务,本地 LLM 可能需要数小时才能跑完。雪上加霜的是,一旦模型与上下文超出可用的 GPU 显存,LLM 就可能切换到使用 CPU 而非 GPU ( 或在使用 GPU 的同时叠加 CPU ) ,从而让整个流程变得更加缓慢。
IDA Pro MCP 服务器
一个 MCP 服务器通常由两部分构成。其一是运行在反汇编器内部的插件,负责执行用户请求的各类操作,例如重命名函数和变量、获取某个函数的反汇编或反编译结果,或者插件所实现的任何其他任务。这些功能以远程过程调用 ( RPCs ) 的形式实现,并通过 MCP 服务器以”工具”的形式对客户端开放。
其二是 MCP 服务器本身,它负责与插件进行交互,并等待来自 MCP 客户端的指令。该服务器使用 Server Sent Events (SSE) 协议与客户端通信,并将插件中配置的工具对外暴露。每款 MCP 服务器都会实现自己的一套工具,因此选择最契合需求的方案就由用户来决定。下面列出了部分现有的、面向 IDA Pro 或 Ghidra 的 MCP 服务器:
- https://github.com/LaurieWired/GhidraMCP
- https://github.com/suidpit/ghidra-mcp
- https://github.com/mrexodia/ida-pro-mcp
- https://plugins.hex-rays.com/mxiris-reverse-engineering/ida-mcp-server
- https://github.com/fdrechsler/mcp-server-idapro
- https://github.com/taida957789/ida-mcp-server-plugin
- https://github.com/JusticeRage/Gepetto
综上,下面汇总一下我们为本次研究所搭建的环境组件:
- 基于 Ollama 与 Devstral 的本地模型
- Anthropic 的 Claude Sonnet 3.7 作为云端 LLM
- 由 Duncan Ogilvie (Mrexodia) 开发的 MCP Server ,并在 IDA Pro 中完成插件配置
- 在 VSCode 中已安装并配置 Cline 插件
至于本次分析所使用的硬件配置,是一台搭载 AMD Ryzen 7 9800X3D 处理器 ( 主频 4.7ghz )、64Gb DDR5 6000 内存、3Tb SSD 以及一块 NVIDIA 5070 Ti 16Gb GPU 的台式机,整体可归类为中高端消费级桌面配置。
使用 LLM 分析真实样本
借助前面定义的环境,我们来分析一个恶意文件,并对比人工分析、本地 LLM 和基于云的 LLM 三者的结果。我们选用的样本其实是一个较早的 IcedID 样本,它已经被广泛地逆向,并通过 Hex-Rays 的 Lumina 数据库 进行了文档化。这样一来,我们就有了一个共同的基准,可以比较不同 LLM 给出的结果。
这也意味着这些分析结论可能已经进入了两个模型的训练数据,从而影响输出结果;不过我们的目的是比较两种 LLM 彼此之间的表现。
- 7412945177641e9b9b27e601eeda32fda02eae10d0247035039b9174dcc01d12
这是一个小样本,定义了大约 37 个函数,这一点在分析结果时很重要。一个包含数百个函数的更大样本会对分析产生不同的影响,我们将在后文讨论这一点。
创建提示词
要高效使用 LLM ,也许最重要的一步就是定义合适的提示词来查询模型。一个好的提示词不仅能让你在分析中获得更好的结果,还能让查询更便宜、完成得更快,同时降低产生幻觉的机会。
在这个示例中,我们采用了 Mrexodia在 他的 Github 页面上推荐的一个提示词模板,并在多次试验后进行了一些改进和调整,使其能够覆盖不同类型的分析。我们的设想是:让本地 LLM 和基于云的 LLM 都使用完全相同的提示词,并覆盖恶意软件分析过程中可能常见的三种典型场景:
- 从程序入口点开始的自上而下分析
- 弄清楚某个特定函数的作用以及它在应用程序中如何被使用
- 分析所有未知函数并对其重命名,从而让理解其余代码变得更容易
为了覆盖这些示例,我们设计了三条提示词 ( 图 2 – 4 ) ,它们将在所有讨论的场景中使用。
需要注意的是,这些提示词并未经过优化,绝对还有进一步改进的空间。例如,本地模型更适合较短的提示词和较少的执行步骤,以保持较小的输入上下文;而基于云的模型则更适合以简洁形式包含所有必要步骤的提示词,这样可以避免提交多个小提示词及其附带 MCP 指令所带来的额外成本。然而在本例中,这三条提示词都需要足够通用,以便不加改动地在所有场景中使用,从而进行公平的比较。
另一个重要提示是:我们没有在提示词中明确说明该文件是恶意的,因为这会导致模型假设每个函数都是恶意的,从而让分析结果产生偏差。
Your task is to analyze an unknown file which is currently open in IDA Pro. You can use the existing MCP server called "ida-pro" to interact with the IDA Pro instance and retrieve information, using the tools made available by this server. In general use the following strategy:
- Start from the function named "StartAddress", which is the real entry point of the code
- If this function call others, make sure to follow through the calls and analyze these functions as well to understand their context
- If more details are necessary, disassemble or decompile the function and add comments with your findings
- Inspect the decompilation and add comments with your findings to important areas of code
- Add a comment to each function with a brief summary of what it does
- Rename variables and function parameters to more sensible names
- Change the variable and argument types if necessary (especially pointer and array types)
- Change function names to be more descriptive, using VIBE_ as prefix.
- NEVER convert number bases yourself. Use the convert_number MCP tool if needed!
- When you finish your analysis, report how long the analysis took
- At the end, create a report with your findings.
- Based only on these findings, make an assessment on whether the file is malicious or not.
图 2。提示词 1 : 从入口点函数开始对样本执行自上而下的分析。
Your task is to analyze an unknown file which is currently open in IDA Pro. You can use the existing MCP server called "ida-pro" to interact with the IDA Pro instance and retrieve information, using the tools made available by this server. In general use the following strategy:
- what does the function sub_1800024FC do?
- If this function call others, make sure to follow through the calls and analyze these functions as well to understand the context
- Addditionally, if you encounter Windows API calls, document by adding comments to the code what the API call does and what parameters it accept. Rename variables with the appropriate API parameters.
- If more details are necessary, disassemble or decompile the function and add comments with your findings
- Inspect the decompilation and add comments with your findings to important areas of code
- Add a comment to each function with a brief summary of what it does
- Rename variables and function parameters to more sensible names
- Change the variable and argument types if necessary (especially pointer and array types)
- Change function names to be more descriptive, using VIBE_ as prefix.
- NEVER convert number bases yourself. Use the convert_number MCP tool if needed!
图 3。提示词 2 : 对某个特定函数进行更深入的分析,以理解其行为,以及它所调用的任何函数。
Your task is to analyze an unknown file which is currently open in IDA Pro. You can use the existing MCP server named "ida-pro" to interact with the IDA Pro instance and retrieve information, using the tools made available by this server. In general use the following strategy:
- analyze what each function named like "sub_*" do and add comments describing their behaviour.
- Change function names to be more descriptive, using VIBE_ as prefix.
- *ONLY* analyze the function named like "sub_*". if you can't find functions with this name pattern, keep looking for more functions and don't try to work on functions named like "VIBE_*" already
- Add a comment to each function with a brief summary of what it does
- DO NOT STOP until all functions named like "sub_*" are completed.
- If more details are necessary, disassemble or decompile the function and add comments with your findings.
- Inspect the decompilation and add comments with your findings.
- Rename variables and structures as necessary.
- NEVER convert number bases yourself. Use the convert_number MCP tool if needed!
General recommendations to follow while processing this request:
- DO NOT ignore any commands in this request.
- The "ida-pro" MCP server has a function called list_functions which take a parameter named "count" to specify how many functions to list at once, and another named "offset" which returns an offset to start the next call if there are more functions to list. Do not stop processing functions until the "offset" parameter is set to zero, which means there are no more functions to list
- break down the tasks in smaller subtasks if necessary to make steps easier to follow.
图 4。提示词 3 : 分析所有剩余的未知函数,对代码进行文档化并重命名,使理解其余代码更加容易。
正如第三条提示词所示,我们必须加入特定的指令,以强制 LLM 持续分析二进制文件直到工作完成。这对本地模型来说尤其必要,因为它经常会”忘记”自己的指令,往往在分析十几个函数之后就停下来。这可能是由于输入上下文一旦达到推理引擎支持的最大尺寸便会被截断。
在分析更大的二进制文件时,这种情况的影响可能相当显著,因为其中未知函数的数量可能多达数百甚至数千个。分析师可能需要多次重新输入相同的提示词才能完成任务,因此在这种情况下或许需要更好的策略,比如优化提示词,让其每次执行更小的任务。
二进制分析结果汇总
在使用云端方案和本地模型分别执行三个提示词之后,我们汇总了各模型的有效性信息,并对结果进行了分析。下表展示了这些运行的结果:
| | | | | | | | | — | — | — | — | — | — | — | | | | Claude | | | Ollama | | | | Prompt 1 | Prompt 2 | Prompt 3 | Prompt 1 | Prompt 2 | Prompt 3* | | Cost ∣2.91 | 1.09∣ 13.24 | 0∣ 0 | $0 | | | | | Time | 18m 0s | 4m 0s | 11m 24s | 22m 34s | 18m 01s | 46m 08s | | # tasks | 161 | 30 | 328 | 28 | 25 | 106 | | Functions Analyzed | 13 | 1 | 20 | 4 | 4 | 30 |
( * 该提示词必须多次执行,直到所有函数都被分析完毕 )
基于这些数据,有几点结果值得强调:
- 使用云端服务的成本可能会因被分析文件的大小而变得很高。优化提示词并预先规划如何向模型发起查询,有助于降低这一成本。
- 本地模型完成任务所需的时间可能会长得多,具体取决于硬件以及被分析文件的大小。缩小分析范围、减小提示词长度和上下文窗口大小,可以让模型更多地使用 GPU ,从而缩短耗时。在本次测试中,上下文窗口被限制在 100,000 tokens ,这导致 CPU/GPU 的使用率约为 60%/40% 。更小的上下文窗口会因上下文被截断而引发过多幻觉,而更大的上下文窗口又会占用过多 CPU ,使查询完成时间成倍增加。
- 云端模型执行的任务数量远多于本地模型,这意味着它在分析样本时更为彻底。从下面的结果中可以清楚地看到这一点:云端模型生成的代码注释更完善,分析结果也更接近预期。这并不意外,因为相比本地模型,云端模型可以使用大得多的输入上下文。上下文的缺乏有时会导致本地模型 “忘记” 指令,在分析进行到一半时就停下来。
对比结果:人工 vs. 云端 LLM vs. 本地 LLM
我们在一个未经人工分析的干净 IDA 数据库上分别运行每个提示词完成测试。对于本地模型,由于上下文窗口大小的限制,每个提示词都作为独立任务执行,不保留来自上一个提示词的上下文。而云端测试则作为一个连续的单一任务来完成,也就是说每个提示词都发送在与上一个提示词相同的聊天窗口中,以保留先前分析的上下文。
随后我们将这些结果与同一个样本中由 Lumina 数据填充的版本进行对比,后者包含针对每个函数的人工分析。图 5 详细展示了对比结果,其中每一行代表三次测试中的同一个函数:
图 5。人工分析与 LLM 结果在根据行为重命名函数方面的对比。
通过查看函数名并与人工分析进行比较可以发现,两种模型都得出了接近预期的结果。请记住,在开始分析之前,模型并不知道文件类型,也不清楚它是否具有恶意性。
在某些情况下,我们甚至能看到云端模型在函数名中提供了比人工分析更多的上下文信息,例如 “VIBE_CountRunningProcesses” 和 “VIBE_ModifyPEFileHeaderAndChecksum” 。
当审视带注释的代码时,本地 LLM 与云端 LLM 之间的效率差异就更加明显了。我们在 prompt 中要求 LLM 在分析代码时执行以下任务:
- “将变量名和函数参数名重命名为更合理的名称。”
- “在必要时更改变量与参数的类型。”
- “检查反编译结果,并在重要的代码区域添加注释来记录你的发现。”
- “如果遇到 Windows API 调用,请通过添加注释来说明该 API 调用的功能以及它接受哪些参数。”
观察那个负责向服务器发起 HTTP 请求的函数的结果可以发现,本地 LLM 完成了其中的一部分任务,但并没有彻底地重命名所有变量:
图 6。由本地 LLM 注释的示例函数,可以看到部分变量并未按预期被重命名。
函数开头的注释非常简单,而且并非所有变量都被重命名,许多变量仍在使用 IDA Pro 反编译器生成的默认模板名称,例如 “v15″、”v28” 或 “v25″。
对 Windows API 调用的注释也相当简略,只是基本描述了该函数的用途,以及它所接受的参数及其类型。
云端 LLM 与本地 LLM 方案在函数分析上也存在切实的差异。
图 7。与上一个示例中相同的函数,但这次由云端 LLM 进行注释,结果更接近预期。
代码清晰得多,变量都被重命名为更合理的名称,而注释也更具洞察力,能够描述函数的实际行为。我们还发现,相比本地模型,云端模型为更多的代码行添加了注释。
基于以上内容可以看出,将 LLM 与 MCP 服务器结合使用,能够极大地帮助分析人员理解未知代码,并改进对恶意文件的逆向工程过程。
快速分析所有二进制函数并将其重命名为合理名称的能力,可以为反汇编或反编译代码提供更多上下文,从而加速分析过程,让分析人员能够将精力集中在更复杂的代码或混淆部分上。
已知问题与局限性
在恶意软件分析中使用任何自动化工具都存在一定问题,用户必须采取适当的预防措施,这一点对于任何涉及计算机安全的事务都同样适用。本应用程序也存在一些可能阻碍其广泛采用的局限性,例如:
-
使用成本
: 语言模型的使用通常伴随着按用户输入或模型生成的每个 token 计费的高昂成本。在分析包含数百个函数的复杂恶意软件时,这种成本会迅速累积,使其作为解决方案变得不切实际。这一问题在使用 MCP 工具时尤为突出,因为它们会向用户提示词中添加自己的内容,其中包含工具的使用说明。这些内容还包括从分析中提取的任何文本,例如字符串和反汇编/反编译清单,当所有这些内容汇集在一起时,一次简单的查询就可能消耗数十万个 token。
-
时间开销
: 使用这些工具的分析师不仅需要考虑等待响应所花费的时间,还需要考虑设计最高效提示词以在降低成本的同时最大化结果所花费的时间。本地模型虽然可以降低成本,但也会显著增加输出结果的时间。
-
恶意工具
: 由于 MCP 服务器是一项较新的技术,且应用于一个发展极为迅速的领域,因此面向希望将 LLM 应用于工作的用户的工具和应用程序大量涌现。市面上存在各种各样的 MCP 客户端,以及同样众多的市场,人们可以在这些市场上传他们的 MCP 服务器供任何人使用。用户需要保持警觉,审慎考虑自己所使用的工具,因为这些应用程序可能有意或无意地包含恶意代码,从而危及使用它们的研究人员。
-
漏洞
: 与其他计算机应用程序一样,MCP 协议和 LLM 也存在可被利用的攻击面,攻击者可通过多种方式危害所生成的数据或用户的实际机器。提示注入、MCP 工具投毒、工具权限滥用以及其他技术都可能被用于破坏生成的数据、窃取敏感数据、暴露机密代码或令牌,甚至远程执行代码。
IDA Pro MCP 服务器安装
既然我们已经看到本地模型在协助分析师对恶意文件进行逆向工程方面的实用价值,接下来让我们学习如何搭建相应的环境。
安装和配置一个与反汇编器配合使用的 MCP 服务器,其过程可能因您计划使用的软件技术栈不同而有所差异,但为了让读者对整个流程有所了解,并探讨一些可能影响结果的注意事项,我们将回顾一个与 IDA Pro 集成的 MCP 服务器的安装过程。如果您使用的是不同版本,或者您更倾向于使用 Ghidra 而非 IDA Pro ,整个过程也将非常相似。
关于如何为 Ghidra 反汇编器安装和配置 MCP 服务器,在 Laurie Wired 的 Github 上有一份很好的教程。该页面所描述的过程与此处展示的内容非常相似。
安装 Ollama 本地 LLM
安装 Ollama 非常简单,只需使用其官网提供的安装程序即可。安装完成后,您可以使用以下命令下载计划使用的模型。本例中我们使用的是 Devstral :
ollama pull devstral:latest
模型下载完成后,您可以使用命令 “ollama serve” 以服务器模式运行 Ollama。在服务器运行后的任何时刻,您都可以使用命令 “ollama ps” 来列出正在运行的模型的相关信息。该命令将给出已加载模型的信息,以及它当前所占用的 CPU 与 GPU 内存。如前所述,这些信息有助于理解您所选择的模型和上下文将如何影响性能。
图 8。本地 LLM 在处理前文所示某个提示词时,处理器和 GPU 使用情况的示例。
注意:如果运行 Ollama 的机器与运行 MCP 服务器和 IDA 的机器并非同一台,您可能需要启用 Ollama 以监听任意网络接口上的连接,因为它默认仅监听本地回环接口。为此,您需要创建一个系统范围的环境变量:
OLLAMA_HOST=0.0.0.0:9999
此示例指示 Ollama 监听任意接口,并将服务器端口设置为 9999。您需要确保此端口可从运行 MCP 客户端的机器访问,才能使配置生效。
安装 MCP 服务器及 MCP IDA Pro 插件
安装 Mrexodia 的 MCP 服务器同样相当简单,但如果您使用的是 IDA Pro ,在开始安装之前有一个重要的步骤需要完成。该服务器需要 Python 3.11 ,并会安装多个 Python 模块以正常运行。这些模块需要能从 IDA Pro 内部的 Python 环境中访问,而 IDA Pro 默认自带其自身的 Python 安装。为确保 IDA Pro 和 MCP 服务器使用相同的版本,您需要确保 IDA 使用的是您默认路径中的同一 Python 版本。
这可以通过 IDA Pro 安装文件夹中提供的一个工具来完成。在本例中,我们使用的是 IDA Pro 8.5 ,因此该工具位于 “c:Program FilesIDA Pro 8.5idapyswitch.exe” 。运行该工具将列出当前已安装的 Python 版本,并让您选择 IDA 将使用的版本:
图 9。使用 IDApyswitch 工具为 IDA 选择正确的 Python 版本的示例。
一旦 IDA 使用的 Python 版本与 MCP 服务器所需的版本一致,您便可以按照其 Github 页面的流程安装服务器:
pip uninstall ida-pro-mcp pip install git+https://github.com/mrexodia/ida-pro-mcp ida-pro-mcp --install
此操作将安装所需的模块,并将 IDA Pro 插件复制到其相应的位置。最后一步是运行 MCP 服务器。如果您在 VSCode 中使用 Cline 或 Roo Code ,这一步是必需的,因为这些工具与由客户端直接运行的服务器配合得并不顺畅。要运行 MCP 服务器,请使用图 10 中的命令,并确保运行该命令的终端在整个分析会话期间保持打开状态。
图 10。从命令行运行 MCP 服务器的示例命令。
最后一步是确保 MCP 插件已在 IDA 内部正常运行。在反汇编器中打开一个文件后,您可以通过 “Edit->Plugins->MCP” 或使用快捷键 “Control+Alt+M” 来启动 MCP 插件组件。您应该会在 IDA 的输出窗口中看到一条消息,提示服务器已成功启动。
图 11。显示 MCP 插件在 IDA 中成功启动的消息。
安装并配置 MCP 客户端
最后一步是安装 MCP 客户端,它将作为连接所有其他组件的纽带。安装过程会因您所选择的工具不同而有所差异,但在本例中,我们将使用 VSCode 搭配 Cline 扩展。在 VSCode 中,进入扩展市场并搜索 Cline。点击 Install 按钮并等待安装完成。
左侧标签栏中将出现一个带有 Cline 扩展图标的新标签页。该界面便是您与 IDA Pro MCP 服务器和 LLM 进行交互的入口。
图 12。Cline 扩展的主界面。
点击右上角菜单中的齿轮图标,会进入配置页面,您必须在此处配置正在使用的 LLM 模型。选择 API 提供商后,您至少需要配置基础 URL 和模型名称,而基于云的模型还会要求提供 API 密钥。图 13 中的设置适用于在 Ollama 上运行的本地模型。
图 13。Cline 扩展的 LLM 配置页面。
下一步是在 Cline 中配置 MCP 服务器。Cline 通过这一步获知哪些服务器可用,以及每个服务器提供哪些工具。这些设置可以在右上角菜单中三条横线的图标里找到。
MCP 服务器可以在 “Remote Servers” 标签页中进行配置,或者您也可以直接编辑配置文件。图 14 中的示例展示了配置我们在上一步搭建的 MCP 服务器的两种方式:
图 14。Cline 扩展的 MCP 服务器配置。
完成上述配置后,您应当会在 “Installed” 标签页中看到类似图 15 的内容,这表明 Cline 已能够与 MCP 服务器和 IDA Pro 插件进行通信。
图 15。MCP 服务器可用工具列表。
至此一切就绪,您便可以开始使用 Cline 的聊天窗口查询当前打开的 IDA Pro 数据库并执行分析工作了。
覆盖范围
下面列出了我们的客户可用于检测和阻止此威胁的多种方式。
Cisco Secure Endpoint ( 前身为 AMP for Endpoints ) 非常适合用于阻止本文所述恶意软件的执行。可在此处免费试用 Secure Endpoint。
Cisco Secure Email ( 前身为 Cisco Email Security ) 可阻止威胁行为者在其行动中发送的恶意邮件。可在此处免费试用 Secure Email。
Cisco Secure Firewall ( 前身为 Next-Generation Firewall 与 Firepower NGFW ) 等设备 ( 例如 Threat Defense Virtual、 Adaptive Security Appliance 和 Meraki MX ) 可检测与此威胁相关的恶意活动。
Cisco Secure Network/Cloud Analytics ( Stealthwatch/Stealthwatch Cloud ) 可自动分析网络流量,并就每台联网设备上潜在的可疑活动向用户发出告警。
Cisco Secure Malware Analytics ( Threat Grid ) 可识别恶意二进制文件,并将相应防护能力构建到所有 Cisco Secure 产品之中。
Cisco Secure Access 是一款基于 Zero Trust 原则构建的现代云交付式 Security Service Edge ( SSE )。无论用户身处何地工作,Secure Access 均可为其提供对互联网、云服务或私有应用的无缝、透明且安全的访问。如有意申请 Cisco Secure Access 的免费试用,请联系您的 Cisco 客户代表或授权合作伙伴。
Umbrella 是 Cisco 的安全互联网网关 ( SIG ) ,无论用户是否处于企业网络之内,均可阻止其连接至恶意域名、IP 与 URL。
Cisco Secure Web Appliance ( 前身为 Web Security Appliance ) 可自动阻止潜在的危险站点,并在用户访问可疑站点之前对其进行检测。
更多结合您特定环境与威胁数据的上下文化防护,可通过 Firewall Management Center 获取。
Cisco Duo 为用户提供多因素身份认证,以确保仅授权人员可访问您的网络。
开源 Snort Subscriber Rule Set 用户可通过在 Snort.org 下载最新可购规则包,以保持规则的及时更新。
针对上述威胁的 Snort SID 为:
- Snort2: 58835
- Snort3: 300262
针对此威胁也提供相应的 ClamAV 检测特征:
- Win.Keylogger.Tedy-9955310-0
免责声明:本博客文章仅用于教育和研究目的。提供的所有技术和代码示例旨在帮助防御者理解攻击手法并提高安全态势。请勿使用此信息访问或干扰您不拥有或没有明确测试权限的系统。未经授权的使用可能违反法律和道德准则。作者对因应用所讨论概念而导致的任何误用或损害不承担任何责任。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:securitainment Guilherme Venere Guilherme Venere《将 LLM 当作逆向工程的得力助手》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论