实践调试Ghidra代码和Ghidra脚本

在本节中,我们将学习如何在Eclipse中调试Ghidra功能。首先,我们将回顾如何开发脚本以及如何调试它们。然后将展示如何通过源代码调试来调试Ghidra中的任何组件。


使用Eclipse调试Ghidra脚本  


要调试Ghidra脚本。首先需要使用Eclipse IDE菜单栏中的GhidraDev选项创建一个新的Ghidra项目。为此,请单击GhidraDev -> New -> Ghidra Script Project…,然后选择想要的项目名称。将其命名为GhidraScripts,即默认名称。

实践调试Ghidra代码和Ghidra脚本
图1 – 创建Ghidra脚本项目

单击“下一步”后,选择已开发的脚本,将其添加到项目中(示例路径为C:Usersvirusitoghidra_scripts),同时还可以选择在Ghidra安装路径中已经包含的脚本。实践调试Ghidra代码和Ghidra脚本

图 2 – 配置新的Ghidra脚本项目

选择之前通过GhidraDev配置的Ghidra安装路径,方法是导航到GhidraDev菜单中的首选项,然后选择Ghidra安装。在这里,您还可以打开Ghidra安装窗口,通过单击“+”按钮来添加或删除Ghidra安装目录。实践调试Ghidra代码和Ghidra脚本

图3 – 将Ghidra安装链接到正在创建的Ghidra脚本项目    

点击“下一步>”后,可以启用Python支持,并使用Jython作为解释器。可以通过单击“+”按钮来添加Ghidra附带的Jython解释器,或者下载并添加自定义的Jython解释器(可以从 https://www.jython.org/download 下载)。

实践调试Ghidra代码和Ghidra脚本
图4 -通过Jython向Ghidra脚本项目添加Python支持

如果想使用Ghidra附带的解释器(可以在以下目录中找到:GhidraFeaturesPythonlibjython-standalone-2.7.1.jar),将Ghidra链接到该项目,将会看到下图中的选项,点击同意即可。

实践调试Ghidra代码和Ghidra脚本
图5 – 自动添加Ghidra附带的Jython解释器
之后,将拥有一个足以满足一般目的的Jython 解释器。如果想在任何时候需要链接自己的解释器,点击 + > 新建… > 浏览,并在添加自定义的 Jython 解释器后,单击确定。实践调试Ghidra代码和Ghidra脚本
图6 – 添加你自己的Jython解释器
如果收到以下错误消息,单击继续执行即可:
实践调试Ghidra代码和Ghidra脚本

图7 – 在Eclipse中将Python标准库添加到PYTHONPATH中

使用以下命令检索/Lib文件夹路径:   

C:Usersvirusito>python -c “from distutils.sysconfig import get_python_lib; print(get_python_lib())”

c:Python27Libsite-packages

C:Usersvirusito>

使用新文件夹添加PYTHONPATH,如以下屏幕截图所示,添加后,单击“应用”并关闭:
实践调试Ghidra代码和Ghidra脚本
图8 – 更改设置 PYTHONPATH
现在, 可以选择自己的解析器或Ghidra中包含的另一个解析器。选择后单击完成:
实践调试Ghidra代码和Ghidra脚本
图9 – 选择可用的Jython解释器    
在进行实际调试之前,先观察配置的环境是否正常,并注意以下要点。

创建的Ghidra脚本项目要包括一些文件夹,其中可以包含Ghidra安装目录中可用的现有脚本(在Eclipse中按Alt + Enter热键组合选择时,你可以检查这些文件夹的任何文件路径)。默认情况下你的home 目录脚本位于 %userprofile%ghidra_scripts 目录。

包含JUnit 4,  JDK (JRE 系统库), 和相关库 (包含Ghidra的库) 也与项目相关联, 以及整个Ghidra安装文件夹:
实践调试Ghidra代码和Ghidra脚本
图10 – Ghidra脚本的项目结构
通过右键单击项目并选择Run As或Debug As,在安装GhidraDev插件时,会分别自动创建两种运行和调试模式。   
第一种为Ghidra运行模式,允许在GUI环境中运行Ghidra。而第二种为Ghidra Headless,允许在非GUI模式下执行Ghidra:
实践调试Ghidra代码和Ghidra脚本
图11 – 项目运行模式

这里可以将前面章节中开发的 Ghidra 脚本代码 NopScript.java 复制到集成了Ghidra 的 Eclipse 中进行调试。

为了创建一个新的脚本,请按照以下步骤操作:

1.点击 GhidraDev | New | Ghidra Script..
实践调试Ghidra代码和Ghidra脚本
图12 -创建新的Ghidra脚本
2.添加项目所需内容,如下图    
实践调试Ghidra代码和Ghidra脚本
图13 -创建NopScript.java Ghidra脚本    
3.让GhidraDev生成相应的脚本框架。通过复制前面章节“使用Ghidra脚本自动化RE任务”中编写的NopScript.java Ghidra脚本代码来填写脚本主体。
实践调试Ghidra代码和Ghidra脚本


图14 -用NopScript.java代码覆盖骨架代码
可以通过向脚本的某些行添加断点来中断程序的执行。可以右键单击要设置断点的行号,然后选择“Toggle Breakpoint”来建立断点。另外,双击行号或在保持鼠标焦点在该行的同时按下 Ctrl + Shift + B 组合键也可以实现相同的效果。
实践调试Ghidra代码和Ghidra脚本
图15 -在脚本第17行设置断点    
现在,可以通过右键单击代码并选择 “Debug As” 来调试此代码。即 Debug As | Ghidra:
实践调试Ghidra代码和Ghidra脚本
图16 -调试Ghidra脚本

为了触发在Ghidra中设置的断点,还需要运行一个插件,该插件现在与GhidraDev和Eclipse同步。由于此脚本已经关联了Ctrl + Alt + Shift + N快捷键,可以使用它来在文件的一个字节上执行脚本。实践调试Ghidra代码和Ghidra脚本

图17 -在Ghidra中调试NopScript.java
同样,可以使用PyDev集成在Eclipse中调试Ghidra Python脚本。
实践调试Ghidra代码和Ghidra脚本
图18-在Ghidra中调试NopScript.py    
该过程不仅适用于主脚本,还适用于项目中可用的任何其他插件。


从Eclipse调试任何Ghidra组件  


不仅可以调试插件,还可以调试Ghidra中的任何功能。例如,如果想调试Function Graph功能,则可以将相应的JAR文件添加到Build Path中。在这种情况下,其对应的JAR文件是Graph.jar。
实践调试Ghidra代码和Ghidra脚本
图19 -将Graph.jar文件添加到构建路径

随后,可以将JAR文件(现在在构建路径中可用)链接到自定义的源代码中。其源代码位于同一个文件夹中,名为Grahp-src.zip。要链接源代码,需要通过右键单击JAR文件来打开Graph.jar的属性,然后在Java Source Attachment部分的工作区位置字段中附加ZIP文件。实践调试Ghidra代码和Ghidra脚本

图20 -将Graph.jar文件链接到自己的源代码

此后,你将能够扩展Graph.jar文件,显示其中包含的*.class文件。链接后就能够查看源代码。还可以为其添加断点,当调试会话达到相应行时,断点将被触发:
实践调试Ghidra代码和Ghidra脚本

图21-调试函数图功能

在本节中,您学习了如何使用GhidraDev插件将Eclipse和Ghidra集成。我们了解了如何从IDE中开发和调试Ghidra插件,并展示了如何调试Ghidra的任何功能,这使您能够深入了解Ghidra的内部工作原理。    

原文始发于微信公众号(山石网科安全技术研究院):实践调试Ghidra代码和Ghidra脚本

版权声明:admin 发表于 2024年4月26日 上午10:00。
转载请注明:实践调试Ghidra代码和Ghidra脚本 | CTF导航

相关文章