更新的演示即将推出!
逆向工程助手 (ReVA) 是一个为逆向工程任务构建与反汇编程序无关的 AI 助手的项目。这包括离线和在线推理以及简单的架构。
ReVa 与其他为 RE 任务构建 AI 助手的努力不同,因为它使用工具驱动的方法。 ReVa旨在为LLM提供各种小工具,就像您的RE环境为您提供了一套小工具一样。 ReVa 将此方法与推理链技术相结合,使法学硕士能够完成复杂的任务。
提供给法学硕士的每个工具都旨在易于法学硕士使用并容忍各种输入并减少法学硕士的幻觉。我们通过为法学硕士提供模式但容忍其他输入来做到这一点,包括指导法学硕士的描述,并将可纠正的错误重定向回法学硕士,并包括额外的输出以指导法学硕士的下一个决策。
例如,当 LLM 请求从您的 RE 工具进行反编译时,我们将接受十六进制的原始地址、基数为 10 的原始地址、带有命名空间的符号名称或符号。如果法学硕士给我们提供了错误的输入,我们会将其报告给法学硕士,并附上纠正输入的说明(例如,可能鼓励它使用函数列表)。为了鼓励像人类一样探索,我们报告了额外的上下文,例如命名空间和交叉引用以及反编译,这是使法学硕士以与人类相同的方式探索二进制文件的一个小推动。
使用这种技术,您可以提出一般性问题并获得相关答案。该模型优先考虑来自工具的信息,但当没有信息时,它仍然可以回答训练中的一般问题。
您可以提出以下问题:
__mod_init
段的用途。mmap
返回什么?逆向工程的一个重要组成部分是过程。许多其他工具只是询问法学硕士的一个问题,这意味着很难确定事情发生的原因。在 ReVa 中,我们将所有行动分解为小部分,并在输出中包含法学硕士的想法。这使得分析师能够监控法学硕士的行动和推理,如果需要的话,可以中止和更改提示。
RevA基于langchain,支持多种模型。
提供内置支持:
有关提供程序设置的更多信息,请参阅配置。
如果 langchain 支持,添加额外的推理服务器很容易。
ReVa 的配置位于 CodeBrowser 工具选项中。打开程序并转到编辑 -> 工具选项 -> ReVa。
有以下选项:
有针对提供商的部分。
默认情况下,OpenAI 密钥是从环境变量OPENAI_API_KEY
加载的。您还可以在 Ghidra 中设置密钥。将密钥设置回OPENAI_API_KEY
值将从 Ghidra 配置中清除密钥并从环境中加载它。
您还可以选择型号。默认情况下选择gpt-4o
。该模型与 ReVa 提供的工具和提示配合使用效果最佳。
gpt-4
也能很好地工作,但速度很慢,并且需要用户更多提示才能探索二进制文件。
Ollama 是本地推理服务器。默认服务器设置为 localhost,使用默认 Ollama 端口。如果您想在远程计算机上执行推理,可以将其更改为远程服务器。这对于自行托管的组织很有用。
您还可以选择型号。该模型必须已加载到服务器上。良好的性能表现如下:
mixtral
llama3
phi
RevA 有一个两步工作流程。
ReVa 使用 RE 工具的扩展来执行分析。请参阅下面的 Ghidra 支持。
为了提出问题并运行推理,提供了命令行工具。运行reva-chat
以开始聊天会话。此命令将找到您打开的 Ghidra 并连接到它。要打开新的聊天,请在另一个终端中再次运行该命令。
如果您打开了多个 Ghidra,您可以使用reva-chat --project ${project-name}
选择正确的一个,如果未设置, reva-chat
会询问您要连接到哪个项目。
为了在reva-server
和扩展之间进行通信,使用了 gRPC。您可以阅读更多相关信息(此处)[./DEVELOPER.md]。从这些协议定义构建源文件是由 Makefile 驱动的。要构建协议源代码文件,请在项目的根目录中运行以下命令:
make protocol
首先安装python组件,我喜欢使用pipx
。使用如下命令安装它:
pip install pipx
在reverse-engineering-assistant
文件夹中,运行:
pipx install .
安装 python 项目后,pipx 可能会警告您需要将文件夹添加到 PATH 环境变量中。确保该文件夹(现在包含reva-server
和reva-chat
)位于您的 PATH 变量中。 pipx 可以使用以下命令为您完成此操作:
pipx ensurepath
该扩展需要启动reva-server
,并且您需要运行reva-chat
。如果您不想将它们添加到 PATH,请参阅配置部分以了解如何设置可执行文件的路径。
一旦扩展程序启动了reva-server
,就可以开始聊天了:
reva-chat
必须安装 Python 包才能使 Ghidra 扩展正常工作!
按照 ghidra-assistant 插件中的说明进行操作。
安装后,在 CodeBrowser 工具中启用ReVa Plugin
扩展(打开文件并单击:文件 -> 配置 -> 其他)。
如果您希望默认启用 ReVa,请单击文件 -> 保存工具来保存配置。
如果一切正常,您将在菜单栏上看到 ReVa 菜单。
您可以在Edit -> Tool Options -> ReVa
中修改插件配置。
每当 ReVa 执行一个操作时,它都会为每个操作创建一个撤消点。如果 ReVa 重命名 5 个变量,这将是一次撤消。
ReVa 在 CodeBrowser 工具的窗口菜单中添加了一个选项。选择窗口 -> ReVa 操作日志以打开 ReVa 操作日志窗口。
此窗口显示 ReVa 已执行和想要执行的操作。您可以通过双击 ✅ 或 图标来接受或拒绝更改。您还可以通过双击地址转到将执行操作的位置。
如果您拒绝某项操作,ReVa 将收到通知并继续前进。
您还可以在 ReVa 选项中启用“自动允许”。这将自动接受 ReVa 想要执行的所有操作。
ReVa 还向 Ghidra UI 添加了一些元素。您可以要求 ReVa 在聊天窗口中执行某些操作,“详细检查main
中的变量用法,使用更具描述性的名称重命名变量。”,或者使用菜单系统。
例如,您可以右键单击反编译中的变量,选择Reva -> 重命名变量,ReVa 将执行该操作。
你喜欢我的工作吗?想要支持这个项目和其他项目吗?对这个项目的设计和建造感兴趣吗?这个项目和许多其他项目都是在我的直播中构建的:https://twitch.tv/cyberkaida!