int main() { unsigned char shellcode[] = { 0x55, 0x8B, 0xEC, 0x6A, 0x00, 0x6A, 0x00, 0x68, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0x00, 0xFF, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x33, 0xC0, 0x5D, 0xC2, 0x08, 0x00, // [Addr of string ] [Ptr of MessageBoxA ] 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x43, 0x6F, 0x64, 0x65, 0x21, 0x00, 0xFF, 0xFF, 0xFF, 0xFF //"Native Code!" NULL [Reserved ptr ] }; const int len = sizeof(shellcode); char* mem = (char*)VirtualAlloc(NULL, 4096, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); memcpy(mem, shellcode, len); const int data_off = 26; const int str_off = data_off; const int ptr_off = data_off + 13; //Fill in 0xFFs EnumWindows((WNDENUMPROC)mem, 0); VirtualFree(mem, 0, MEM_RELEASE); }