调试逆向 【讨论】_security_cookie的问题

代码:

#include <stdlib.h>
void study1()
{
  char str[4];  //标记一
  gets(str);
  printf("你输入的内容是\n%s",str);
 }

int main(int argc, char* argv[])
{
  study1();
  system("PAUSE");
  return 0;
}

不明白的是,在上述"标记一"处,如果str的长度小于等于4,release下为什么没有生成_security_cookie啊?如果长度大于4就会生成_security_cookie,我是在vs 2005下试验的,
求看雪牛牛给解答……

----------------------------------------------------------------------------------------------------------------------

当应用程序启动时,程序的cookie(4字节(dword),无符号整型)被计算出来(伪随机数)并保存在 
加载模块的.data节中,在函数的开头这个cookie被拷贝到栈中,位于EBP和返回地址的正前方(位于返 
回地址和局部变量的中间)。

[buffer][cookie][savedEBP][savedEIP] 
在函数的结尾处,程序会把这个cookie和保存在.data节中的cookie进行比较。 
如果不相等,就说明进程栈被破坏,进程必须被终止。

为了尽量减少额外的代码行对性能带来的影响,只有当一个函数中包含字符串缓冲区或使用_alloca函数 
在栈上分配空间的时候编译器才在栈中保存cookie。另外,当缓冲区至少于5个字节时,在栈中也不保 
存cookie。

在典型的缓冲区溢出中,栈上的返回地址会被数据所覆盖,但在返回地址被覆盖之前,cookie早已经被 
覆盖了,因此就导致了exploit的失效(但仍然可以导致拒绝服务),因为在函数的结尾程序会发现cookie 
已经被破坏,接着应用程序会被结束。

时间: 2024-12-13 21:02:59

调试逆向 【讨论】_security_cookie的问题的相关文章

调试逆向分为动态分析技术和静态分析技术(转)

在软件开发的过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误.而在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证分析结果.由于操作系统都会提供完善的调试接口,所以利用各类调试工具可以非常方便灵活地观察和控制目标软件.在使用调试工具分析程序的过程中,程序会按调试者的意愿以指令为单位执行. 调试逆向分为动态分析技术和静态分析技术. 动态分析技术指的是使用调试工具加载程序并运行,随着程序运行,调试者可以随时中断目标的指令流程,以便观察相关计算的结果和当前的设备情况.

[转]iOS高级调试&amp;逆向技术-汇编寄存器调用

前言 本文翻译自Assembly Register Calling Convention Tutorial 序言 通过本教程,你会可以看到CPU使用的寄存器,并探索和修改传递给函数调用的参数.还将学习常见的苹果计算机架构以及如何在函数中使用寄存器.这就是所谓架构的调用约定. 了解汇编是如何工作的,以及特定架构调用约定是如何工作是一项极其重要的技能.它可以让你在没有源码的情况下,观察和修改传递给函数的参数.此外,因为源码存在不同或未知名称的变量情况,所以有时候更适合使用汇编. 比如说,假设你总想知

[调试逆向] 学会使用windbg定位程序bug

学会使用windbg定位程序bug - 原文地址:https://www.cnblogs.com/zhehan54/p/9436629.html

13 年的 Bug 调试经验总结

在<Learning From Your Bugs>一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug.最近,我回顾了我所有的194个条目(从13岁开始),看看有什么经验教训是我可以学习的.下面是我总结的最重要的经验教训,包括编码,测试和调试三个方面.编码下面这些都是我经历过的会导致难点bug的问题:1.事件顺序.在处理事件时,提出下列问题会很有成效:事件可以以不同的顺序到达吗?如果我们没有接收到此事件会怎么样?如果此事件接连发生两次会怎么样?哪怕通常不会发生,但系统(或交互系统)其他

BUG调试经验

转自脚本之家 下面这些都是我经历过的会导致难点bug的问题: 1.事件顺序 在处理事件时,提出下列问题会很有成效:事件可以以不同的顺序到达吗?如果我们没有接收到此事件会怎么样?如果此事件接连发生两次会怎么样?哪怕通常不会发生,但系统(或交互系统)其他部分的bug可能会导致事件发生呢. 2.过早 这是第一点"事件顺序"的一个特例,但它确实会引起一些棘手的bug,因此我把它单独拎出来说明.例如,如果信令消息在配置和启动程序完成之前就被过早接收,那么可能就会有很多奇怪的行为发生.另一个例子:

使用WinDbg内核调试[转]

Technorati 标签: windbg,内核调试 WINDOWS调试工具很强大,但是学习使用它们并不容易.特别对于驱动开发者使用的WinDbg和KD这两个内核调试器(CDB和NTSD是用户态调试器). 本教程的目标是给予一个已经有其他调试工具使用经验的开发者足够信息,使其能通过参考WINDOWS调试工具的帮助文件进行内核调试. 本文将假定开发者熟悉一般WINDOWS操作系统和进程的建立过程. 本文的重点是集成内核模式和用户态模式的图形化调试器WinDbg.KD在脚本和自动化调试中更有用,并且

OD调试1--第一个win32程序

OD调试一:第一个Win32程序的修改 在软件开发的过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误.而在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证分析结果.由于操作系统都会提供完善的调试接口,所以利用各类调试工具可以非常方便灵活地观察和控制目标软件.在使用调试工具分析程序的过程中,程序会按调试者的意愿以指令为单位执行. 调试逆向分为动态分析技术和静态分析技术. 动态分析技术指的是使用调试工具加载程序并运行,随着程序运行,调试者可以随时中断目标的指令流程,以

13年棘手Bug调试总结18条教训(值得收藏)

曾经在<Learning From Your Bugs(从你的错误中学习)>一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug.最近,我回顾了我所有的194个条目(从13岁开始),看看有什么经验教训是我可以学习的.下面是我总结的最重要的经验教训,包括编码,测试和调试三个方面. 编码 下面这些都是我经历过的会导致难点bug的问题: 1.事件顺序.在处理事件时,提出下列问题会很有成效:事件可以以不同的顺序到达吗?如果我们没有接收到此事件会怎么样?如果此事件接连发生两次会怎么样?哪怕通常不会

Bug 调试经验总结

下面这些都是我经历过的会导致难点bug的问题: 1.事件顺序.在处理事件时,提出下列问题会很有成效:事件可以以不同的顺序到达吗?如果我们没有接收到此事件会怎么样?如果此事件接连发生两次会怎么样?哪怕通常不会发生,但系统(或交互系统)其他部分的bug可能会导致事件发生呢. 2.过早.这是第一点"事件顺序"的一个特例,但它确实会引起一些棘手的bug,因此我把它单独拎出来说明.例如,如果信令消息在配置和启动程序完成之前就被过早接收,那么可能就会有很多奇怪的行为发生.另一个例子:连接在被放进空