夜雨聆风学习资料网

ARTICLE · 1157718

基于AI的软件逆向工程工具(REA)---配置和连接工具

基于AI的软件逆向工程工具(REA)---配置和连接工具

1. 引言

在【基于AI的软件逆向工程工具(REA)---安装和测试】中,安装了REA并通过基础测试,显示注册REA的MCP服务能够正常通讯,但RocPlane示例并没有发挥REA的作用,得出的结果依赖于大语言模型的解释,需要配置逆向工程工具才能使REA真正工作。
2. 逆向工程工具Ghidra

逆向工程领域有许多专用的工具,例如:

  • [Ghidra] 免费、开源,反汇编、反编译和脚本分析功能完整

  • [IDA Pro] 商业逆向工程工具,生态成熟,常用于复杂二进制分析

  • [Binary Ninja] 提供多层中间表示,便于自动化分析和程序分析开发

  • [x64dbg] Windows 动态调试器,适合运行程序时设置断点、查看寄存器和内存

  • [dnSpy] 主要用于.NET程序的反编译与调试

当前REA可以配置三种逆向工程工具:Ghidra、Hopper和IDA,Windows系统下只能连接Ghidra和IDA,Hopper必须在macOS或Linux系统中才能使用。目前的测试仅连接了Ghidra,因此下面仅对Ghidra作简要解释。

2.1 Ghidra的主要功能

Ghidra是一款免费的开源软件逆向工程工具,由美国国家安全局(NSA)开发并于2019年公开发布,它主要用于分析程序的机器码,帮助工程师理解一个没有源代码的程序是如何工作的。Ghidra的主要功能包括:

(1) 反编译(Decompilation)--将二进制程序中的机器码转换成类似C语言的伪代码;

(2) 反汇编(Disassembly)--将机器指令转换为汇编语言,分析CPU执行逻辑;

(3) 函数分析--识别程序函数、参数、返回值和函数之间的调用关系;

(4) 数据结构分析--推断结构体、类、变量、指针及内存布局;

(5) 程序逻辑还原--分析算法、条件分支、循环和数学计算;

(6) 二进制文件分析--分析EXE、DLL、Linux ELF等可执行文件;

(7) 恶意软件分析--识别可疑代码、隐藏功能、后门及恶意行为;

(8) 脚本自动化--使用Python(通过Ghidra的PyGhidra等接口)或Java自动分析大量函数。 

需要注意的是,Ghidra反编译得到的是伪代码,不是原始源代码。原始变量名、注释、部分类型信息及高级语言结构可能已经丢失,因此还原结果需要人工判断。

2.2 Ghidra的主要作用

在普通的非恶意的逆向工程实践中,Ghidra的主要作用可以概括如下:

(1) 没有源代码,分析程序算法--例如,希望知道一个.exe文件的某个函数如何计算结果、如何判断输入参数,或者为什么会返回特定数值。

(2) 分析函数和调用关系--追踪一个函数被哪些模块调用、参数从哪里传入,以及程序如何执行某个计算流程。

(3) 分析商业软件的内部实现--对于缺少源码的工程软件,可以研究部分数值计算函数、数据处理流程及底层调用。不过,复杂算法不一定能够完整还原。

2.3 安装Ghidra

使用下面的命令安装Ghidra并更新与REA的连接:

$env:GHIDRA_INSTALL_DIR = "C:/geotech/ghidra_12.1.4_PUBLIC"$env:JAVA_HOME = "C:/geotech/jdk-21"npx -y rea-agents@latest doctor --provider ghidra --jsonnpx rea-agents@latest setup

如果安装成功,便可以使用REA了。

3. REA测试

我们仍以RocPlane软件进行测试,之所以选择这个软件,是因为它的工作原理简单,可以目测REA的运行过程和结果。这次的测试要求是找出Rocplane软件是如何计算安全系数(FOS)的。在运行之前,首先删除了目录下所有的类文本文件,如html, txt, xls等类文本文件,只保留不可以直接读写的二进制文件,如exe, dll等,这样做的目的是为了避免可读文件对逆向过程造成干预。不过,在逆向过程中仍然发现它联网查找了RocPlane的相关文档,包括:

  - RocPlane Theory Manual---Factor of Safety Calculations for Planar Failures

  - RocPlane Verification Manual

  - RocPlane --- How Bolts are Implemented

  - RocPlane Verification and Theory

因此,目前有一个疑惑,它最后给出的计算FOS的代码(rocplane_fos.py)究竟是根据逆向工程作出的还是主要依靠这些文档所述的原理产生出来的。

Ghidra主要用于静态分析,如果需要观察程序实际运行时的变量、内存变化或函数返回值,通常还需要结合动态调试工具。在当前的测试中,没有依靠外部工具,作了一次动态脱壳,当然前提条件是需要通过其许可证/HASP检查,并进行内存转储,分析了将近20分钟,展示了RocPlane真实的计算过程。

4. 结束语

通过动态脱壳和内存转储成功恢复了RocPlane 4.0.1.2的真实计算过程,找到了安全系数计算函数和剪切强度模型函数的地址,证明RocPlane默认使用的Mohr-Coulomb平面滑动模型其安全系数就是Hoek & Bray提出的平面破坏极限平衡理论。需要说明的是,一方面,这仅是一个示例,目的是为了测试REA的性能,没有什么实际意义;另一方面,对任何人来说,使用REA的主要意图是为了加速理解和学习软件的框架和原理,而不是为了破解软件。 

相关学习资料