elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 07:54  


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderadores: Karcrack, [Zero])
| | |-+  Proyecto Metamorph
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 4 5 6 Ir Abajo Respuesta Imprimir
Autor Tema: Proyecto Metamorph  (Leído 35,077 veces)
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Proyecto Metamorph
« Respuesta #15 en: 2 Mayo 2009, 15:01 »

La verdad sería buena cualquier ayuda y más en C/C++ ya que soy el único que está programando en eso  :xD. Lo ideal sería agrandar la sección de código y nó la última, es más complicado pero así evitamos problemas (algunos antivirus saltan al ver 2 secciones de código  :¬¬). Ahora estoy viendo tambien que por ejemplo con delphi estará difícil, apenas hay huecos  :-(. Yo pensaba hacerlo para la 2.0 pero si hay ayuda las cosas se terminan antes  :).

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Arkangel_0x7C5

Desconectado Desconectado

Mensajes: 289



Ver Perfil
Re: Proyecto Metamorph
« Respuesta #16 en: 2 Mayo 2009, 18:10 »

solo abria que mover las demas secciones y colocar en la cabecera la nueva direccion de las secciones. Cuando termine lo que estoy haciendo, que no creo que me lleve mucho lo ago. Saludos

PD: a mi para estas cosas me gusta usar asm porque no hay que estar haciendo casting de tipos.
En línea

YST


Desconectado Desconectado

Mensajes: 963


I'm you


Ver Perfil WWW
Re: Proyecto Metamorph
« Respuesta #17 en: 2 Mayo 2009, 22:27 »

Muy buen proyecto ;) .

Como decia arkangel seria cosa de modificar el PE solamente para poner el espacio que necesites.

Saludos.
En línea



Yo le enseñe a Kayser a usar objetos en ASM
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Proyecto Metamorph
« Respuesta #18 en: 8 Mayo 2009, 21:32 »

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:

Código
	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;
 
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Arkangel_0x7C5

Desconectado Desconectado

Mensajes: 289



Ver Perfil
Re: Proyecto Metamorph
« Respuesta #19 en: 8 Mayo 2009, 21:52 »

una pregunta, ordenas los datos de las secciones. Esque el orden en el que estan en la cabecera no tiene porque ser el mismo que en el exe.


saludos
PD:Yo estabas haciendo ese code ahora en asm. ya casi esta. Lo pongo en un rato
En línea

[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Proyecto Metamorph
« Respuesta #20 en: 8 Mayo 2009, 21:54 »

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 Desconectado

Mensajes: 289



Ver Perfil
Re: Proyecto Metamorph
« Respuesta #21 en: 8 Mayo 2009, 22:04 »

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

YST


Desconectado Desconectado

Mensajes: 963


I'm you


Ver Perfil WWW
Re: Proyecto Metamorph
« Respuesta #22 en: 8 Mayo 2009, 22:06 »

SectionAlignment
En línea



Yo le enseñe a Kayser a usar objetos en ASM
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Proyecto Metamorph
« Respuesta #23 en: 8 Mayo 2009, 22:10 »

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 por Hacker_Zero » En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
YST


Desconectado Desconectado

Mensajes: 963


I'm you


Ver Perfil WWW
Re: Proyecto Metamorph
« Respuesta #24 en: 8 Mayo 2009, 22:16 »

Conectate a msn y pasame un ejecutable que este pasado por el source o postealo acá que no tengo compilador acá ;(
En línea



Yo le enseñe a Kayser a usar objetos en ASM
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Proyecto Metamorph
« Respuesta #25 en: 8 Mayo 2009, 22:21 »

[Original]
[Modificado]

Saludos
« Última modificación: 8 Mayo 2009, 22:37 por Hacker_Zero » En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Arkangel_0x7C5

Desconectado Desconectado

Mensajes: 289



Ver Perfil
Re: Proyecto Metamorph
« Respuesta #26 en: 8 Mayo 2009, 22:32 »

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]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Proyecto Metamorph
« Respuesta #27 en: 8 Mayo 2009, 22:37 »

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
Moderador
***
Desconectado Desconectado

Mensajes: 2.132


Se siente observado ¬¬'


Ver Perfil
Re: Proyecto Metamorph
« Respuesta #28 en: 8 Mayo 2009, 23:46 »

Recuerda modificar también los Data Directories :rolleyes:

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:
Código:
http://www.box.net/shared/ve6o4k2yea



Por lo visto no solo hace falta eso, el PE Explorer lo modifica casi todo :huh:
Código:
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 por Karcrack » En línea

[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Proyecto Metamorph
« Respuesta #29 en: 9 Mayo 2009, 00:55 »

Dejando el source así con ese exe en concreto funciona:

Código
	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  :P. Osea el SizeOfImage original es 5000 entonces al aumentar 200 pos lo aumente 200, pero entonces peta (Creo que ya sé por que es  :xD). El virtual addres de la sección que viene después igual  :o. 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  :huh:.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Páginas: 1 [2] 3 4 5 6 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Proyecto php « 1 2 ... 7 8 »
Sugerencias y dudas sobre el Foro
Rey11 111 5,954 Último mensaje 18 Septiembre 2005, 12:27
por Rey11
[#] Actualizado: Cactus Metamorph 0.2.1 (13/01/08) « 1 2 ... 6 7 »
Análisis y Diseño de Malware
||MadAntrax|| 97 50,359 Último mensaje 12 Mayo 2009, 09:20
por ||MadAntrax||
duda con Cactus metamorph
Programación Visual Basic
[SMT] 5 849 Último mensaje 24 Junio 2008, 22:34
por Xerok1!
[+] Cactus Metamorph 0.3 [versión final] by MadAntrax « 1 2 »
Análisis y Diseño de Malware
||MadAntrax|| 26 17,390 Último mensaje 21 Julio 2009, 22:49
por Karcrack
Recluto traductores, para un proyecto o futuro proyecto.. Japones a español
Foro Libre
tomeu00 4 908 Último mensaje 5 Febrero 2010, 11:58
por YaTaMaS
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines