缓冲区溢出(1)
2015-03-23 19:34
155 查看
缓冲区溢出(1)
最最简单的第一次实验....
环境:VC 6.0
程序:
运行结果:
main 函数的反汇编结果:
根据11 ~ 12行之间的指令可以推断出当前的栈是这样的:
其中一条指令
的意思是 : 重复执行 stos dword ptr [edi] 11h次 ,rep就是repeat
前面的 ecx 表示重复次数
0CCCCCCCCH 这个值表示未被初始化(初始化为0xcc, 使用这个值是因为0xcc对应汇编代码int
3,而且这个值很大容易引起程序员的注意,检查未初始化的问题)
总的来说即 从 ebp-44H 的地方向高地址的内存赋值,每次为四个字节赋值,每个字节赋值为 CCH,重复 11h 次 ,
执行完毕后 44h 的空间都是 CCh
从栈的情况可以推断出 存放下一条指令地址的寄存器 eip 的地址和 buffer[2] 的地址是相同的
在监视窗口中查看函数 jmp 的地址:
然后将 buffer[2] 赋值为 0x00401020 即可。
-------------------------------------分割线-------------------------------------------
和
的效果是一样的,但是两个的地址值却不相同
在汇编代码中分别查看两个地址对应的代码:
可以看到 00401005 处的只是一条跳转语句,跳转到 真实的 地址 00401020 去
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
最最简单的第一次实验....
环境:VC 6.0
程序:
#include<stdio.h> #include<stdlib.h> void jmp() { printf("success!\n"); _exit(0); } int main() { int buffer[1]; buffer[2] = 0x00401020; //0x401020 //buffer[2] = (int)jmp; //0x401005 //printf("%x\n",buffer[2]); return 0; }
运行结果:
main 函数的反汇编结果:
10: int main() 11: { 0040D730 push ebp 0040D731 mov ebp,esp 0040D733 sub esp,44h 0040D736 push ebx 0040D737 push esi 0040D738 push edi 0040D739 lea edi,[ebp-44h] 0040D73C mov ecx,11h 0040D741 mov eax,0CCCCCCCCh 0040D746 rep stos dword ptr [edi] 12: int buffer[1]; 13: buffer[2] = 0x00401020; //0x401020 0040D748 mov dword ptr [ebp+4],offset jmp (00401020) 14: //buffer[2] = (int)jmp; //0x401005 15: //printf("%x\n",buffer[2]); 16: return 0; 0040D74F xor eax,eax 17: }
根据11 ~ 12行之间的指令可以推断出当前的栈是这样的:
其中一条指令
rep stos dword ptr [edi]
的意思是 : 重复执行 stos dword ptr [edi] 11h次 ,rep就是repeat
前面的 ecx 表示重复次数
0CCCCCCCCH 这个值表示未被初始化(初始化为0xcc, 使用这个值是因为0xcc对应汇编代码int
3,而且这个值很大容易引起程序员的注意,检查未初始化的问题)
总的来说即 从 ebp-44H 的地方向高地址的内存赋值,每次为四个字节赋值,每个字节赋值为 CCH,重复 11h 次 ,
执行完毕后 44h 的空间都是 CCh
从栈的情况可以推断出 存放下一条指令地址的寄存器 eip 的地址和 buffer[2] 的地址是相同的
在监视窗口中查看函数 jmp 的地址:
然后将 buffer[2] 赋值为 0x00401020 即可。
-------------------------------------分割线-------------------------------------------
buffer[2] = 0x00401020; //0x401020
和
buffer[2] = (int)jmp; //0x401005
的效果是一样的,但是两个的地址值却不相同
在汇编代码中分别查看两个地址对应的代码:
可以看到 00401005 处的只是一条跳转语句,跳转到 真实的 地址 00401020 去
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
相关文章推荐
- 缓冲区溢出代码实例总结
- 第一个缓冲区溢出的全过程实践
- 从零开始学Win32平台缓冲区溢出(Part1)
- 我的第一个缓冲区溢出
- Q版缓冲区溢出教程-第一章读书笔记
- Windows 2000缓冲区溢出入门(我所找到的最好的入门教程)
- [转自luoluo's blog]CCProxy远程缓冲区溢出分析
- 溢出专题……缓冲区溢出概念解析
- 缓冲区溢出笔记(2006年6月8日)
- C实现缓冲区溢出
- 缓冲区溢出攻防
- 绿盟于旸:让阿里安娜火箭爆炸的缓冲区溢出 linkboy语录:tk出品必是精品呵呵
- 关注程序安全-缓冲区溢出
- 缓冲区溢出笔记之---STACK溢出
- 缓冲区溢出笔记之---STACK溢出
- 开始学习缓冲区溢出
- 堆栈和缓冲区溢出
- 关于缓冲区溢出(Buffer Overflow)
- [转]缓冲区溢出详解
- Windows 缓冲区溢出与数据执行保护DEP