修改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段默认设置为不可执行,需手动修改才能使其可执行。

➡️

继续阅读