Bueno, me surgío un problema, en lo de alargar la sección de código, no veo que es lo que falla, los valores del pe se cambian bien, copio lo que hay despues para adelante y relleno de 0's la parte que alargué, no se si falla porque se me pasó cambiar algún valor o por que existe algún valor estático fuera del pe
. Dejo el código que tengo para agrandar la sección de código, a ver si alguien ve donde puede estar el fallo:
HANDLE hFile=CreateFile(nFileName,GENERIC_READ+GENERIC_WRITE,FILE_SHARE_WRITE+FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
if(hFile == INVALID_HANDLE_VALUE)
{
return NULL;
}
DWORD szFile=GetFileSize(hFile,0);
if(szFile == INVALID_FILE_SIZE)
{
return NULL;
}
szFile=szFile+0x200;
HANDLE hCFM=CreateFileMapping(hFile,0,PAGE_READWRITE,0,szFile,0);
if(hCFM==NULL)
{
return NULL;
}
CloseHandle(hFile);
LPSTR hMVOF
=(LPSTR
)malloc(szFile
); hMVOF=(LPSTR)MapViewOfFile(hCFM,FILE_MAP_ALL_ACCESS,0,0,0);
if(hMVOF==NULL)
{
return NULL;
}
CloseHandle(hCFM);
PIMAGE_DOS_HEADER IDH;
PIMAGE_NT_HEADERS INTH;
PIMAGE_SECTION_HEADER ISH;
IDH=(PIMAGE_DOS_HEADER)&hMVOF[0];
INTH=(PIMAGE_NT_HEADERS)&hMVOF[IDH->e_lfanew];
DWORD ExecutableSection=GetExecutableSection(hMVOF);
ISH=(PIMAGE_SECTION_HEADER)&hMVOF[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*ExecutableSection];
LPSTR Temp
=(LPSTR
)malloc(szFile
-(ISH
->PointerToRawData
+ISH
->SizeOfRawData
+0x200)); CopyMemory(&Temp[0],&hMVOF[ISH->PointerToRawData+ISH->SizeOfRawData],szFile-(ISH->PointerToRawData+ISH->SizeOfRawData+0x200));
CopyMemory(&hMVOF[ISH->PointerToRawData+ISH->SizeOfRawData+0x200],&Temp[0],szFile-(ISH->PointerToRawData+ISH->SizeOfRawData+0x200));
BYTE zero=0x00;
for(DWORD i=0;i<0x200;i++)
{
CopyMemory(&hMVOF[ISH->PointerToRawData+ISH->SizeOfRawData+i],&zero,1);
}
ISH->SizeOfRawData=ISH->SizeOfRawData+0x200;
ISH->Misc.VirtualSize=ISH->Misc.VirtualSize+0x200;
INTH->OptionalHeader.SizeOfImage=INTH->OptionalHeader.SizeOfImage+0x200;
for(i=0;i<=INTH->FileHeader.NumberOfSections;i++)
{
ExecutableSection=GetExecutableSection(hMVOF);
ISH=(PIMAGE_SECTION_HEADER)&hMVOF[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*(ExecutableSection+1+i)];
ISH->PointerToRawData=ISH->PointerToRawData+0x200;
ISH->VirtualAddress=ISH->VirtualAddress+0x200;
}
return hMVOF;