如何在linux主機上運行/調試 arm/mips架構的binary


如何在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和共享庫即可

reference:

https://docs.pwntools.com/en/stable/qemu.html

https://reverseengineering.stackexchange.com/questions/8829/cross-debugging-for-arm-mips-elf-with-qemu-toolchain


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM