我正在读一本关于缓冲区溢出漏洞等的书。 但是这本书没有一个问题没有答案。如何在不查看程序源代码的情况下使用GDB检测缓冲区溢出?是否可以检测到装配体的缓冲流?
答案 0 :(得分:1)
缓冲区溢出会导致行为立即发生可观察的变化(程序在那里崩溃或挂起),或者它可能很远(它会在以后崩溃或挂起,或者它会破坏重要数据并开始行为不端,需要时间和注意力才能看到它可以是良性的(因为在那之后不使用被覆盖的内存)。
除非你知道你在寻找什么,并且熟悉代码或它的反汇编,否则一般都没有简单,防弹或自动的溢出检测方法。
如果是您的代码,您可以通过多种方式找到缓冲区溢出:
如果代码不是你的,你不知道并且只有反汇编,事情会变得更加复杂。您仍然可以尝试通过特殊(恶意)制作数据来测试它。如果发生崩溃,可能是因为缓冲区溢出,或者它可能靠近可能发生的地方。
存在一些工具可以让您在调用OS函数的位置将错误注入程序。您可以使用它们来发现一些错误检查不充分的地方,可能是缓冲区溢出。
这不是一个简单的问题,也没有简单的解决方案,这可能就是为什么这本书没有在你想要的层面上明确地解决它。或者你可能错过了它。