摘要:本文对GhidraDec进行编译和测试,以了解GhidraDec,基本手段是解决编译过程可能遇到的问题和测试对比该插件与原生Ghidra反编译效果,无甚特色。
关键词:Ghidra,IDA,RetDec,反编译
GhidraDec是一款用于IDA Pro的插件,主要目的是在IDA中使用Ghidra的反编译器(decompiler.exe),即类似IDA的F5伪码反编译功能,并非反汇编功能。由于Ghidra 9.x和10.x版本间的协议差异,GhidraDec只支持Ghidra 10.x版本的反编译器,兼容IDA 6/7x版本。支持Ghidra和IDA所支持的处理器。更多信息参考官方说明:
(1) 官仓: https://github.com/GregoryMorse/GhidraDec
(2) Ghidra支持的处理器列表: https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Processors
(3) IDA支持的处理器列表: https://hex-rays.com/products/ida/processors/
这里主要为Windows 10 x64的IDA Pro 7.5编译GhidraDec插件
(1)由于是IDA Pro 7.5的插件,别无二选是IDASDK75;
(2)参考IDASDK75\readme.txt,这里我们选择Visual Studio 2017;
(3)这里我们使用win_flex_bison,版本尽量2.x以上(参考附件);
(4)这里我们使用VC编译环境,搭配cmake进行编译;
(5)git是搬运github代码必备。
图2-1 官方说明的编译要求
我们主要通过cmd.exe命令行完成编译。
(1)启动cmd.exe,初始化Visual Studio 2017 x64编译环境;
(2)添加cmake、win_flex_bison、git路径到path环境变量;
(3)搬运GhidraDec和Ghidra代码;
说明,搬运Ghidra主要是使用 Ghidra\Features\Decompiler\src\decompile目录的源码,本次编译测试中需要修正decompiler.cpp源码,附件提供了修正版,如果使用附件的decompile目录代码,也可以忽略下载ghidra代码;虽然GhidraDec有decompile9源码,考虑到官方提到的只支持Ghidra10.x,这里直接使用目前最新的10.x版本源码,至于直接修改decompile9为decompile行不行,这里未作测试。
注意:如果环境除了win_flex_bison外,也有其他bison,为避免其他版本可能较低或是其他环境专属带来的干扰,
需要修改GhidraDec\CMakeLists.txt的下述行内容,挑战win_bison的为优先查找顺序。
图2-2 设置win_bison优先于其他版本bison
(1)cmake配置和编译
应当注意到,下述-DIDA_SDK_DIR应设置为实际的IDASDK75路径。
(2)可能出现的错误与解决方案
A、"unrecognized: %destructor"错误。这一般是由于bison版本过低造成,换较高版本bison解决。
B、error C2398: 元素“2”: 从“const color_t”转换到“_Elem”。这是编译器太高端所致,这里需要修改decompiler.cpp的源码进行排错。
图2-3 混合char与uchar引起的C2398错误
(3)将GhidraDec\build\Release目录下的GhidraDec插件ghidradec.dll、ghidradec64.dll复制到IDA的plugins目录即可完成安装。
A、设置decompiler.exe的目录。选择“Options|GhidraDec plugin opitons"进行配置,然后选定ghidra的安装目录,
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-7-5 17:42
被tritium编辑
,原因: