自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (8)
  • 收藏
  • 关注

原创 DUMP文件分析6:简单的堆破坏示例

本节,我们来看一个简单的堆破坏示例,程序依旧来自前面的示例,Crash Me!按钮的消息函数如下:void Cdump3Dlg::OnBnClickedButton1(){ int* a = new int[1000]; for( int i = 0; i < 1005; i++ ) a[i] = i; printf("%d\n", a[0]); dele

2016-08-03 10:58:02 2894

原创 DUMP文件分析5:Windows中malloc和free的实现

本来,本节应该是继续典型的DUMP分析的,但由于后面我准备说到堆损坏(Heap Corruption)所导致的程序崩溃,而堆相对于栈来说要复杂的多,所以,有些基础知识必须得清楚,才能定位堆损坏的原因。 本节,我们从表面开始,即new/delete和malloc/free,这两套API(简单的当作API吧)一个用于C++,一个用于C,面试题中常常拿来进行比较。事实上,它们有本质上的区别,new/de

2016-08-02 18:23:42 3698

原创 DUMP文件分析4:栈溢出

前面说到过,栈溢出类型的异常通过编程的方式获取DUMP可能不成功,因为栈溢出会破坏SEH(结构化异常处理)框架。实际上,通过DUMP文件来调试栈溢出同样是困难的,因为栈溢出本身一般不会造成异常,异常往往发生在栈溢出破坏栈上的数据之后,同时,由于栈溢出破坏了栈上的数据,使得我们无法对函数调用进行回溯,从而难以定位问题的发生位置。 本节的示例是经dump1简单修改而来,在Crash Me!按钮的消息处

2016-07-31 20:52:44 6295

原创 DUMP文件分析3:用任务管理器采集的DUMP

看完前一节,你可能会说,所谓的DUMP分析毫无技术含量啊,直接一个 !analyze -v就搞定了啊。不错,第一条输入的命令一般都是!analyze -v,但不代表着自动分析可以解决所有的问题。有时候,!analyze -v出来的结果会将你带入歧途,如果你不抱着怀疑态度的话。本节的示例依然是前一节中的,但是我们不自动保存DUMP,而是在程序崩溃之后,从任务管理器中手动保存。操作很简单,我就不演示了。

2016-07-30 22:02:51 3479 1

原创 DUMP文件分析2:一个最简单的DUMP分析示例

本节开始,我将在示例中给大家讲述基本的DUMP文件分析方法。读者应该对Windows系统比较了解,同时比较熟悉Windbg。 本节的示例非常简单,也非常经典,就是常常会遇到的访问空指针。Windows将进程内存空间的一段范围设置为NULL(64KB),这段空间禁止访问。一旦我们在程序中不小心访问了这段地址(通常是指针未初始化),就会引起访问越界异常,造成程序崩溃,例如本示例: 这是一个简单的

2016-07-30 21:53:55 28730

原创 DUMP文件分析1:DUMP文件简介

1.1 DUMP文件类型Windows下Dump文件分为两大类,内核模式Dump和用户模式Dump。内核模式Dump是操作系统创建的崩溃转储,最经典的就是系统蓝屏,这时候会自动创建内核模式的Dump。用户模式Dump进一步可以分为完整Dump(Full Dump)和迷你Dump(Minidump)。完整Dump包含了某个进程完整的地址空间数据,以及许多用于调试的信息,而Minidump则有许多类型,

2016-07-30 21:42:57 15288

原创 栈溢出笔记1.12 栈Cookie

栈Cookie,也叫安全Cookie。我们先来看一看栈Cookie的实现机制,使用的程序为1.2节中的example_2,重点在函数get_print()部分。还记得在1.2节中我们为了演示栈溢出,去掉了编译设置中的“缓冲区安全检查(GS)”选项,我们先看看未启用该选项时的get_print()函数代码: 图78 未启用GS的get_print()函数代码然后,启用该选项,看启用该选项之后的g

2016-04-19 22:52:30 1535

原创 栈溢出笔记1.11 SafeSEH

在上节写示例的过程中,我把要用到的POP+POP+RET指令写在了自己的一个DLL中。POP+POP+RET指令是很常见的指令,一般函数的末尾都是这种形式,因此,系统DLL中应该是有该指令的,比如ntdll.dll中就有: 图73我们把上节示例中的地址改成这个地址试试,没有弹出MessageBox,说明Shellcode失效了,在调试器中看看: 图74提示说无法处理异常,说明改了地址后的

2016-04-16 21:00:40 1051

原创 栈溢出笔记1.10 基于SEH的栈溢出

上节中简单地讲述了SEH的原理及逻辑结构。本节,要继续讲述SEH的物理结构及如何利用它进行栈溢出。先来看SEH的物理结构。先回想上节中的图51,我们在程序停在gets函数输入的时候查看SEH链,看到了一大堆异常处理器,而当我们把断点设置在gets函数下一条语句的时候,其中很多没有了,这给我们一个直观的感觉:SEH链保存在栈上。下面,我们就来看看栈上的SEH链。我们使用的是example_10,即添加

2016-04-16 14:27:22 8787 2

原创 栈溢出笔记1.9 认识SEH

从本节开始,我们就要研究一些稍微高级点的话题了,如同在1.2节中看到的,Windows中为抵抗栈溢出做了很多保护性的检查工作,编译的程序默认开启了这些保护。如果我们不能绕过这些保护,那么我们的Shellcode也就是一个玩具而已,什么都做不了。我们从SEH(结构化异常处理)开始。这篇文章讲SEH简洁易懂:http://www.securitysift.com/windows-exploit-deve

2016-04-16 14:16:54 4845 3

原创 栈溢出笔记1.8 字符串问题

在前面编写Shellcode的过程中,我们用到的字符串要么直接使用DB定义,要么通过PUSH直接压入栈上(相当于定义局部变量),这样的话,如果一个Shellcode中的字符串多一点的话,仅字符串就要占用不少空间。而且,在1.7节中,我们在kernel32.dll的导出表中查找函数名称的时候,有一个字符串比较的过程,要将我们指定的函数名(如LoadLibraryA)与导出表中的函数名比较,这样一方面我

2016-04-10 16:54:56 887

原创 栈溢出笔记1.7 地址问题(2)

1.6节中找到了kernel32.dll的基地址,这一节,来解决第二个重要问题,即解析kernel32.dll的导出表,找到LoadLibraryA和GetProcAddress的地址。DLL导出的函数信息位于导出表中,因此,首先,要在PE文件中找到导出表(IMAGE_EXPORT_DIRECTORY)的地址,这位于数据目录(IMAGE_DATA_DIRECTORY)中。而数据目录位于PE扩展头(I

2016-04-09 23:49:55 991

原创 栈溢出笔记1.6 地址问题(1)

前面的Shellcode中,我使用的都是自己XP机器上的硬编码地址。任何时候在Shellcode中使用硬编码地址都不是个好主意,这一点与动态库的重定位类似,一旦系统环境和程序编译设置发生变化,Shellcode几乎肯定会失效。因此,我们要找到更好一点的方法。前面的Shellcode中,我用到了如下几个硬编码地址,它们的含义如下: 其中,LoadLibraryA的作用比较特殊,我们用它来加载us

2016-04-09 23:45:51 4161

原创 栈溢出笔记1.5 换一个汇编工具

前面的内容中我们使用VC++内联汇编,虽然很方便,但是无法定义字符串常量,导致我们需要把字符串的ASCII码找到,再一个一个压入栈中,比较繁琐,本节,我们换一个汇编工具——nasm,选择它是因为它可以跨平台使用。有了这个汇编工具,我们就可以定义字符串常量了,例如:/********************************************************************

2016-04-09 23:37:40 815

原创 栈溢出笔记1.4 黑掉example_2

在1.2节中我们编写了一个有漏洞的程序,通过输入可以控制其EIP,本节,我们要让example_2运行我们的MessageBox。再看看example_2:/*****************************************************************************/// example_2: 演示栈溢出#include <stdio.h>void

2016-04-09 23:32:42 2856

原创 栈溢出笔记1.3 准备Shellcode

经过1.1和1.2节的讲述,我们已经知道了如何更改EIP的值。程序执行函数之后将跳转到我们设定的位置开始执行,因此,我们需要准备一个自己的程序,接手后面的工作。这是一个什么样的程序?是一个C语言编写的代码?是一个可直接调用的exe?肯定不是,因为EIP所指的地址保存的内容为指令的操作码,CPU读取该操作码执行相应的操作。所以我们要准备的程序也应该是一段“操作码”。继续写1.1中的Hello Worl

2016-04-09 23:24:19 3383

原创 栈溢出笔记1.2 覆盖EIP

1.1节中我们说到可以利用栈溢出来破坏栈中原有的内容,这一节中,我们就来看看如何争夺到返回地址(EIP),使得我们可以随意控制它的值,这样我们就可以控制程序。来看一个经典的程序:这个程序的get_print函数中定义了一个大小为11个字节的数组,正常情况下我们的输入应该最多为10个字符(还有一个\0结束符),而gets函数没有明确定义输入的大小,因此,我们可以输入超过10个字符,从而造成栈溢出。如下

2016-04-09 23:14:34 4825

原创 栈溢出笔记1.1 函数调用过程

选择从栈溢出开始学习Shellcode的编写,是因为在没有保护机制(栈Cookie,ASLR,DEP,SafeSEH)的系统中使用栈溢出是一件很简单的事情。栈区随着函数调用动态变化,每个函数调用时在栈上占用的空间称为栈帧。用一个示例来说明栈上保存的内容及动态变化的过程。 下面是一个程序,生成一个对话框显示一条“Hello World!”消息。下面是该程序的C代码: 在VS2008中用Debu

2016-04-09 23:04:35 4656

原创 进程内存布局

进程的用户空间Windows系统中,系统空间与用户空间的分界线为0x80000000,该地址以上为系统空间,以下为用户空间,各占2GB(默认情况下)。2GB的用户空间不是全部可访问的,它被划分成了以下几个部分:用户空间的两端各有64KB的隔离区,是不允许访问的。上端的隔离区将用户空间与系统空间隔离开,下端的隔离区就是我们编程时遇到的NULL,因此NULL实际所表示的区域不是一个地址,而是一个64KB

2016-03-06 23:23:09 1610

原创 LIST_ENTRY结构

在Windows驱动相关编程中,会用到该结构。Windows的源代码中大量使用了该结构。该结构用来组成常见的数据结构——双链表,并且带有头部节点。带头部节点的链表相对于不带头部节点的链表简化了一些链表操作,主要是插入和删除。LIST_ENTRY结构如下:typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; struct _LIST_EN

2016-03-04 13:20:34 1855

原创 ActiveX控件测试工具在VS2008下编译及使用

编译TSTCON最近由于项目需要,要开发一个自定义的ActiveX控件,实验室一直使用的是VS2008, 测试工具ActiveX Control Test Container(TSTCON)在VS2008中不提供现成的exe,而提供了工程,需要自己编译,现记录一下过程。我的VS2008装在C盘,工程路径为“C:\Program Files (x86)\Microsoft Visual Studio

2016-03-01 22:22:26 1658

原创 教程番外1——设备实例与设备类

1 简述在教程1中,我们在INF文件中添加了一个自己的设备类,并为其分配了一个GUID,还定义了注册表项,先回顾一下INF文件中的相关部分:; 版本域[Version]...Class=HUSTSample ; 我们的驱动不属于已有的设备类,定义一个新的设备类ClassGuid={FDA3877E-5FF3-4c18-8235-7FEA16EE04E2} ; 设备类的GUID...;*

2016-02-05 17:40:02 10372 1

原创 kmdf驱动教程2——驱动程序与应用程序通信

1 简述作为写在最前面的话,我不会在本教程中专门去介绍KMDF框架、对象、方法等基础知识,因为相关资料已经不少,而且文档中都有,如果读者不了解,应该先去看看相关内容。驱动程序作为内核模式的一部分,都是为我们的应用程序服务的。而我们在教程1中编写的HelloWord不仅没有为我们服务,而且我们还难以控制,除了在设备管理器中操作,连打印出来的信息都要特殊的工具才能看得到。所以,一方面我们要让驱动程序为我

2016-01-26 20:49:26 8315 5

转载 Haroopad中文显示问题

安装Haroopad之后发现编辑器中输入的中文字体看不到,而右边的预览框中显示正常。然后把字体调小之后又可以正常显示。 在“文件”下打开“偏好设置”,选择编辑器,找到默认主题,点击编辑,如图:可以看到default.css文件,修改成如下,字体根据自己喜欢修改。/** You can only use the following style. - color, font-family, fo

2016-01-17 22:48:34 4613

原创 kmdf驱动教程1——从Hello World开始

kmdf 驱动开发入门

2016-01-17 15:47:19 13274 3

原创 whoami查看用户权限

在Windows系统中,进程具有访问令牌,而对象具有安全属性,如同钥匙和锁的关系,只有正确配对才可以访问。新建进程时,进程的访问令牌从当前用户处继承,使用whoami  /PRIV命令可以查看用户的权限。这是一个非管理员用户的权限:使用同样的用户,以管理员身份启动cmd,可以看到权限发生了变化:

2016-01-07 17:20:48 2681

原创 OllyDbg消息断点(unable to read memory of debugged process...)

在OllyDbg给窗口设置消息断点的时候遇到unable to read memory of debugged process...错误,无法设置xi

2015-12-25 22:25:59 4035

osgHimmel源代码

osgHimmel源代码,也可以从http://osghimmel.googlecode.com/svn/trunk/下载,需要安装svn客户端

2014-08-12

Windows图形编程;袁枫-书签清晰版

Windows图形编程;袁枫-书签清晰版

2013-11-24

数据结构实验程序

数据结构实验中顺序表,链表,二叉树典型算法程序,程序简单,可运行。

2012-06-22

turbo debugger5.0

turbo debugger 汇编调试工具

2012-03-28

turbo debugger

turbo debugger汇编调试工具。。。。。。。。。。。。。。。。。。

2012-03-28

数学建模资料大全

数学建模资料大全迅雷种子,内含无穷数学建模资料

2011-09-30

vc++6.0英文版

vc++6.0英文精简版,win7没有兼容问题。

2011-09-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除