Tips
仅供个人学习参考
flag
有时候flag文件没有放在当前目录下
用以下指令查找flag位置
1 | find -name flag |
strcmp
strcmp的特性是遇到’\x00’就停止比较字符串,可以考虑0截断绕过
pwntools
十六进制转十进制
1 | python3 |
十六进制转字符
1 | python3 |
打印某函数的got表地址
1 | elf = ELF("./filename") |
打包成字符串并发送
1 | send(str(data)) |
p32/p64: 打包一个整数,分别打包为32位或64位
u32/u64:解包一个字符串,得到整数
关于p64(p32)
%s就得用p32/p64 传输数据
p打包函数是将整数打包为相对应位数的地址表示方式
u解包函数就是把\x\x码重新变为整数
在使用 p64 函数或者其他打包函数时,确保该函数是一个整数,而不是字节串或者其他非整数类型的数据。
如果该函数是以字节串形式表示的十六进制地址(如 b’0x7ffc52917000’),需要先将其转换为整数再进行处理。
1 | from pwn import * |
发送和接受数据
1 | conn.send(data) #发送数据 |
hex
1 | '/bin/cat') e = ELF( |
IDA
*选中伪代码,右键可将其复制到汇编代码中
gdb
b main的时候gdb查找不到函数的,是因为main函数被删符号表,体现就是在ida中main函数不是粗体字,ida只是凭借逻辑识别他为main函数
syscall和函数传参
*x86
返回值:eax
syscall:int 0x80
syscall调用号:eax
syscall参数:ebx ecx edx esi edi ebp
函数参数:stack
*x86_64
返回值:rax
syscall:syscall
syscall调用号:rax
syscall参数:rdi rsi rdx r10 r8 r9
函数参数:rdi rsi rdx rcx r8 r9 stack
*arm32(aarch32)
返回值 : r7
syscall : svc 0
syscall调用号: r7
syscall参数: r0 , r1 , r2 , r3 , stack
函数参数: r0 , r1 , r2 , r3 , stack
*arm64(aarch64)
返回值 : x0
syscall : svc 0
syscall调用号: x8
syscall参数: x0 , x1 , x2 , x3 , x4 , x5
函数参数: x0 , x1 , x2 , x3 , x4 , x5 , x6 , x7 , stack