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


    背景

    昨天,在刚刚举办的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

  • 相关阅读:
    项目经理所需要具备的素质
    项目经理的个人修养
    项目拖期怎么办
    创业起步的十大准备步骤
    注册(创办)公司的手续过程
    如何让女人每天更快乐
    全面比较:中美两国百姓的生活成本
    ADO.NET级别的事物
    respondsToSelector的使用
    用js在两个页面之间传值
  • 原文地址:https://www.cnblogs.com/nul1/p/14168764.html
Copyright © 2020-2023  润新知