I'm working on different PE Injection technique. I want inject PE file into virtual memory of current executable. After that, I want execute injected PE file, I wrote inject code but my method is not working. Dos header and NT header parse correct, I write correctly sections and create new thread on the entrypoint of the .text section, but thread not working. What is the problem here?
#include <iostream>
#include <windows.h>
int main()
{
DWORD* ImageBase;
void* pImageBase;
IMAGE_NT_HEADERS* NTHeader;
IMAGE_DOS_HEADER* DOSHeader;
IMAGE_NT_HEADERS* mem_NTHeader;
IMAGE_DOS_HEADER* mem_DOSHeader;
IMAGE_SECTION_HEADER* SecHeader;
unsigned char memory_pe[] = { 0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, ........} // This is binary of PE file.
DOSHeader = PIMAGE_DOS_HEADER(memory_pe);
NTHeader = PIMAGE_NT_HEADERS(DWORD(memory_pe) + DOSHeader->e_lfanew);
pImageBase = VirtualAlloc(NULL, NTHeader->OptionalHeader.SizeOfImage, 0x3000, PAGE_EXECUTE_READWRITE);
memcpy(pImageBase, memory_pe, NTHeader->OptionalHeader.SizeOfHeaders);
for (int i = 0; i < NTHeader->FileHeader.NumberOfSections; i++) {
SecHeader = (PIMAGE_SECTION_HEADER)(DWORD(memory_pe) + DOSHeader->e_lfanew + 248 + (i * 40));
memcpy(LPVOID(DWORD(pImageBase) + SecHeader->VirtualAddress), LPVOID(DWORD(memory_pe) + SecHeader->PointerToRawData), SecHeader->SizeOfRawData);
}
mem_DOSHeader = PIMAGE_DOS_HEADER(pImageBase);
mem_NTHeader = PIMAGE_NT_HEADERS(DWORD(pImageBase) + mem_DOSHeader->e_lfanew);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(DWORD(pImageBase) + mem_NTHeader->OptionalHeader.BaseOfCode), NULL, 0, NULL);
return 0;
}