NSA开源逆向工具Ghidra入门使用教程

NSA开源逆向工具Ghidra入门使用教程

安全运营 奇安信威胁情报中心 2019-03-07

Ghidra具有反编译功能,查看、定位反编译后的代码相较于IDA有优势。不过在使用过程中发现其处理某些混淆后代码的能力还比较欠缺,在一些界面功能上也还有较大的差距。

背景

昨天,在刚刚举办的RSA大会上,NSA发布了一款功能强大、免费的开源逆向分析工具:Ghidra。该反汇编工具类似于我们常用的IDA,不过其基于JAVA开发,是一款适用于Windows、Mac和Linux的跨平台反汇编工具,用户还可以使用Java或Python开发自己的Ghidra插件或者脚本。2017年维基解密在Vault 7中首次曝光了Ghidra,该信息来自于中央情报局(CIA)的内部文件,Ghidra在过去数年里一直被用于NSA相关的网络安全任务当中。

360威胁情报中心第一时间对该工具进行了详细分析,梳理了相关说明文档、具体的安装使用方法,以及该软件的相关趣闻解读,带你详细了解这款强大而神秘的安全工具。

Ghidra下载地址

可以通过Ghidra的项目主页或者GitHub进行下载:

https://Ghidra-sre.org

https://github.com/NationalSecurityAgency/Ghidra

整理的一些官方说明

360威胁情报中心对Ghidra的官方说明文档进行了梳理,将一些必要的安装注意事项、文件目录介绍、使用方法、相关插件的使用等等逐一进行介绍,方便读者对照安装使用。

支持平台

Windows 7/Windows 10(64位)

Linux(64位,最好是CentOS 7)

MacOS(10.8.3)

安装条件

硬件条件:4GB内存;1GB硬盘空间

软件条件:Java 11+

安装方法

通过解压缩工具解压下载的压缩包(7-zip,WinZIP,WinRAR)即可使用。

安装注意事项

  1. Ghidra直接通过压缩包解压即可使用,这样的好处就是可以不用修改各种系统配置,如Windows下的注册表,便于删除,坏处是不能直接在桌面上或开始菜单设置快捷方式。
  2. 特定盘符,如C:需要Administrator权限。
  3.  

    Ghidra会使用系统标准的TEMP目录来存储相关数据,用户也可以通过修改support/launch.properties来进行修改。

     

Java环境注意事项

  •  

    Ghidra会通过path自动定位相关的java runtime和development kit版本

     

  •  

    设置Windows下相关JDK path配置

     

 

 

  1.  

    解压JDK

     

  2.  

    打开系统环境变量设置选项

     

  3.  

    在path中增加in

     

 

 

 

 

 

 

 

 

  •  

    Linux下下相关JDK path配置

     

 

1.解压JDK

 

 

2.编辑~/.bahsrc

 

Vi ~/.bashrc

 

 

3.export PATH=/bin:$PATH

 

 

4.保存

 

 

 

当然用户可能有使用特定版本java的需求,可以通过support/launch.properties中的JAVA_HOME_OVERRIDE来进行配置。不过如果该版本不符合Ghidra的需求,Ghidra是不会运行的。

 

 

 

 

运行Ghidra

GUI 模式

切换到GhidraInstallDir目录,运行GhidraRun.bat(Windows)或GhidraRun(linus 或macOS),即可在GUI模式下启动Ghidra:

 

 

启动界面如下:

 

 

Ghidra Server

 

Ghidra支持多人协作完成一个逆向项目,各种研究人员在自己设备上进行相关的逆向任务,并将其修改提交到公共的存储库中,相关配置在Ghidra Server中有详尽的说明。

 

命令行模式

 

有别于传统的GUI模式,使用者可以通过命令行模式进行批量化的反编译工作。

 

独立的JAR包模式

Ghidra允许将其中的部分文件打包为JAR包并单独运行,以便于更方便的通过命令行模式进行启动,也方便于作为单独的Java逆向工程库。使用者可以通过/ support / buildGhidraJar创建单独的Ghidra.jar文件并使用。

 

 

 

扩展

拓展是Ghidra的可选组件,可以执行以下操作:

 

  •  

    用于编写拓展Ghidra相关的功能

     

  •  

    将其它的工具和Ghidra集成,如eclipse或IDA

     

 

 

其默认附加了以下的拓展项,可在/Extensions中找到:

 

  •  

    Eclipse:用于在eclipse中安装GhidraDev eclipse插件

     

  •  

    Ghidra:Ghidra扩展

     

  •  

    IDAPro:和IDA互动的插件

     

 

 

插件注意

  1.  

    可以通过前端的GUI进行安装卸载

     

     

    l  文件->安装拓展

     

     

    l  选择需要安装/卸载的拓展程序

     

     

    l  重启生效

     

  2.  

    需要对GhidraInstallDir具备写入权限

     

  3.  

    也可以不使用GUI前端目录,直接将扩展解压到/ Ghidra / Extensions即可

     

 

 

开发相关插件

用户可以通过自定义的Ghidra脚本、插件、分析器来扩展其功能,Ghidra通过提供一个名为GhidraDev的自定义Eclipse插件来支持Eclipse中的开发,该插件可以在/ Extensions / Eclipse目录中找到。

 

 

 

具体使用过程

项目创建

通过自带BAT脚本启动GUI模式:

 

 

进入之后,会有一个Tip提示,如下所示:

 

 

Ghidra是按项目进行管理的,使用者需要首先创建一个项目:

 

 

输入项目名:

 

 

项目创建完毕之后生成一个具体的目录,注意项目文件删除的时候似乎不能直接通过GUI删除,需要手动删除:

 

 

创建好项目之后就可以导入需要反编译的文件了:

 

 

如下所示我们反编译测试了calc.exe计算器程序:

 

 

开始反编译,速度相比于IDA还是慢了不少:

 

 

完成之后,项目文件下会创建对应的项目,双击进入:

 

 

进入之后会提示是否进行分析:

 

 

点击确认后,可以控制相应的分析选项:

 

 

开始分析之后,右下角会有相关的进度条展示:

 

 

目前来看Ghidra是无法自动下载符号的,需要对PDB相关配置进行设置:

 

 

完成分析之后的整体界面如下所示,很有一股浓浓的JAVA风范:

 

 

由于是基于项目的,因此Ghidra中可以同时打开多个反编译的项目,只需要直接往项目中导入文件即可:

 

 

 

 

主要功能介绍

360威胁情报中心整理了一些Ghidra反汇编界面中常见且有用的一些功能选项,并进行相关介绍:

 

 

  •  

    Navigation菜单

     

该菜单下是一些主要操作选项:

 

 

  •  

    Window菜单

     

该菜单下是其主要支持的功能窗口,类似于IDA中view->opensubview

 

 

其中的Python功能提供了类似IDAPython的功能,可以通过help()或直接按F1查看对应的功能说明:

 

 

  •  

    脚本管理菜单

     

脚本管理菜单下有大量的JAVA扩展脚本,这也是目前为止笔者觉得能带来惊喜的一个地方:

 

 

这些脚本选中后是可以直接运行的,如下所示的是字符串搜索功能:

 

 

  •  

    反编译项目对比功能

     

由于是以项目为单位的,因此支持对同一个项目中的反编译项目进行对比:

 

 

具体选项如下:

 

 

不过目前看来其效果一般:

 

 

 

 

常用快捷键

Ghidra也支持快捷键功能,360威胁情报中心整理了一些Ghidra中常见且有用的快捷键进行介绍:

 

 

  • 双击

     

     

和IDA一致,直接双击可以进入之后的地址函数:

 

 

 

 

  •  

    搜索(Ctrl+SHIFT+E

     

该快捷键用于进行搜索,类似于IDA中的alt+t

 

 

效果如下,速度对比IDA还是要慢上不少:

 

 

 

 

  •  

    书签(Ctrl+D

     

该快捷键启用书签功能:

 

 

 

 

  •  

    反编译(Ctrl+E

     

相当于IDA中的F5,展示反编译后的代码:

 

 

 

 

  •  

    右键查看引用

     

类似于IDA中的Ctrl+X:

 

 

 

 

更多操作

更多详细的快捷键和操作可见解压后docs文件夹中的CheatSheet.html文件:

 

 

 

 

 

一些趣闻:关于JDWP远程代码执行

在Ghidra发布后不久,HackerFantastic就在Twitter发布了Ghidra存在JDEWP的远程代码执行问题:

 

 

 

 

JDWP是指开放了一个调试端口,可以远程访问:

 

 

笔者默认的环境下可以看到这个JAVA的调试端口并没有启动:

 

 

笔者在对应的support下看到了对应的launch.sh脚本,这个脚本确实会开启一个对应的端口,但需要通过debug和debug-supend参数启动:

 

 

实际上我们使用的GhidraRun也是通过launch.bat进行启动的:

 

 

只是GhidraRun使用的是bg参数,并不会激活对应的调试模式:

 

 

因此从目前来看正常的GUI启动时不会激活该功能,但是由于launch本身是主要的启动入口,在没有详细深入分析前,不排除有其他方式通过debug和debug-supend参数进行调用,因此建议手动patch代码。

 

 

 

总结

目前来看Ghidra具有反编译功能,查看、定位反编译后的代码相较于IDA有优势。不过在使用过程中发现其处理某些混淆后代码的能力还比较欠缺,在一些界面功能上也还有较大的差距,此外基于JAVA开发的原因也使得其在性能上有一些欠缺。

参考链接

 

https://Ghidra-sre.org/CheatSheet.html

https://Ghidra-sre.org/InstallationGuide.html

https://github.com/NationalSecurityAgency/Ghidra

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
数据来源:中经数据库 主要指标110多个(全部都是纯粹的 市辖区 指标),大致是: GDP GDP增速 第一产业增加值占GDP比重 第二产业增加值占GDP比重 第三产业增加值占GDP比重 人均GDP 社会消费品零售总额 固定资产投资(不含农户) 新设外商投资企业数_外商直接投资 实际利用外资金额(美元) 一般公共预算收入 一般公共预算支出 一般公共预算支出_教育 一般公共预算支出_科学技术 金融机构人民币各项存款余额_个人储蓄存款 金融机构人民币各项存款余额 金融机构人民币各项贷款余额 规模以上工业企业单位数 规模以上工业企业单位数_内资企业 规模以上工业企业单位数_港澳台商投资企业 规模以上工业企业单位数_外商投资企业 规模以上工业总产值 规模以上工业总产值_内资企业 规模以上工业总产值_港澳台商投资企业 规模以上工业总产值_外商投资企业 规模以上工业企业流动资产合计 规模以上工业企业固定资产合计 规模以上工业企业利润总额 规模以上工业企业应交增值税 规模以上工业企业主营业务税金及附加 户籍人口数 年均户籍人口数 户籍人口自然增长率 第一产业就业人员占全部城镇单位就业人员比重 第二产业就业人员占全部城镇单位就业人员比重 第三产业就业人员占全部城镇单位就业人员比重 城镇非私营单位就业人员数 城镇非私营单位就业人员数_第一产业 城镇非私营单位就业人员数_第二产业 城镇非私营单位就业人员数_第三产业 城镇非私营单位就业人员数_农、林、牧、渔业 城镇非私营单位就业人员数_采矿业 城镇非私营单位就业人员数_制造业 城镇非私营单位就业人员数_电力、热力、燃气及水生产和供应业 城镇非私营单位就业人员数_建筑业 城镇非私营单位就业人员数_批发和零售业 城镇非私营单位就业人员数_交通运输、仓储和邮政业 城镇非私营单位就业人员数_住宿和餐饮业 城镇非私营单位就业人员数_信息传输、软件和信息技术服务业 城镇非私营单位就业人员数_金融业 城镇非私营单位就业人员数_房地产业 城镇非私营单位就业人员数_租赁和商务服务业 城镇非私营单位就业人员数_科学研究和技术服务业 城镇非私营单位就业人员数_水利、环境和公共设施管理业 城镇非私营单位就业人员数_居民服务、修理和其他服务业 城镇非私营单位就业人员数_教育 城镇非私营单位就业人员数_卫生和社会工作 城镇非私营单位就业人员数_文化、体育和娱乐业 城镇非私营单位就业人员数_公共管理、社会保障和社会组织 城镇非私营单位在岗职工平均人数 城镇就业人员数_私营企业和个体 城镇非私营单位在岗职工工资总额 城镇非私营单位在岗职工平均工资 城镇登记失业人员数 建成区面积 建设用地面积 建设用地面积_居住用地 液化石油气供气总量 液化石油气供气总量_居民家庭 人工煤气、天然气供气总量 人工煤气、天然气供气总量_居民家庭 液化石油气用气人口 人工煤气、天然气用气人口 城市公共汽电车运营车辆数 城市出租汽车运营车辆数 城市公共汽电车客运总量 道路面积 排水管道长度 建成区绿化覆盖面积 建成区绿化覆盖率 绿地面积 公园绿地面积 维护建设资金支出 土地面积 生活用水供水量 供水总量 全社会用电量 城乡居民生活用电量 工业生产用电量 房地产开发投资 房地产开发投资_住宅 限额以上批发和零售业法人单位数 限额以上批发和零售业商品销售总额 普通中学学校数 中等职业教育学校数 普通小学学校数 普通高等学校专任教师数 普通中学专任教师数 中等职业教育专任教师数 普通小学专任教师数 普通高等学校在校生数 普通中学在校生数 中等职业教育在校生数 普通小学在校生数 电视节目综合人口覆盖率 公共图书馆总藏量_图书 医疗卫生机构数_医院和卫生院 卫生人员数_执业(助理)医师 医疗卫生机构床位数_医院和卫生院 城镇职工基本养老保险参保人数 职工基本医疗保险参保人数 失业保险参保人数
NSA/NSAU是与5G网络相关的指令,其中NSA代表非独立组网(Non-Standalone Access),NSAU则是非独立组网用户(Non-Standalone Access User)的缩写。在5G网络中,NSA指的是5G网络与4G网络(LTE)之间的过渡架构,也就是在5G基站(gNB)无法直接与5G核心网(5GC)进行控制信息交互的情况下,借助4G基站(eNodeB)作为锚点来提供控制信息。NSA的组网模式有不同的选项,如Option3/3a/3x。 在NSA模式下,5G网络的语音通话实际上回落到了4G网络(VoLTE),因为5G NSA下并没有独立的5G语音支持。这意味着用户在进行语音通话时仍需通过4G网络进行。 值得注意的是,在SA(独立组网)模式下,用户只能同时连接一个网络,即4G或5G,不存在分流节点的概念。而在NSA网络中,用户可以同时连接4G和5G网络。 总结来说,NSA是5G网络与4G网络之间的过渡架构,而NSAU则是使用NSA模式的5G用户的缩写。这种架构在一些地方或网络环境下被采用,以逐步实现全面的5G网络覆盖和功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [5G笔记| 概述:5G网络架构(NSA/SA组网)、无线资源控制RRC、语音通话](https://blog.csdn.net/Insomnia_X/article/details/125813340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值