使用decomp2dbg调试程序

使用decomp2dbg工具,统筹使用IDAgdb调试程序。截至到目前(2022-02-07),测试出工具的缺陷在于:函数较多时,会陷入卡顿状态;打开vmlinux,插件启动报错。

IDAgdb的交互,很多gdb的插件都实现了一些,但是实现得最好的,还得是mahaloz/decomp2dbg: A plugin to introduce interactive symbols into your debugger from your decompiler (github.com)。这个项目很早之前就关注了,但是最开始其主要是基于pwndbggef实现的二次开发。

今天又逛到了这个仓,发现作者重新实现了一遍,不再依赖这两个插件,使得原生的gdb也能直接使用。目前,工具已经实现了很多实用的功能,因此,本篇博客简要记录一下该工具的使用步骤。

1-安装

对于windows上使用IDA的场景,选择手动安装会更好。苹果可以选择自动安装。手动安装的步骤如下:

首先,去官网clone仓库,拷贝decompilers/d2d_ida/*IDA/plugins目录下面。

然后,在linux系统(WSL或者虚拟机均可)里面执行:

1
2
pip3 install . && \
cp d2d.py ~/.d2d.py && echo "source ~/.d2d.py" >> ~/.gdbinit

最后,在windows机器的防火墙中添加一个入站规则,选择端口为tcp/3662,只对私有域放行端口。

2-使用

第一步,使用IDA打开一个程序,然后在edit/plugins中选择Decomp2DBG,选择监听0.0.0.03662端口。

第二步,使用gdb调试同一个程序,启动之后,直接键入decompiler connect ida --host 192.168.xxx.xxx(LAN IP) --port 3662。就可以同步更新IDA的反编译代码了。

decomp2dbg

之后在IDA重命名了函数或者变量,也会在gdb中更新,并可以直接打印。还支持打印结构体,同步栈变量,断点等等,功能非常强大。

image-20230130211113068

这样在gdb调试的时候,就知道程序运行到哪个函数了。

使用pwncli的话,可以使用命令pwncli de ./pwn -t -s "decompiler connect ida --host 192.168.xxx.xxx --port 3662" -b func,这个时候,func可以指定为IDA中重命名的函数,示例如下。

IDA里面是这样的:

image-20230130214342462

以下为操作示例。

8f5d53fe-08fd-4f15-9619-d7952f8d5b6d

目前该工具已经支持调试so,其开发的功能概览如下:

image-20230130205331909

总的来看,这个工具适合调试一些虚拟机或者分支很多的程序,或者结构体很复杂的程序。期待新的功能~

Buy me a coffee~
roderick 支付宝支付宝
roderick 微信微信
0%