找出是否已使用堆栈粉碎保护编译二进制文件
作者:互联网
在Linux上,有没有办法告诉我是否已经从命令行打开/关闭堆栈粉碎编译二进制文件?
我很确定我有保护,但仅仅为了理智,我想为我的二进制文件编写一些测试,以防万一有一天出现问题且保护已关闭…某些原因.
解决方法:
如果您的可执行文件格式是ELF,并且碰巧是由GCC v4.3或更高版本编译的,恰好通过了-frecord-gcc-switches命令行开关,那么您可以执行以下操作:
$gcc -frecord-gcc-switches -fno-stack-protector test.c
$readelf -p .GCC.command.line a.out
String dump of section '.GCC.command.line':
[ 0] -imultiarch x86_64-linux-gnu
[ 1d] test.c
[ 24] -mtune=generic
[ 33] -march=x86-64
[ 41] -frecord-gcc-switches
[ 57] -fno-stack-protector
当GCC通过-frecord-gcc-switches开关时,它会将.GCC.comment.line部分(包含传递给GCC的开关)添加到它创建的二进制ELF文件中.
然后,您可以使用readelf打印出二进制ELF文件中的相关部分,并搜索-fno-stack-protector开关的存在,以确定二进制文件是否已使用stack-smashing打开/关闭进行编译.
不幸的是,这个解决方案仅限于使用-frecord-gcc-switches编译的二进制文件 – 这实际上意味着它在大多数情况下都是无用的,尽管在你的特定情况下也许你可能会幸运.
值得一提的是,检测二进制文件中的缓冲区溢出漏洞是一个活跃的研究领域.例如,这是一个research paper detailing a simple detection module (see section 7.1).
也可以看看
07001
标签:c-3,linux,unix,command-line,binaryfiles 来源: https://codeday.me/bug/20190825/1721219.html