如何在linux主機上運行/調試 arm/mips架構的binary
原文鏈接M4x@10.0.0.55
本文中用於展示的binary分別來自Jarvis OJ上pwn的add,typo兩道題
寫這篇教程的主要目的是因為最近想搞其他系統架構的pwn,因此第一步就是搭建環境了,網上搜索了一波,發現很多教程都是需要樹莓派,芯片等硬件,然后自己編譯gdb,后來實踐的過程中發現可以很簡單地使用qemu實現運行和調試異架構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等支持多架構的插件)
$ git clone https://github.com/pwndbg/pwndbg
$ cd pwndbg
$ ./setup.sh
裝好之后如圖:
-
安裝pwntools,不必要,但絕對是寫exp的神器
$ sudo pip install pwntools
安裝qemu:
$ sudo apt-get install qemu-user
通過qemu模擬arm/mips環境,進而進行調試
安裝共享庫:
此時已經可以運行靜態鏈接的arm/mips binary了,如下圖:
但還不能運行動態鏈接的binary,如下圖:
這就需要我們安裝對應架構的共享庫,可以通過如下命令搜索:
$ apt-cache search "libc6" | grep ARCH
我們只需安裝類似libc6-ARCH-cross形式的即可
運行:
靜態鏈接的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
然后使用gdb-multiarch進行調試,先指定架構,然后使用remote功能
pwndbg> set architecture mips
pwndbg> target remote localhost:1234
這樣我們就能進行調試了
效果圖:
more:
同樣,如果想要運行或者調試其他架構的binary,只需安裝其他架構的qemu和共享庫即可