zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/nul1/p/14168764.html
Copyright © 2011-2022 走看看