Autor
|
Tema: Proyecto Metamorph (Leído 86,094 veces)
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Supongo que a ordenar los datos te refieres a que aumente según el AlignOfFile? Bueno como lo estaba intentando con un exe en concreto, pues puse añadir 0x200 que es el AlignOfFile sinó cargaría mal las secciones. Mirando el exe con el LordPe los valores están perfectos, pero el exe no arranca . Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
yo me referia a que por ejemplo:
.text base 0x400
.data base 0x200
idata base 0x600
No se lo que podra ser.
Lo mirare con el EditorHex
saludos
|
|
|
En línea
|
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
yo me referia a que por ejemplo:
.text base 0x400
.data base 0x200
idata base 0x600
No se lo que podra ser.
Lo mirare con el EditorHex
saludos
Si cierto, eso se me pasó, tendré que arreglarlo comprobando el orden de las secciones, pero con el archivo que estaba probando el orden estaba normal, osea que hay otro error. SectionAlignment
El SectionAlignment está a 0x1000 pero las secciones del exe original ocupan 0x200 y yo añado otros 0x200 por lo que quedaría en 0x400. Sería otra cosa a arreglar pero que tampoco es el error en ésta caso. Saludos Edito: El exe modificado con el code queda así: No veo el fallo :S Saludos
|
|
« Última modificación: 8 Mayo 2009, 22:17 pm por Hacker_Zero »
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
|
|
« Última modificación: 8 Mayo 2009, 22:37 pm por Hacker_Zero »
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
a mi no me va ninguno, los dos son diferentes. pero no tienen modificada la tabla de secciones. esta modificada la cabecera PE.
Hay que cambiarle SizeOfRawData y PointerToRawData
Saludos
|
|
|
En línea
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Fallo mío, eso me pasa por tener el escritorio hecho un desastre de tanta prueba [Original][Modificado]Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Recuerda modificar también los Data Directories Simplemente era que habías movido la Import Table, pero no habías modificado su Virtual Address... Para solucionarlo solo has de recorrer todos los Data Directories, y si su V.A es distinta de 0 sumale el tamaño que agregas a la sección Versión Funcional Modificada: http://www.box.net/shared/ve6o4k2yea
Por lo visto no solo hace falta eso, el PE Explorer lo modifica casi todo 09.05.2009 00:26:11 : Saving new image file: Saving started... 09.05.2009 00:26:11 : Recalculating the Section Headers... 09.05.2009 00:26:11 : Section <.idata>: Old "VirtualAddress": 00404200h; New "VirtualAddress": 00404000h 09.05.2009 00:26:11 : Data Directory <Import Table>: Old "VirtualAddress": 00404200h; New "VirtualAddress": 00404000h 09.05.2009 00:26:11 : New Value of "SizeOfCode": 00000600h 09.05.2009 00:26:11 : Old "SizeOfImage": 00004256h; New "SizeOfImage": 00005000h; Change in "SizeOfImage": 00000DAAh 09.05.2009 00:26:22 : Updating "SizeOfImage"... New "SizeOfImage": 00005000h 09.05.2009 00:26:22 : Backup copy of the target file saved as: C:\DOCUMENTS AND SETTINGS\ADMINISTRADOR\ESCRITORIO\Copia de modMessageBox.exe.(1).bak 09.05.2009 00:26:22 : New image file saved as: C:\Documents and Settings\Administrador\Escritorio\Copia de modMessageBox.exe
|
|
« Última modificación: 9 Mayo 2009, 00:29 am por Karcrack »
|
En línea
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Dejando el source así con ese exe en concreto funciona: 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; //PIMAGE_DATA_DIRECTORY IDD; //PIMAGE_OPTIONAL_HEADER IOH; //IOH=&INTH->OptionalHeader ; //IDD=IOH->DataDirectory; //IDD++; //IDD->VirtualAddress=IDD->VirtualAddress+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; }
Pero no entiendo un carajo, porqué así funciona? se supone que así está mal . Osea el SizeOfImage original es 5000 entonces al aumentar 200 pos lo aumente 200, pero entonces peta (Creo que ya sé por que es ). El virtual addres de la sección que viene después igual . Y el puntero a la tabla de importaciones también, para que funcione hay que dejarlo como estaba, pero si lo moví 200 posiciones, que pasa? Lo único que se me ocurre es que funcione pero esté mal, que esos 0x200 que agregué no se carguen en memoria entonces las direcciones coinciden . Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
|
|