-
-
[原创]第二阶段第一题提交
-
发表于:
2007-8-29 05:22
6955
-
缓冲区溢出,这很久以前的东西了,回想了老半天才回想起来。
硬着头皮写说明的说,实在是想不出来该写啥。哎
1、通过分析代码,程序打开一个指定的文件,在符合条件的情况下,
进行读操作。而作者也有意的留了一个缓冲区溢出的位置。
2、代码处理首八字节,分析了几十行的处理代码后,还原出来一个值,
这个值也就是跳转指令。缓冲区从这里开始控制程序。
代码部分
从JMP跳下来后的处理代码
008E007E 83EC 04 sub esp,4
008E0081 8BEC mov ebp,esp //堆栈修复
008E0083 83C5 20 add ebp,20
008E0086 E8 00000000 call 008E008B
008E008B 58 pop eax
008E008C 8BC8 mov ecx,eax
008E008E 83E9 4B sub ecx,4B
008E0091 33D2 xor edx,edx
008E0093 52 push edx
008E0094 51 push ecx
008E0095 8BC8 mov ecx,eax
008E0097 83E9 3B sub ecx,3B
008E009A 51 push ecx
008E009B 52 push edx
008E009C FF15 4C024000 call dword ptr ds:[<&USER32.MessageBoxA>] ; USER32.MessageBoxA
008E00A2 59 pop ecx //配合原来的CALL做的堆栈修复
008E00A3 59 pop ecx
008E00A4 68 97034000 push 400397 //压入返回地址
008E00A9 C3 retn
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!