elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema al modificar sección .text
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Problema al modificar sección .text  (Leído 9,301 veces)
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Problema al modificar sección .text
« Respuesta #10 en: 16 Octubre 2014, 23:48 pm »

Bueno.. como no funciona y ya no entiendo que pasa, hice un codigo ejemplo..

Alguien se anima a probar este codigo?

Código
  1. int Crypt(char *filename, char *section)
  2. {
  3. LPBYTE Start;
  4.  
  5. HANDLE hFile = CreateFile(filename, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  6. if (hFile == INVALID_HANDLE_VALUE)
  7. return -1;
  8. HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
  9. if (hFileMapping == 0){
  10. CloseHandle(hFile);
  11. return -1;
  12. }
  13. LPBYTE lpFileMap = (LPBYTE)MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  14. if (lpFileMap == 0){
  15. CloseHandle(hFileMapping);
  16. CloseHandle(hFile);
  17. return -1;
  18. }
  19.  
  20. PIMAGE_DOS_HEADER IDH = (PIMAGE_DOS_HEADER) lpFileMap;
  21. PIMAGE_NT_HEADERS INH = (PIMAGE_NT_HEADERS)((BYTE *)IDH + IDH->e_lfanew);
  22. PIMAGE_OPTIONAL_HEADER IOH = (PIMAGE_OPTIONAL_HEADER)&INH->OptionalHeader;
  23. PIMAGE_SECTION_HEADER ISH;
  24.  
  25. for (byte i = 0; i < INH->FileHeader.NumberOfSections; i++)
  26. {
  27.  
  28. ISH = (PIMAGE_SECTION_HEADER)(lpFileMap + IDH->e_lfanew + sizeof(IMAGE_NT_HEADERS)+ sizeof(IMAGE_SECTION_HEADER)*i);
  29.  
  30. Start = lpFileMap + ISH->PointerToRawData;
  31. if (strcmp((char *)ISH->Name, section) == 0)
  32. {
  33. for(DWORD i=0; i<ISH->Misc.VirtualSize; i++)
  34. Start[i] ^= 'a';
  35. }
  36. }
  37.  
  38. UnmapViewOfFile((LPCVOID)lpFileMap);
  39. CloseHandle(hFileMapping);
  40. CloseHandle(hFile);
  41.  
  42. return 0;
  43. }

El problema que tengo yo con esto es que al cifrar el programa Netcat, le cambia el EntryPoint a 4057F2 cuando debería ser otro..

Esta claro, pero por las dudas...
Código
  1. Crypt("nc.exe", ".text");

Gracias! Saludos!


« Última modificación: 16 Octubre 2014, 23:52 pm por Vaagish » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema al modificar sección .text
« Respuesta #11 en: 17 Octubre 2014, 00:04 am »

Mmm al parecer te estas pasando de rango ... ¿Donde se supone que estas cambiando el entry point en ese codigo exactamente? ¿O es un efecto no deseado?

Tendrias que usar SizeOfRawData.


« Última modificación: 17 Octubre 2014, 00:27 am por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Problema al modificar sección .text
« Respuesta #12 en: 17 Octubre 2014, 00:26 am »

Citar
¿Donde se supone que estas cambiando el entry point en ese codigo exactamente? ¿O es un efecto no deseado?

Es un defecto no deseado  :xD
Así como esta no le cambio el EP, se cambia solo..  :rolleyes:

Citar
¿No sera que Start deberia usar VirtualAddress en realidad?:
Start = lpFileMap + ISH->PointerToRawData;

Ya probé hasta con la dirección psíquica!

Citar
Mmm al parecer te estas pasando de rango

Ya no tengo ni idea que puede ser.. hace rato que estoy con esto, y me estoy por decantar a que es "problema" del netcat..   :¬¬

Saludos! Gracias!
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema al modificar sección .text
« Respuesta #13 en: 17 Octubre 2014, 00:29 am »

No, Start estaba bien (no lo estas mappeando con SEC_IMAGE), pero entonces deberias usar SizeOfRawData. No tengo ese ejecutable a mano, pero con unos simples printfs podrias ver a que equivale lpFileMap, Start e IOH que es lo que estas tocando sin querer.
« Última modificación: 17 Octubre 2014, 00:31 am por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Problema al modificar sección .text
« Respuesta #14 en: 17 Octubre 2014, 00:43 am »

Citar
entonces deberias usar SizeOfRawData

Oky, cambiado..

Citar
No tengo ese ejecutable a mano, pero con unos simples printfs podrias ver a que equivale lpFileMap, Start e IOH que es lo que estas tocando sin querer.

Ya imprimí, use dumpbin, windgb, olly, la mar en coche, etc, etc  :xD

Ya creo que es con nc, voy a probar con otros ejecutables grandes.. a ver que pasa..

Salu2!
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema al modificar sección .text
« Respuesta #15 en: 17 Octubre 2014, 00:47 am »

Ya imprimí, use dumpbin, windgb, olly, la mar en coche, etc, etc  :xD

¿Y que te dio? Start deberia ser muy cercano a IOH para que se produzca el problema ... o es otra parte del programa de la cual no tenemos el codigo. ¿Probaste a aislar esto solo y ya genera el problema?
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Problema al modificar sección .text
« Respuesta #16 en: 17 Octubre 2014, 00:59 am »

Mira:

Valores de Start

Citar
900098 -> IOH

900400 -> .text
905800 -> .data
905A00 -> .rdata
900000 -> .bss
906C00 -> .idata
907800 -> .CRT
907A00 -> .tls

Si comento esto:
Código
  1. for(DWORD i=0; i<ISH->SizeOfRawData; i++)
  2. Start[i] ^= 'a';

El EP no cambia,, pero claro.. tampoco se cifra   :silbar:

Ahora que veo bien... porque va a estar IOH en ese lugar ???? No esta mal eso?

Salu2
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema al modificar sección .text
« Respuesta #17 en: 17 Octubre 2014, 01:09 am »

Si tu Start arranca en 0x900400 no veo como puede escribir en 0x9000A8 ... ¿El nc.exe es el mismo que esta aca? http://eternallybored.org/misc/netcat/ Con ese no me pasa lo que decis ... ¿Tu programa es de 32 o 64 bits? ¿Estas viendo el EP con DUMPBIN, no?
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Problema al modificar sección .text
« Respuesta #18 en: 17 Octubre 2014, 03:37 am »

Yo tampoco.. voy a bajar ese nc a ver si es por eso.. tengo una version de nc con su codigo, pero jamas pense que fuera eso.. va.. ya dudaba de todo en realidad..

Es de 32 bits (nc y crypter)

Mañana actualizo..

Saludos!
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.470


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Problema al modificar sección .text
« Respuesta #19 en: 17 Octubre 2014, 06:57 am »

Bueno, no programo en C++ (sólo lo sé leer) pero si sé algo sobre este tema.

Agrandar una sección (y más aún, la sección de código) es un dolor de cabeza bastante grande. Quizás, si el código del cripter es pequeño, podrías encontrar algún code-cave en la sección e insertarlo ahí. Pero esto no siempre es posible.

Lo que normalmente se hace es agregar una nueva sección ejecutable al EXE y desde ahi puedes reconstruir el ejecutable tal cual estaba.

Si quieres un ejemplo, puedes revisar lo que hace el packer UPX.

De ahí seguro sacarás ideas interesantes...

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines