GS编译选项是什么?为什么?怎么办?简单理解(security_cookie)

2024-02-24 10:18

本文主要是介绍GS编译选项是什么?为什么?怎么办?简单理解(security_cookie),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GS是什么

GS编译选项出现的目的,大部分原因是为了防止下面的情况而出

由于堆栈缓冲区溢出,导致代码的eip结构被更改,执行了未知的代码。

在微软的安全开发周期模型中,专门在安全编码实践中推荐:对于微软的最新C/C++编译器,使用GS选项编译选项,加入检测函数堆栈缓存溢出错误额外代码。

为什么是GS

GS怎么就能这么做,为什么是GS。

讲解原理这里需要一些对函数调用过程中堆栈变化的一些理解。就不再赘述。具体的自己跑一下就知道,这里只列出结果。

调用A函数时

按照数字的顺序依次压入栈。

  // 当前函数栈空间//-----esp==ebp(当前)     //然后把这个esp作为当前函数栈空间的ebp6.A函数内部局部变量5.异常处理代码入口地址 //如果A函数设置了异常处理4.安全cookie         //如果编译器加GS选项3.ebp(上层)2.A函数下一跳指令地址 //返回地址1.调用A函数所需的参数-----ebp          //上层函数的ebp(上层)

缓冲区溢出的原理简单来说就是填充6.A函数内部局部变量,一直往下填充,直到填充掉下一跳指令地址(EIP),这样函数返回后,跳转到的就是指定的代码区域执行。从而执行恶意代码。

GS的存在使得通过上述原理修改EIP时,肯定要填充cookie的内容。

在A函数结束时
    1.add esp,原本的值-4             //清空cookie 上面的栈空间2.mov ecx,[ebp-0x4]              //把当前cookie的值取出来放到ecx中3.call ____security_check_cookie()//调用函数检测值ecx的值是否和原本值相同4.mov esp,ebp                     //清除栈上的cookie内容2.pop ebp                         //ebp=ebp(上层)3.retn== pop eip  jmp eip         //jump has saved eip
____security_check_cookie()

安全cookie的检查通过__security_check_cookie函数。它的逻辑非常简单:

__security_check_cookie:
004011a5 3b0d30704000     cmp ecx,[__security_cookie (00407030)]004011ab 7501             jnz  __security_check_cookie+0x9 (004011ae)
004011ad c3               ret
004011ae e9c1ffffff       jmp     report_failure

如果堆栈上的安全cookie的值和__security_cookie的值一致的话,那么函数正常退出。
否则,就会执行错误处理程序:跳往report_failure。之后,会运行__security_error_handler。
如果应用程序没有特别设定__security_error_handler,那么缺省的错误处理就会弹出以下提示框并终止程序。
在这里插入图片描述

怎么添加/取消GS编译选项

用vs2008举例,GS编译选项的勾选和取消

在这里插入图片描述

这篇关于GS编译选项是什么?为什么?怎么办?简单理解(security_cookie)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/741786

相关文章

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka