2012-06-27 75 views
1

假设我正在尝试开发某种软件的漏洞,它可以用两种不同的行为进行响应:一种是由于不正确的变量分配或两次崩溃导致进程崩溃,我获得了对EIP的控制并返回一个无效的地址。这两种不同行为的原因是由于ASLR,并且因为我只有部分信息泄露,所以我不得不做一些暴力强制。我希望该计划仅在EIP修改时中断。但是,由于流程不断崩溃和重新生成,我无法告诉程序仅在修改EIP时才停止;无论如何,该进程将始终在GDB中崩溃。我如何克服这个困难? (想到在IT安全中发布这个,但是认为它会更好,因为这与GDB有关)GDB调试特定崩溃

+0

你可以试试看security.se,但我会清理一下这个问题。这些人不喜欢黑帽子。 – rook

回答

0

你应该在发生内存损坏之前set a breakpoint。在崩溃的那一刻,gdb会中断,你可以使用show stack这个命令来告诉你它想要的是调用堆栈,但是如果你已经损坏了EIP,那么你已经部分损坏了该函数的堆栈帧,并且show stack将会部分损坏(取决于您砸碎了多少堆!)。然而,这个过程可以帮助缩小发生内存损坏的位置,并且始终可以在调用堆栈中设置更高的断点并逐步执行该程序。

GDB也有reverse debugging,这可能是一种更简单的方法,因为您可以在崩溃后退后一步。但是,这个功能是相当新的。通常黑客必须使用上述技术。