- 1、本文档共32页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一 缓冲区溢出调试和Superscan、X-scan、sniffer等工具的使用
实验目的:
掌握OllyDbg调试工具调试可执行文件的方法和步骤;
利用OllyDbg进行调试,观察堆栈变化,主要是esp和eip以及ebp的状态变化,在调试状态下,通过理论与实践的结合,进一步加深对缓冲区溢出的概念和原理的理解。
学会调试利用栈溢出,通过构造特殊字符串通过溢出的方法改变程序执行流程。
学习掌握Superscan的使用,并能够进行一些简单的扫描。
练习用X-scan来进行一些实际的扫描过程。
学习并掌握利用Sniffer进行简单的抓包。
实验内容与步骤:
栈是一种机制,计算机用它来将参数传递给函数,也可以用于放入局部函数变量,函数返回地址,它的目的是赋予程序一个方便的途径来访问特定函数的局部数据,并从函数调用者那边传递信息。栈的作用如同一个缓冲区,保存着函数所需的所有信息。在函数的开始时候产生栈,并在函数的结束时候释放它。栈一般是静态的,也意味着一旦在函数的开始创建一个栈,那么栈就是不可以改变的。栈所有保存的数据是可以改变的,但是栈的本身一般是不可以改变的。
EIP:扩展指令指针。在调用函数时,这个指针被存储在栈中,用于后面的使用。在函数返回时,这个被存储的地址被用于决定下一个将被执行的指令的地址。
ESP:扩展栈指针。这个寄存器指向栈的当前位置,并允许通过使用push和pop操纵或者直接的指针操作来对栈中的内容进行添加和移除。
EBP:扩展基指针。这个寄存器在函数的执行过程中通常是保持不变的。它作为一个静态指针使用,用于只想基本栈的信息,例如,使用了偏移量的函数的数据和变量。这个指针通常指向函数使用栈底部。
通过实践来进行处理
? ? 首先演示一下栈的形成:下面是以下代码;
复制代码
#includestdio.h
int main()
{
_asm
{
push 0 pop eax
}
}
复制代码
我们可以在VC++6.0 进行调试来观察一下esp和eip以及ebp的状态变化;
? ? ? 我们F11来进行跟进下,就会发现esp栈顶指针会跟随变化,因为我们向栈中压人样四个字节的数据,指针会减小4个字节的。
?
? ? 而我们pop的时候就会发现栈顶指针就变大成为了原来的样子。这就告诉我们一个道理栈中压人数据的时候栈顶指针是变小的,而弹出栈的时候栈顶指针是变大的。也就是栈底地址高于栈顶地址。
? ? 接下来演示函数内栈的调用过程。
? ? ?首先没有进入到overflow函数里面的的时候ebp和esp都是有值得,说明外面的main函数也有栈的实现。我们反汇编看一下具体栈的实现。F11单步走一下就会发现一个跳转jmp跳转到函数overflow。
?这时候后我们单步运行F11。 push ebp mov ebp,esp sub esp,44h push ebx push esi push edi lea edi,[ebp-44h]
0040102C mov ecx,11h mov eax,0CCCCCCCCh rep stos dword ptr [edi]
5: int our=0; mov dword ptr [ebp-4],0
6: return;
? 就会看到如上代码,这时候我们来进一步分析一下。首先它将ebp指针压人栈内,将当前的esp指向的地址给了ebp,这时候esp减小了44h,这时候在堆栈中又开辟了一个长度为44h的一个新的栈空间。从我们分析可以得出dword ptr[ebp-4],0这个局部变量是存放在新的栈空间里面的。ebp-4远远小于44h空间大小。局部变量是存放在栈中的。
? ?通过这个例子我们可以得出一个结论就是:
栈中存放的数据是什么?
??如果程序要调用某个函数,那么计算机就会自动将函数返回后执行的指令地址先压入栈里,等函数调用完之后再从中取出,跳转到该处执行。
溢出的原因?
? 正式因为先放入栈的地址在前,而后放入栈的数据一旦过长,就会覆盖到前面的地址这就会导致程序发生错误。
下面来看一下如下的例子来演示栈溢出现象;
#includestdio.h
#in
您可能关注的文档
最近下载
- 审稿意见回复信英文模板和语料总结.pdf
- GB50461-2008:石油化工静设备安装工程施工质量验收规范.pdf VIP
- Bose博士SoundTouch 300 Soundbar 扬声器说明书.pdf
- 剧本杀完整剧本 罪恶(4人封闭).docx
- 新版pep小学英语五年级上册unit2alet'stalk课件.ppt
- 1.2.1 学习使用显微镜课件2024-2025学年度七年级上册人教版生物学.pptx VIP
- (完整版)加油站基本情况调查分析报告.doc
- 2024年轮胎行业分析报告:万亿市场群雄逐鹿,步入2.0时代消费属性凸显.pdf
- 阅读考级练习之《无字书图书馆》测试题【附答案】.docx
- 主题3:友情类20篇(解析版)-备战2022年新高考英语读后续写主题分类专项汇编.docx
文档评论(0)