通过SEH链绕过GS保护机制 ⑴.  原理分析: i.异常处理结构(SEH)处理流程如下: SEH是基于线程的,每一个线程都有一个独立的SEH处理结果,在线程信息块中的第一个结构指向线程的异常列表,Fs:[0]总是指向当前线程的TIB,其中0偏移的指向线程的异常链表,即ExceptionList是指向异常处理链表(EXCEPTION_REGISTRATION结构)的一个指针. 线程信息块定义: typedef struct _NT_TIB { struct _EXCEPTION_REGISTRA…
1    GS内存保护机制 1.1    GS工作原理 栈中的守护天使--GS,亦称作Stack Canary / Cookie,从VS2003起开始启用(也就说,GS机制是由编译器决定的,跟操作系统无关). GS机制分三个步骤:计算随机种子 --> canary写入栈帧 --> GS校验. [1]程序启动时,读取.data的第一个DWORD作为基数,然后和各种元素(时间戳,进程ID,线程ID,计数器等等)进行XOR加密 [2]然后将加密后的种子再次写入.data的第一个DWORD [3]函数…
前言:之前关于safeSEH保护机制的原理等信息,可在之前的博文(内存保护机制及绕过方案中查看). 利用未启用SafeSEH模块绕过SafeSEH ⑴.  原理分析: 一个不是仅包含中间语言(1L)且未启用SafeSEH的模块中的异常处理,如果异常处理链在栈上,异常处理函数指针不在栈上,那么这个异常处理就可以被执行. 所以,我们能找到一个未启用SafeSEH的模块,就可以利用它里面的指令作为跳板来绕过SafeSEH. ⑵.环境准备: i.实验代码: 生成exe文件的代码: #include "s…
1.1    SafeSEH内存保护机制 1.1.1    Windows异常处理机制 Windows中主要两种异常处理机制,Windows异常处理(VEH.SEH)和C++异常处理.Windows异常处理结构未公开的,包含向量化结构异常VEH及结构化异常处理SEH.由操作系统提供的服务,当一个线程出现错误时,操作系统调用用户定义的一个回调函数_exept_handler.回调函数接收到操作系统传递过来的许多有价值的信息,例如异常的类型和发生的地址.使用这些信息,异常回调函数就能决定下一步做什么…
ASLR保护机制 ASLR简介 微软在Windows Vista.2008 server.Windows 7.Windows 8等系统的发布中, 开始将ASLR作为内置的系统保护机制运行, 将系统映像的基址设置到1/256的random slot上, 同时将各个线程的堆栈和堆进行随机化.这需要程序和系统的双重支持, 但是程序的支持并不是一定的.可以使用如下注册表选项来使用或禁用 ASLR 之于所有的程序映像: Edit HKLM\SYSTEM\CurrentControlSet\Control\…
利用加载模块之外的地址绕过safeSEH 前言:文章涉及的概念在之前的文章中都有过详细的讲解 ⑴.  原理分析: 当程序加载进内存中后,处理PE文件(exe,dll),还有一些映射文件,safeSEH是不会对这些映射文件做安全检查.所以如果在这些映射文件中找到一些跳板地址(意义见之前的绕过利用/GS机制),就可以达到控制EIP的目的,执行恶意代码. 如上图,可以看到在PE文件之前有很多map(映射文件),safeSEH是不会对这些文件做安全检测的. ⑵.环境准备: i.实验代码: #includ…
KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态获取 <寒江独钓>内核学习笔记(5)   继续我们的线程相关的数据结构的学习.接下来我们学习 KTHREAD,TEB这两个结构. 1. 相关阅读材料 1. <加密与解密3> 2. [经典文章翻译]A_Crash_Course_on_the_Depths_of_Win32_Structured_Exception_Handling.pdf 3. <0 DAY安全: 软件漏洞分析技术>…
vuex-- Vue.的中心化状态管理方案(vue 组件之间的通信简化机制) 如果你在使用 vue.js , 那么我想你可能会对 vue 组件之间的通信感到崩溃 .vuex就是为了解决组件通信问题的. 组件通信的本质其实就是在组件之间传递数据或组件的状态(这里将数据和状态统称为状态),但可以看到如果我们通过最基本的方式来进行通信,一旦需要管理的状态多了,代码就会变得十分臃肿和庞大.对所有状态的管理便会显得力不从心,因此,vuex出现了,他就是帮助我们把公用的状态全抽出来放在vuex的容器中,然后…
tfref 前言 C++对象的内存布局 只有数据成员的对象 没有虚函数的对象 拥有仅一个虚函数的对象 拥有多个虚函数的对象 单继承且本身不存在虚函数的继承类的内存布局 本身不存在虚函数(不严谨)但存在基类虚函数覆盖的单继承类的内存布局 定义了基类没有的虚函数的单继承的类对象布局 多继承且存在虚函数覆盖同时又存在自身定义的虚函数的类对象布局 如果第1个直接基类没有虚函数(表) What if 两个基类都没有虚函数表 如果有三个基类: 虚函数表分别是有, 没有, 有! C++中父子对象指针间的转换与…
一个先有鸡还是先有蛋的问题,先看一段代码: a = 2; var a; console.log(a); 通常我们都说JavaScript代码是由上到下一行一行执行,但实际这段代码输出的结果是2.但这段代码并不能为我们要讨论的问题提供完整的参考意义,所以再看一下代码: console.log(a) var a = 2; 这段代码的测试结果输出了undefined. 这两段代码打破了我们常说的JavaScript代码从上往下执行的说法,那到底是变量声明在前还是赋值在前呢? 函数预编译: 还记得我在上…