吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2370|回复: 2
上一主题 下一主题
收起左侧

[原创] 新手学习反编译之Ghidra项目搭建

[复制链接]
跳转到指定楼层
楼主
fjqisba 发表于 2023-6-3 10:36 回帖奖励
本帖最后由 fjqisba 于 2023-9-1 09:23 编辑

新手学习反编译之Ghidra项目搭建

反编译是逆向的核心,然而这方面的研究似乎并不多,ida反编译固然强大,然而对外只提供了残缺的sdk,retdec更倾向于是实验品,且已停止维护。Ghidra是目前能在网上找到的最强开源反编译器了。

这里记录一下我的项目搭建过程,希望对其他人有帮助,节省研究时间。

项目地址:

https://github.com/NationalSecurityAgency/ghidra

其中界面和逻辑处理部分的代码是用java写的,然而核心的反编译部分是用C++写的,完全可以剥离出来一个独立项目。

反编译部分的代码位于https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Features/Decompiler/src/decompile/cpp

使用Visual Studio新建一个空项目,直接拖入全部的代码,然后编译之。。。

这样肯定是不能通过的,需要进行一些项目修复:

1、在C/C++ -> 预处理器上添加预处理器定义

_CRT_SECURE_NO_WARNINGS
_WINDOWS

C/C++ -> 常规 -> SDL检查,改为否

高级 -> 字符集,使用多字节字符集

2、处理loadimage_bfd文件

由于loadimage_bfd类中引用了bfd这个库,这个类主要是用来解析PE、符号,读取二进制数据相关的功能,而msvc编译器是不支持的,因此可以直接移除loadimage_bfd.hh、loadimage_bfd.cc、bfd_arch.hh、bfd_arch.cc这几个文件,或者自己写个类来代替。

ghidra_process.cc、sleighexample.cc、slgh_compile.cc、test.cc、consolemain.cc这几个文件中有main函数,想编译哪个项目,就移除其它的cc文件即可。

test.cc看起来像是做单元测试用的,直接移除。

ghidra_process是一个反编译后台进程提供给Ghidra前端用的,也直接移除。

slgh_compile.cc和Sleigh编译器有关,这里抄一下gpt的解释

在Ghidra项目中,slgh_compile.cc文件是用于编译Sleigh语言的编译器的源代码文件。Sleigh语言是一种特定于Ghidra的领域特定语言(DSL),用于描述处理器指令集的语义和模式。

Sleigh编译器负责将Sleigh语言描述的处理器指令集编译成中间表示形式,以便Ghidra可以使用它来进行二进制代码的逆向工程和分析。slgh_compile.cc文件实现了Sleigh编译器的主要逻辑和算法。

这里暂时用不上,如果要移除,需要将与之有关的slghparse、slghscan文件也一并移除,或者直接去掉main函数。

sleighexample.cc比较有用,作用是输入一段二进制,可以用来反汇编、打印pcode或者是模拟执行。

consolemain.cc算是一个完整的控制台,输入一个文件,可以执行反编译打印源码等一系列操作。

这里只说明一下consolemain这个项目,首先里面有一个startDecompilerLibrary函数,这个函数作用是用扫描sleigh一些预定义数据文件的,这个文件一般在Ghidra/Processors/*/data/languages目录里面,函数参数的话传入Ghidra反编译程序的根目录就行了。之前说的loadimage类,需要自己进行补充,这里可以参考一下这个项目https://github.com/airbus-cert/Yagi/blob/main/yagi/src/idaloader.cc
其实就是写个类继承LoadImage,重载loadFill接口。

跑起来后是一个控制台,输入类似下面的命令:

load file C:\123.exe
load addr 0x401000
decompile
print C

就能够完成反编译流程,输出源码文件了。

项目搭建起来,剩下的阅读代码,分析这个反编译器是怎么实现的,就只能靠自己了。

免费评分

参与人数 4吾爱币 +12 热心值 +4 收起 理由
Esby + 1 + 1 我很赞同!
Anonymous、 + 2 + 1 我很赞同!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Li1y + 2 + 1 支持,希望大佬后续出一些编译原理相关的学习指导

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
MIAIONE 发表于 2023-6-3 16:21
Ghidra是NSA写的??那这么说应该比IDA强才对吧?还是有所保留?
3#
鹤舞九月天 发表于 2023-9-11 15:04
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 09:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表