1

【Pwn 笔记】跨平台架构的环境配置与调试

 2 years ago
source link: https://binlep.github.io/2020/03/20/%E3%80%90Pwn%20%E7%AC%94%E8%AE%B0%E3%80%91%E8%B7%A8%E5%B9%B3%E5%8F%B0%E6%9E%B6%E6%9E%84%E7%9A%84%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%E4%B8%8E%E8%B0%83%E8%AF%95/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

捣腾了三天,写了自动化拖 libc 库的脚本,这次算是质量上的更新

安装 qemu 和 gdb-multiarch

安装虚拟环境和调试工具

正常安装这样即可,如果要使用 arm_now 的话,需要 qemu 的版本大于等于 3.0.0,在下方有写安装方法

sudo apt-get install qemu
sudo apt-get install gdb-multiarch

先使用 qemu 选择共享库文件夹

并设置调试所用的本地端口[不同架构的使用命令可能不一样],例:

qemu-arm -L /usr/arm-linux-gnueabihf -g 12345 ./chall

然后进入 gdb-multiarch,输入:

set architecture [arch]
target remote localhost:[port]

arm_now 安装方法

1.安装 qemu

如果系统内的 qemu 版本小于 3.0.0,首先删除系统内的 qemu,我们要安装 qemu-3.0.0:

sudo apt-get purge "qemu*"
sudo apt-get autoremove

然后更改/etc/apt/sources.list的内容,启用源代码存储库

之后安装它的构建依赖

sudo apt-get update
sudo apt-get build-dep qemu
cd ./Downloads
wget https://download.qemu.org/qemu-3.0.0.tar.xz
tar -xf qemu-3.0.0.tar.xz
cd qemu-3.0.0/
./configure
make

然后使用 checkinstall

sudo apt-get install checkinstall
sudo checkinstall make install
sudo apt-get install ./*.deb

这样就安装完了,如果想卸载的话,依旧是输入apt remove qemu

最后禁止系统更新 qemu 到低版本,我们需要禁止更新 qemu

echo "qemu hold" | dpkg --set-selections

2.安装 arm_now

项目地址:https://github.com/nongiach/arm_now

照 github 内写的安装即可


安装 mips 相关配置

mipsel 小端序 32 位

sudo apt-get install gcc-mipsel-linux-gnu g++-mipsel-linux-gnu libc6-dbg-mipsel-cross

mips 大端序 32 位

sudo apt-get install gcc-mips-linux-gnu g++-mips-linux-gnu libc6-dbg-mips-cross

mips64el 小端序 64 位

sudo apt-get install gcc-mips64el-linux-gnuabi64 g++-mips64el-linux-gnuabi64 libc6-dbg-mips64el-cross

mips64 大端序 64 位

sudo apt-get install gcc-mips64-linux-gnuabi64 g++-mips64-linux-gnuabi64 libc6-dbg-mips64-cross

mipsisa32r6el 小端序 64 位

sudo apt-get install binutils-mipsisa32r6el-linux-gnu

mipsisa32r6 大端序 64 位

sudo apt-get install binutils-mipsisa32r6-linux-gnu

安装 arm 相关配置

armel 软浮点 小端序 32 位

sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc6-dbg-armel-cross

armhf 硬浮点 小端序 32 位

sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc6-dbg-armhf-cross

如果提示以下内容,说明没装libc6-armhf-cross

/lib/ld-linux-armhf.so.3: No such file or directory

aarch64 小端序 64 位

sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dbg-arm64-cross

安装 hppa(PA-RISC) 相关配置

hppa 大端序 32 位

sudo apt-get install gcc-hppa-linux-gnu g++-hppa-linux-gnu libc6-dbg-hppa-cross

hppa64 大端序 64 位

这个只有 hppa64 的 gcc

sudo apt-get install gcc-hppa64-linux-gnu

安装 m68k 相关配置

m68k 大端序 32 位

sudo apt-get install gcc-m68k-linux-gnu g++-m68k-linux-gnu libc6-dbg-m68k-cross

安装 ppc 相关配置

powerpc 大端序 32 位

sudo apt-get install gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc6-dbg-powerpc-cross

powerpcspe 信号处理引擎 大端序 32 位

sudo apt-get install gcc-powerpc-linux-gnuspe g++-powerpc-linux-gnuspe libc6-dbg-powerpcspe-cross

powerpc64 大端序 64 位

sudo apt-get install gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc6-dbg-ppc64-cross

powerpc64le 小端序 64 位

sudo apt-get install gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu libc6-dbg-ppc64el-cross

安装 s390x 相关配置

s390x 大端序 64 位

sudo apt-get install gcc-s390x-linux-gnu g++-s390x-linux-gnu libc6-dbg-s390x-cross

安装 sh4 相关配置

sh4 小端序 32 位

sudo apt-get install gcc-sh4-linux-gnu g++-sh4-linux-gnu libc6-dbg-sh4-cross

安装 sparc64 相关配置

sparc64 大端序 64 位

sudo apt-get install gcc-sparc64-linux-gnu g++-sparc64-linux-gnu libc6-dbg-sparc64-cross

安装 alpha 相关配置

alpha 小端序 64 位

sudo apt-get install gcc-alpha-linux-gnu g++-alpha-linux-gnu libc6.1-dbg-alpha-cross

安装 x86_64 相关配置

i686 小端序 32 位

i686 只是 i386 的一个子集,支持的 cpu 从 Pentium 2(686) 开始,之前的型号不支持.

sudo apt-get install gcc-i686-linux-gnu gcc-i686-linux-gnu libc6-dbg-i386-cross

x86_64x32 小端序 32 位

这个是 64 位机器装 32 位的编译工具,应该有反过来的,但是我不用纯 32 位机器就不折腾了

sudo apt-get install gcc-x86-64-linux-gnux32 g++-x86-64-linux-gnux32 libc6-dbg-x32-cross

安装 riscv64 相关配置

riscv64 小端序 64 位

sudo apt-get install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu libc6-dbg-riscv64-cross

安装 ia64 相关配置

ia64 小端序 64 位

只有类似 readelf 和 objdump 这种工具可以用,莫得 libc 和 gcc 以及 g++

sudo apt-get install binutils-ia64-linux-gnu

Ubuntu 16.04 下缺少一些包,在 Ubuntu 16.04 下安装这些即可

sudo apt-get install gcc-mipsel-linux-gnu g++-mipsel-linux-gnu libc6-dbg-mipsel-cross \
gcc-mips-linux-gnu g++-mips-linux-gnu libc6-dbg-mips-cross \
gcc-mips64el-linux-gnuabi64 g++-mips64el-linux-gnuabi64 libc6-dbg-mips64el-cross \
gcc-mips64-linux-gnuabi64 g++-mips64-linux-gnuabi64 libc6-dbg-mips64-cross \
gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc6-dbg-armel-cross \
gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc6-dbg-armhf-cross \
gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dbg-arm64-cross \
gcc-hppa-linux-gnu g++-hppa-linux-gnu libc6-dbg-hppa-cross \
gcc-hppa64-linux-gnu \
gcc-m68k-linux-gnu g++-m68k-linux-gnu libc6-dbg-m68k-cross \
gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc6-dbg-powerpc-cross \
gcc-powerpc-linux-gnuspe g++-powerpc-linux-gnuspe libc6-dbg-powerpcspe-cross \
gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc6-dbg-ppc64-cross \
gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu libc6-dbg-ppc64el-cross \
gcc-s390x-linux-gnu g++-s390x-linux-gnu libc6-dbg-s390x-cross \
gcc-sh4-linux-gnu g++-sh4-linux-gnu libc6-dbg-sh4-cross \
gcc-sparc64-linux-gnu g++-sparc64-linux-gnu libc6-dbg-sparc64-cross \
gcc-alpha-linux-gnu g++-alpha-linux-gnu libc6.1-dbg-alpha-cross

在 Ubuntu 18.04 下,能多安装这些:

sudo apt-get install gcc-x86-64-linux-gnux32 g++-x86-64-linux-gnux32 libc6-dbg-x32-cross \
gcc-i686-linux-gnu gcc-i686-linux-gnu libc6-dbg-i386-cross \
gcc-riscv64-linux-gnu g++-riscv64-linux-gnu libc6-dbg-riscv64-cross \
binutils-ia64-linux-gnu \
binutils-mipsisa32r6el-linux-gnu \
binutils-mipsisa32r6-linux-gnu

libc 名称对应版本小记录

mips mips-32-big
mips32-mips64 mips-32-big
mips32-mips64el mips-32-little
mips32-mips64r6 mips64-64-big
mips32-mips64r6el mips64-64-little

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK