环境搭建:
aarch64依赖库:
apt-get install libc6-arm64-cross
动态需要指定动态库加载路径:
qemu-aarch64-static -L /usr/aarch64-linux-gnu ./arm
安装:gdb-multiarch
sudo apt-get install git gdb-multiarch
调试时,需要启动gdb-multiarch
gdb-multiarch
配置框架:
set architecture aarch64
连接远程端口:
target remote localhost:1234
方笔方便和pwndbg或者peda兼容,需要降低gdb版本:
sudo apt-get remove gdb
各版本gdb:
http://ftp.gnu.org/gnu/gdb/
linux 下安装lantern:
deb文件安装好后,需要安装包:
apt-get install gir1.2-appindicator3-0.1
pwntools 的 asm功能报错的情况–针对arm:
解决方法:
git clone https://github.com/Gallopsled/pwntools-binutils
cd pwntools-binutils
cd ubuntu
sudo ./install_all.sh arm
sudo ./install.sh arm
需要Binutils库支持的框架才行。
调试过程当中,下断点:
具体调试时,刚刚用gdb来target的时候,是先劫持到加载器,我们的要程序还没加载进去。
没开pie可以先下断点,等待劫持即可。
这里出现一个问题:checksec的时候pie为0x400000
先利用:cyclic 200 产生字符串,造成溢出来捕获程序的位置,确定真实的基地址,这个方法会导致确定错误的基址。
cyclic 200确定的基址是:0x410000,这是错误的,真正的基址还是0x400000。
确定基址我们就可以把断点下到任意位置了。
如图:
真实的基址(错误的),注意看各个区段的属性:
经过调试,程序加载的基址并不是0x410000,好像是产生异常后,将0x400000的数据拷贝到0x410000的
程序的真正基址还是0x400000,如图:
列题:
2018上海 ctf 的armpwn。
exp是参考别人的:
调试exp时,先下断点,再调试。
# -*- coding: utf-8 -*-
from pwn import *
import sys
import time
context.binary = "./arm"
binary = './arm'
if sys.argv[1] ==