Autor
|
Tema: Proyecto Metamorph (Leído 85,922 veces)
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Finalizado Creador BD (Delphi) El programa cuanta con una base de datos en la que están instrucciones en en asm más o menos equivalentes pasadas a opcodes, para evitar estar compilando todo el rato programé algo en delphi, consta de 2 edit's, en uno meto la instruccion en assembly y en el otro la equivalente y me guarda en un fichero los opcodes, así me ahorro tiempo y errores humanos. Lo del metodo xor y meepa, pues permite modificar cualquier byte del archivo sin romperlo, cuando postee el source o incluso la beta lo vereis mejor. Ahora se me presentó un problema, para aplicar el metodo xor y meepa, necesitaba cambiar el entry point del programa hacia mi código, vale, programé una función en c que lo hace, pero al hacerlo, saltan como 4/5 antivirus, sólo cambiando el entry point de un exe en vb. Entonces se me ocurrió dejar el entry point como estaba y modificar los bytes a donde apunta éste por un salto a donde quiero que redireccione y ahí se restauran esos bytes y retorna, pero cual mi sorpresa al ver que no he arreglado nada, los av siguen detectándomelo, a ver si a alguien se le ocurre algo para solucionar eso, sinó cambiaré el entry point y esos 4/5 av saltarán con cualquier ejecutable en vb que se pase por ésta tool . Edito: Solucionado gracias al gran Shaddy . Saludos
|
|
« Última modificación: 29 Abril 2009, 20:48 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]
|
Bueno, si el anterior fue un gran progreso éste es realmente sorprendente . RedirectCalls terminado para ejecutables programados en C/C++ y ASM. Aún no funciona con exes en VB ni Delphi porque éstos llaman a las apis de una forma rara diferente, pero también funcionará con éstos. Qué hace ésta función? pues mueve todas las llamadas a las apis a los huecos del exe y en su lugar pone saltos hacia esos calls, aquí una captura del olly con el stub del SecureShade programado por Kizar en C: ¿Vale, y que consigues con eso? Pues como muchos sabrán, muchos antivirus ponen firmas en éstos sitios porque son "difíciles" de modificar, sirve para ésto: EL ANTES File InfoReport generated: 2.5.2009 at 12.45.43 (GMT 1) File size: 4 KB MD5 Hash: 597E73FB20D376A13CF61800F815C126 SHA1 Hash: 5D36A65B697D5E94474D8AACD2A2E05DD11CB81F Self-Extract Archive: Nothing found Binder Detector: Nothing found Detection rate: 16 on 24 Detectionsa-squared - BehavesLike.Win32.ProcessHijack!IKAvira AntiVir - TR/Drop.Small.NDH.42Avast - Win32:Poison-IX [trj] AVG - Dropper.Generic.ACNF BitDefender - Trojan.Dropper.Small.NDH ClamAV - Nothing found! Comodo - Backdoor.Win32.Poison.~ZU Dr.Web - BackDoor.Bifrost.740Ewido - Backdoor.SdBot.hnn F-PROT 6 - W32/Backdoor2.COYS G DATA - Win32:Poison-IX [trj] B IkarusT3 - BehavesLike.Win32.ProcessHijack Kaspersky - Nothing found!McAfee - Nothing found! MHR (Malware Hash Registry) - Virus Found - detect rate 11%NOD32 v3 - Win32/IRCBot.AJR Norman - Nothing found! Panda - Nothing found!Quick Heal - Trojan.Agent.ATVSolo Antivirus - Nothing found!Sophos - Sus/Behav-168 TrendMicro - Nothing found!VBA32 - Win32.IRCBot.AJR Virus Buster - Nothing found!Scan report generated by NoVirusThanks.org Y EL DESPUÉS File InfoReport generated: 2.5.2009 at 12.49.45 (GMT 1) File size: 4 KB MD5 Hash: 302CC836D99E9309F57D8CC12084A17E SHA1 Hash: 5113DDDBF338830760E8A434AFAFBE813A2F7EE9 Self-Extract Archive: Nothing found Binder Detector: Nothing found Detection rate: 5 on 24 Detectionsa-squared - Heuristic.LOPAvira AntiVir - Nothing found!Avast - Win32:Poison-IX [trj] AVG - Nothing found!BitDefender - Nothing found! ClamAV - Nothing found! Comodo - Nothing found! Dr.Web - Nothing found!Ewido - Nothing found! F-PROT 6 - Nothing found! G DATA - Win32:Poison-IX [trj] B IkarusT3 - Nothing found! Kaspersky - Nothing found!McAfee - virus or variant W32/NGVCK.d MHR (Malware Hash Registry) - Nothing found!NOD32 v3 - Nothing found! Norman - Nothing found! Panda - Nothing found!Quick Heal - Nothing found!Solo Antivirus - Nothing found!Sophos - Sus/Behav-168 TrendMicro - Nothing found!VBA32 - Nothing found! Virus Buster - Nothing found!Scan report generated by NoVirusThanks.org De esos, a-squared me lo detecta por el cambio del entry point, mcafee se añade con un falso positivo los otros porque tienen otra firma. Espero comentarios a ver que les parece . Ahora estoy trabajando para adaptarlo también a exes en VB y Delphi. Saludos
|
|
« Última modificación: 2 Mayo 2009, 13:13 pm por Hacker_Zero »
|
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 ¬¬'
|
Me encanta Es una gran innovacion no tenerlo que hacerlo a mano.. ya que suele ser una tarea ardua... El problema es si no hay espacios vacios (muy raro) pero bueno, para eso esta el Topo (o incluso podeis agregar un pequeño tool para eso ) Saludos
|
|
|
En línea
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Si, ésa es la limitación que tiene y que tendrá hasta la versión 1.0 final ya que tedría que reprogramar gran parte de lo que tengo, habrá que esperar a la 2.0 para añadir espacio libre a los ejecutables o en su defecto para los impacientes, agregarla a mano o con topo . Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
Si, ésa es la limitación que tiene y que tendrá hasta la versión 1.0 final ya que tedría que reprogramar gran parte de lo que tengo, habrá que esperar a la 2.0 para añadir espacio libre a los ejecutables o en su defecto para los impacientes, agregarla a mano o con topo . Saludos No seria difícil si lo haces al final de una sección. Puedo ayudarte en eso si quieres Saludos
|
|
|
En línea
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
La verdad sería buena cualquier ayuda y más en C/C++ ya que soy el único que está programando en eso . 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
Mensajes: 361
|
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
Mensajes: 965
I'm you
|
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]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
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;
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
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
|
|
|
|
|
|