1

假设我正在尝试为某个软件开发一个漏洞利用程序,它可以以两种不同的行为做出响应:一种是由于不正确的变量分配导致进程崩溃,另一种是我获得了 EIP 的控制权并返回到无效地址。这两种不同行为的原因是由于 ASLR,并且因为我只有部分信息泄漏,所以我被迫进行一些暴力破解。我希望程序仅在修改 EIP 时中断。但是,由于进程不断崩溃和重生,我无法告诉程序只有在修改 EIP 时才停止;无论如何,该进程将始终在 GDB 中崩溃。我怎样才能克服这个困难?(考虑将其发布在 IT Security 中,但决定在这里会更好,因为这与 GDB 有更多关系)

4

1 回答 1

0

您应该在内存损坏发生之前设置断点。在崩溃的那一刻,gdb 将中断,您可以使用该命令show stack告诉您希望它认为调用堆栈是,但是如果您已经损坏了 EIP,那么您已经部分损坏了函数的堆栈框架,show stack并将部分损坏(取决于你粉碎了多少堆栈!)。但是,此过程可以帮助缩小发生内存损坏的位置,并且您始终可以在调用堆栈的较高位置设置断点并逐步执行程序。

GDB 还具有反向调试,这可能是一种更简单的方法,因为您可以在崩溃后向后退一步。但是,此功能是相当新的。通常黑客必须使用上述技术。

于 2012-06-27T01:19:46.433 回答