本地测试环境:

​ Host OS: Windows 10 Pro 1903

​ WSL OS: Kali Linux

​ User: root

2019-12-19更新: 已不再打算使用WSL,转而使用VMware虚拟机

2020-04-02更新: WSL和WSL2真香

1. 安装qemu并配置32位程序支持(i386)

1
2
3
4
5
6
$ apt-get update
$ dpkg --add-architecture i386
$ apt install gcc:i386 # 如果需要gcc就装,仅仅只是调试则可以跳过
$ apt install -y libc6:i386 libncurses5:i386 libstdc++6:i386 zlib1g:i386 zlib1g-dev:i386 # 该步是宁愿装多点支持库,但不一定都需要
$ apt install qemu-user-static
$ update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'

然后查看一下binfmt-support服务有没有问题.

1
$ service binfmt-support start

在我本机上出现了以下问题:

1
2
[....] Enabling additional executable binary formats: binfmt-supportupdate-binfmts: warning: unable to close /proc/sys/fs/binfmt_misc/register: Invalid argument
update-binfmts: exiting due to previous errors

实际上这不重要,而且我查找资料发现,这是WSL的问题之一…因为WSL的Linux内核本就是不完整的,导致不能安装一些支持库就能执行32位的程序…

Github有人提过issue: Cannot install qemu-user-static

@sunilmut说:

This is fixed in Fall Creators Update and any build > 16273.

但是我们得知道,想多了…至少这个问题到现在Win10最新稳定版本1903的我的机子上,如果不采用qemu模拟器来调试…还是无法调试.

如果binfmt-support服务没问题,建议在启动脚本添加下启动服务的命令,以zsh为例:

1
echo 'service binfmt-support start' >> ~/.zshrc

这样每次启动WSL的时候就会启动这个服务了(虽然可能也会像我本机这样出错…)

不管上述binfmt-support执行是否出错,只要使用命令qemu-i386-static执行一下32位的程序

如果成功,则说明qemu的安装没有问题.

2. 安装pwngdb

1
2
3
$ git clone https://github.com/pwndbg/pwndbg
$ cd pwndbg
$ ./setup.sh

3. 安装gdb-multiarch(可选)

1
$ apt install gdb-multiarch

4. 调试

[窗口1]
1
$ qemu-i386-static -g 1234 ./test

-g: 远程监听端口,这里设置了1234,用于远程调试

这时就启动了qemu的远程调试监听进程了.

切换到另一个窗口:

[窗口2]
1
2
3
4
if(安装了gdb-multiarch):
gdb-multiarch ./test
else:
gdb ./test
1
(gdb) target remote :1234

就可以正常调试目标程序了o( ̄▽ ̄)ブ

同样的,使用这种方法也可以用IDA动态调试WSL上的目标程序.

5. 参考资料

I wonder if WSL will support the i386 (32 bit) program running later?

wsl开机启动ssh服务并开启32bit支持

Cannot install qemu-user-static

MIPS漏洞调试环境安装及栈溢出

评论