ARM pwn 初探

本文最后更新于:2024年5月23日 下午

异构的pwn是这样的

0.前言、环境搭建与调试技巧

这篇文章写于境界提升之后。因为时间很紧迫,就不在文章开头抒情了。

本文不适合作为教程,适合了解过ARM pwn的师傅参考,取精去粗。不适合初学者。

实战中需要qemu和gdb-multiarch

1
qemu-aarch64 -g 1234 -L ./ ./pwn

如上指令可以暴露一个1234端口,用gdb-multiarch -ex “target remote 127.0.0.1 1234”即可链接qemu调试qemu内部的程序。

-L指出动态链接库,可以用本机的,也可以用题目附带的。

实际调试的时候,对于开了PIE的程序,很难用b*rebase(offset)下断点,因为qemu对于rebase的识别存在问题。这个时候可以关了主机的ASLR,qemu调试的时候ASLR也会随之关闭。

1.ARM汇编基础知识

ARM汇编的学习可以对照x86架构来学习。

ARM架构也是有32位和64位两种。寄存器编号从R0(32位)或者说X0(64位)开始。接下来的描述以64位为主。

ARM传参采用寄存器传参,从X0-X7。返回值放在X0,X1可以作为辅助(返回值过大)。

ARM架构最大的特点是,函数返回地址并不存放于栈上,而是存在LR寄存器中。调用函数时,会把LR(调用者的返回地址)存入栈中,将被调用函数的返回地址更新于LR。因此,ARM架构的栈溢出覆盖的返回地址是上一级函数的返回地址。


ARM pwn 初探
http://example.com/2024/03/20/Blog/Pwn/pwn note/ARM pwn/ARM pwn/
作者
Jmp.Cliff
发布于
2024年3月20日
许可协议