Linux环境编译安装Ghidra教程


  • 2021.12.30 更新,换用了kali linux 2021.4版本环境,该环境不再集成JDK和Gradle
  • 2022.3.16 更新,gihub镜像地址hub.fastgit.org已经变更,新地址为hub.fastgit.xyz,地址更新发布页为:http://fastgit.org/ https://doc.fastgit.org/zh-cn/node.html,有条件的朋友可以去支持一下:)
  • 2022.3.17更新,gradle版本要求变更,kali linux 2022.1版本中,gradle安装无法通过先apt后覆盖的方式完成,只能下载,然后添加临时的环境变量,指定目标为gradle的bin目录,命令类似:export PATH=/usr/share/gradle/gradle-6.9.2/bin:$PATH,按实际安装gradle路径算,添加永久环境变量方法暂不明确,编辑/etc/profile方式在2022.1的kali下无效,希望有朋友能告知原因,谢谢:0

1、前言

Ghidra是由美国国家安全局(NSA)研究部门开发的软件逆向工程(software reverse engineering,SRE)套件,用于支持网络安全任务,此软件目前已经开源,对比IDA,Ghidra有着一定的优势。
笔者前段时间研究一道加花指令处理的逆向CTF题目,发现此题用Ghidra进行分析可直接无视花指令的问题,遂对Ghidra产生一定兴趣,由于笔者之前安装的是windows环境下的Ghidra(因为没找到Linux版的Ghidra),所以现在想试着编译安装一个Linux环境下的Ghidra,搜了一圈,发现目前网上没有一个较为完整的关于国内网络环境下Linux安装Ghidra的教程,故编写此文章,补足这一空白。

2、Ghidra编译准备

进入正题,Ghidra既然开源,那么就意味着我们可以在github上找到其源代码:

https://github.com/NationalSecurityAgency/Ghidra

在此页面中,详细阅读readme,可以发现我们编译执行的基本环境要求和相关命令:

JDK 11 64-bit
Gradle 6.8+ or 7.x
make, gcc, and g++ (Linux/macOS-only)
Microsoft Visual Studio (Windows-only)

笔者这里使用kali linux 2021.1版本进行安装,此版本的kali已经集成了OpenJDK 11,Gradle 4.x(具体版本号忘了,但可以确定低于6.8版本),以及make、gcc、g++三件套,可以看到,只有Gradle版本不符合要求。
如果是其他的linux环境,可在shell中用以下命令确认这些工具是否安装,以及版本是否符合要求:

java --version
javac --version #用于确认是否安装JDK环境
gradle -v
make -v
gcc -v
g++ -v

通过返回的打印值即可确认版本是否正确,以及是否安装,其中,JDK和Gradle的安装可能比较麻烦,make,gcc,g++直接通过apt或yum安装即可。

这里我们使用的kali linux 2021.1系统集成了大部分工具,只有Gradle版本不符合要求;
按照分析,接下来完成准备工作,首先下载ghidra源代码

#通过git clone的方式下载:
cd ~
git clone https://github.com/NationalSecurityAgency/ghidra.git

#当然你也可以手动下载压缩包,放到对应目录中,然后在该目录下执行:
unzip ghidra-master

到这里,我们下载好了Ghidra的源代码。若未安装或JDK版本不符合要求,则重新安装JDK包,并更改JAVA_HOME环境变量值,其他基础组件同理,笔者以kali linux 2021.1系统演示,JDK、make、gcc、g++均符合要求,唯一只有Gradle版本过低,接下来修复这一问题:

#下载并解压Gradle(版本为v6.0以上即可,修改下面的命令即可找到需要的版本):
wget wget https://downloads.gradle.org/distributions/gradle-6.9.2-bin.zip
unzip gradle-6.9.2-bin.zip

kali linux 2021.1版本中,已经自带一个Gradle,说明此Gradle的环境变量配置已经设置好,我们可以采用覆盖的方式完成升级,通过find命令,可以找到自带的Gradle在/usr/share路径下,首先备份:

sudo apt-get install gradle #2021.4版本的kali需要补充下载gradle
#但是这里下载到的gradle仍为4.4的版本,不符合要求,所以还是需要后面的覆盖
#理论上也可以手动下载gradle之后配置linux环境变量信息,笔者没有试过QAQ
sudo cp -r /usr/share/gradle /usr/share/gradle_bak

然后将我们解压出的文件覆盖过去,在解压出新版本的Gradle的文件夹下执行:

sudo cp -r ./gradle-6.9/* /usr/share/gradle
#复制完成后执行下面一条命令,确认版本是否替换:
gradle -v

3、Ghidra编译安装

按照github上的提示,下一步应该要执行以下命令安装更多的支持组件,但我们这里直接运行此命令,会由于国内网络问题卡较长一段时间,甚至可能因为超时而导致安装失败,所以需要处理一下:

#切换到Ghidra源代码所在目录:
cd ~/ghidra
#然后执行
gradle -I gradle/support/fetchDependencies.gradle init

这句命令最终的效果是去“执行”ghidra目录下的/gradle/support/fetchDependencies.gradle init文件,我们打开这个文件看看:
fetchDependencies.gradle init文件内容
可以看到,文件内部有大量的url、文件名、还有哈希校验值,后续继续看,会发现实际上执行上面的命令会通过这个文件的指导,去对应的url处下载对应文件,问题出在国内网络环境中,github.com最近有不稳定的现象,其他几个类似谷歌的url无法确定是否能正常访问,接下来解决这个问题:

github最近下载不稳定的问题可以通过更换国内镜像的方式解决,批量替换/gradle/support/fetchDependencies.gradle init文件内github.com的地址为以下镜像源中的任意一个:

#推荐用第一个,笔者安装时使用的就是第一个(^_^)
https://hub.fastgit.xyz/
https://github.com.cnpmjs.org/
https://git.sdut.me/

github以外的链接可以正常访问,速度不算快,建议安装时在本机用浏览器访问一次,确认正常。
更改好文件并保存后,切换回Ghidra源代码目录,执行:

gradle -I gradle/support/fetchDependencies.gradle init

此时安装依赖的步骤即可开始,此步耗时较长,建议挑不急的时候跑这个命令
注意:
在不具有JDK环境,仅有JRE环境时,编译会报错:

Task :createJavadocs FAILED

FAILURE: Build failed with an exception.

What went wrong:
Execution failed for task ':createJavadocs'.
Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): '/home/intern/Desktop/git/ghidra/build/tmp/createJavadocs/javadoc.options'

Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.8.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 25s
95 actionable tasks: 1 executed, 94 up-to-date

关键信息在于那句:Javadoc generation failed.
这是由于环境中缺少JDK,因而导致编译失败,需要补充下载JDK环境:

sudo apt-get install openjdk-11-jdk

这样,基本准备工作就完成了

安装好依赖后,即可开始编译文件,用以下命令:

gradle buildGhidra

编译过程会有部分报错,但能正常编译,并且也似乎不影响Ghidra正常使用(迷惑),编译完成后,可以在Ghidra源代码目录下找到build文件夹,该文件夹下的dist文件夹中会生成编译好的Ghidra压缩包,执行以下命令,解压压缩包:

unzip ./build/dist/ghidra_10.0_DEV_20210529_linux64.zip
#此处解压文件名按具体压缩包文件名确定

然后再切换到解压出来的文件夹中,执行:

./ghidraRun

即可启动编译好的Ghidra使用了:
启动的Ghidra
最后附上编译好的Ghidra的linux版本的压缩包文件:
链接:https://pan.baidu.com/s/16ezvBf82BZ40b7vnZWK7JQ
提取码:4287

注意,使用此压缩文件需要Liunx环境中安装有JDK11及以上的java版本,解压后运行./ghidraRun即可启动Ghidra,首次运行,需要手动指定JDK安装路径

最后,如果想要将ghidra集成到kali的快速启动菜单,参考以下路径的配置文件,修改一个配置文件出来即可

/usr/share/applications

添加快捷方式可以参考文章:
https://blog.csdn.net/Wu000999/article/details/99289139

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值