修改ELF的p_flags
💡
原文中文,约6100字,阅读约需15分钟。
📝
内容提要
本文介绍如何通过修改ELF文件的p_flags字段,使.bss段可执行,以便进行angr符号执行和静态分析。可以使用010 Editor或LIEF工具进行此修改,确保.bss段具有执行权限。
🎯
关键要点
- 本文介绍如何通过修改ELF文件的p_flags字段,使.bss段可执行,以便进行angr符号执行和静态分析。
- 在CTF类比赛中,为了聚焦特定技术,常常降低其他技术门槛,例如禁用ASLR。
- ELF文件有两种头:Program Header和Section Header,执行ELF只需Phdr。
- p_flags字段设置段的内存权限,包括可读、可写和可执行。
- sample_1是用于练习angr符号执行的ELF文件,.bss段在现代环境中不可执行。
- 使用010 Editor可以修改p_flags字段,使.bss段可执行。
- LIEF工具也可以用于静态修改ELF文件,重新构造ELF。
- objcopy命令不适用于修改.bss段的执行权限,因为它只修改Shdr中的sh_flags字段。
- 通过gdb检查修改后的sample_1_patch的.bss段是否可执行,确认其权限为rwxp。
❓
延伸问答
如何修改ELF文件的p_flags字段使.bss段可执行?
可以使用010 Editor或LIEF工具修改ELF文件的p_flags字段,使.bss段具有执行权限。
在CTF比赛中为什么需要修改.bss段的执行权限?
在CTF比赛中,修改.bss段的执行权限可以帮助聚焦特定技术,降低其他技术门槛,例如禁用ASLR。
objcopy命令能否用于修改.bss段的执行权限?
不可以,objcopy命令只修改Shdr中的sh_flags字段,无法影响内存中.bss的执行权限。
如何检查修改后的sample_1_patch的.bss段是否可执行?
可以使用gdb命令检查,运行时查看Perms列是否显示为rwxp,表示.bss段可读、可写、可执行。
使用010 Editor和LIEF工具修改ELF文件有什么区别?
010 Editor更聚焦于修改特定字节,而LIEF工具则是重新构造ELF,修改后字节变化较多。
sample_1文件的.bss段在现代环境中为什么不可执行?
在现代环境中,sample_1的.bss段默认设置为不可执行,需手动修改才能使其可执行。
➡️