环境搭建¶
这篇主要介绍一下怎么搭建运行和调试 arm binary 的环境(基于 qemu, 方法同样也适用于 mips 的 binary), 使用了 jarvis OJ typo(arm)/add(mips) 两道题目的 binary 进行演示
主机信息:¶
以一台新装的 deepin 虚拟机(基于 debian)为例,详细信息如下:
预备环境安装:¶
- 安装 git,gdb 和 gdb-multiarch,同时安装 binfmt 用来识别文件类型
$ sudo apt-get update
$ sudo apt-get install git gdb gdb-multiarch
$ sudo apt-get install "binfmt*"
-
安装 gdb 的插件 pwndbg(或者 gef 等 gdb plugin)
装好之后如图:$ git clone https://github.com/pwndbg/pwndbg $ cd pwndbg $ ./setup.sh
-
安装pwntools,不必要,但绝对是写exp的神器
$ sudo pip install pwntools
安装qemu:¶
我们对版本的要求不是很严格, 直接通过 apt 等包管理安装即可
$ sudo apt-get install qemu-user
安装共享库:¶
此时已经可以运行静态链接的 arm/mips binary 了,如下图: 但还不能运行动态链接的 binary,如下图: 这就需要我们安装对应架构的共享库,可以通过如下命令搜索:
$ apt-cache search "libc6" | grep ARCH
运行:¶
- 静态链接的 binary 直接运行即可,会自动调用对应架构的 qemu;
- 动态链接的 bianry 需要用对应的 qemu 同时指定共享库路径,如下图32位的动态链接 mips binary
使用 -L 指定共享库路径:
$ qemu-mipsel -L /usr/mipsel-linux-gnu/ ./add
调试:¶
可以使用 qemu 的 -g 指定端口
$ qemu-mipsel -g 1234 -L /usr/mipsel-linux-gnu/ ./add
pwndbg> set architecture mips (但大多数情况下这一步可以省略, 似乎 pwndbg 能自动识别架构) pwndbg> target remote localhost:1234
效果图:¶
more:¶
同样,如果想要运行或者调试其他架构的 binary,只需安装其他架构的 qemu 和共享库即可
reference:¶
https://docs.pwntools.com/en/stable/qemu.html https://reverseengineering.stackexchange.com/questions/8829/cross-debugging-for-arm-mips-elf-with-qemu-toolchain
本页面的全部内容在 CC BY-NC-SA 4.0 协议之条款下提供,附加条款亦可能应用。