基础知识中的Shellcoding问题

时间:2016-03-28 17:29:19

标签: c security shellcode

嗨,大家晚上

我正在冒险进入安全,但我需要了解一些事情,缓冲区溢出等现在我想知道Shellcoding

所以我准备好了我的CFF资源管理器,准备好了我的C Ide(Visual Studio),我的大脑也准备好了

现在我用C

编写了这样的代码
#include <stdio.h>
#include <Windows.h>

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR lpCmdLine, INT nCmdShow)
{
    MessageBoxA(NULL, "Hi am a C MessageBox","",MB_OK);

    return 0;
}

只是为了显示一个MessageBox,现在已编译,它给了我可执行文件。

现在是什么,我使用CFF资源管理器获取字节数组,并且我有这么多代码

unsigned char shell[25741] = {"\xeb\x2a\x5e\x89\x76\x08\xc6\x46\x07\x00\xc7\x46\x0c\x00\x00\x00"
"\x00\xb8\x0b\x00\x00\x00\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80"
"\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xe8\xd1\xff\xff"
"\xff\x2f\x62\x69\x6e\x2f\x73\x68\x00\x89\xec\x5d\xc3...."}

现在这不是主要问题,然后尝试将其称为

#include <stdio.h>
#include <Windows.h>

unsigned char shell[25741] = {"\xeb\x2a\x5e\x89\x76\x08\xc6\x46\x07\x00\xc7\x46\x0c\x00\x00\x00"
"\x00\xb8\x0b\x00\x00\x00\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80"
"\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xe8\xd1\xff\xff"
"\xff\x2f\x62\x69\x6e\x2f\x73\x68\x00\x89\xec\x5d\xc3....."}

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR lpCmdLine, INT nCmdShow)
{
    LPVOID shellcode  = VirtualAlloc(NULL, 25741, MEM_COMMIT, PAGE_EXECUTE_READWRITE); // allocate memory for shellcode 
    memcpy(shellcode , shell, 25741); // copy bytes of shell to shellcode 

    //execute asm to call shellcode 
    _asm
    {
    mov eax, shellcode
    call eax
    }

    return 0;
}

要诚实,这部分我不确定(太确定了)并且它从我的Visual Studio中触发错误,我开始进行研究,我发现即使是C程序也编写shellcode,但是我变得非常困惑,因为我不明白为什么它行为不端,这可能是错的我如何从我的Visual工作室调用它?我对此非常陌生,我希望它仅用于教育目的。

0 个答案:

没有答案