其他分享
首页 > 其他分享> > 找出是否已使用堆栈粉碎保护编译二进制文件

找出是否已使用堆栈粉碎保护编译二进制文件

作者:互联网

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