嗨,大家晚上
我正在冒险进入安全,但我需要了解一些事情,缓冲区溢出等现在我想知道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工作室调用它?我对此非常陌生,我希望它仅用于教育目的。