1

我正在读一本关于缓冲区溢出利用等的书。但是这本书没有回答一个问题。如何在不查看程序源代码的情况下使用 GDB 检测缓冲区溢出?是否可以检测到查看程序集的缓冲流?

4

1 回答 1

1

缓冲区溢出可能会导致立即可观察到的行为变化(程序崩溃或挂在那里)或者它可能很遥远(它稍后崩溃或挂起,或者它破坏重要数据并开始行为不端,需要时间和注意力才能看到​​它)或它可能是良性的(因为在那之后不使用覆盖的内存)。

除非您知道要查找的内容并且熟悉代码或其反汇编,否则通常没有简单、防弹或自动的溢出检测方法。

如果是您的代码,您可以通过多种方式找到缓冲区溢出:

  • 代码审查
  • 代码检测(手动或使用某些工具)来检查大小、索引和指针
  • 测试(包括在调试器中逐步执行)

如果代码不是你的并且你不知道它并且只有反汇编,那么事情就会变得更加复杂。您仍然可以尝试通过提供专门(恶意)制作的数据来对其进行测试。如果您遇到崩溃,可能是因为缓冲区溢出,或者它可能靠近可能发生的地方。

有一些工具可以让您在程序调用 OS 函数的地方将故障注入程序。您可以使用它们来发现一些错误检查不足的地方,可能是缓冲区溢出。

这不是一个简单的问题,也没有简单的解决方案,这可能就是为什么这本书没有在你想要的层次上明确地解决它。或者你可能错过了它。

于 2013-01-12T09:17:23.297 回答