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