pwntools使用
ELF
1 |
|
ELF对象的属性
四大用途
- sym 查找符号地址 符号表 函数、变量地址
- plt 获取plt表地址 ==plt表和got表相比最重要的特性就是plt表可执行而got表不可执行 plt会跳转到相应函数处的地址==
- got 获取got表地址
- 查找字符串的地址 .search[b’/bin/sh’]
exe.symbols
exe.sym
字典,存储符号表(包括函数、全局变量)
exe.sym["main"]
main
函数的地址
exe.got
字典,存储GOT表中各函数的表项地址
exe.got["puts"]
puts
在GOT表中的地址
exe.plt
字典,存储PLT表中各函数的入口地址
exe.plt["puts"]
puts
在PLT表中的入口地址
exe.symbols["puts"]
简写elf.sym
如果puts
是静态链接,
会返回puts
在.text
段中的真实地址(.puts
代码的起始地址)
如果puts
是动态链接
- 返回的是
puts@plt
,也就是puts
在PLT中的地址 - PLT只是一个跳转stub,并不是真正的
puts
实现 - 如果想要
puts
在libc
中的真实地址,需要用elf.got["puts"]
,并在程序运行时解析它。
查找字符串exe.search[b"/bin/sh"]
在ELF文件中搜索字符串/bin/sh
的地址exe.search[b"flag"]
在ELF文件中搜索“flag”相关的字符串
误区
可能的误区是,pwntools在静态分析时给出的地址是相对于文件中的偏移,而不是实际运行时的绝对地址。
python脚本常用语法
gdb.attach()之掌握时机
最好在等待输入之间
在send之前加pause()
ELF对象于libcsearcher函数区别
pwntools使用
http://example.com/2025/03/04/pwntools使用/