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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  [AYUDA] formato PE obtener dirección fisica de secciones y mas cosas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [AYUDA] formato PE obtener dirección fisica de secciones y mas cosas  (Leído 5,088 veces)
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
[AYUDA] formato PE obtener dirección fisica de secciones y mas cosas
« en: 2 Septiembre 2011, 13:38 pm »

Buenas, bueno al fin he decidido meterme de lleno a aprender el formato PE y tenia pensado agrandar  la sección de código par aintroducir un pequeño opcode con un msgbox y tal una chorradilla pero para ensayar no me parece mal  >:D.
El problema viene cuando no puedo detectar el ISH bien de todas las secciones, solo lo detecta bien de la primera, el código que he creado es este:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. int main()
  6. {
  7. IMAGE_DOS_HEADER idh;
  8. IMAGE_FILE_HEADER ifh;
  9. IMAGE_OPTIONAL_HEADER ioh;
  10. IMAGE_SECTION_HEADER ish;
  11.  
  12. char ruta[] = "C:\\MS-DOC.exe";
  13.  
  14. FILE * archivo = fopen(ruta,"r+b");
  15. if (archivo == NULL)
  16. { // si no podemos abrri el archivo.
  17. printf("Error al abrir el archivo\n");
  18. system("PAUSE");
  19.  
  20. return 1;
  21. }
  22.  
  23. fread(&idh,0x40,1,archivo); // rellenamos IMAGE_DOS_HEADER
  24. if (idh.e_magic != IMAGE_DOS_SIGNATURE)
  25. { // comprovamos el e_magic para saber si es un EXE
  26. printf("No es un archivo EXE\n");
  27. system("PAUSE");
  28.  
  29. return 1;
  30. }
  31.  
  32. fseek(archivo,idh.e_lfanew + 4,SEEK_SET);
  33. fread(&ifh,0x14,1,archivo); // rellenamos IMAGE_FILE_HEADER
  34. fseek(archivo, idh.e_lfanew + 4 + sizeof(ifh), SEEK_SET);
  35. fread(&ioh,ifh.SizeOfOptionalHeader,1,archivo); // Leemos IMAGE_OPTIONAL_HEADER
  36.  
  37. int suma = 0;
  38.  
  39. for (int i=0;i<ifh.NumberOfSections;i++)
  40. {
  41. fseek(archivo, idh.e_lfanew + 4 + sizeof(ifh) + ifh.SizeOfOptionalHeader + (sizeof(ish)*(ifh.NumberOfSections-1)) + suma ,SEEK_SET);
  42. fread(&ish, sizeof(ish),1,archivo); // rellenamos IMAGE_SECTION_HEADER
  43.  
  44. printf("%x\n",(&ish)[i].Misc.PhysicalAddress);
  45.  
  46. suma += 0x28; // sumo 0x28 que es lo que ocupa ish para pasar a los datos de la siguiente sección.
  47. }
  48.  
  49. fclose(archivo);
  50.  
  51. system("PAUSE");
  52.  
  53. return 0;
  54. }

Nose que andará mal por ahi si me peuden hechar una mano sería de gran ayuda >:(

un saludo.
« Última modificación: 2 Septiembre 2011, 13:40 pm por Drinky94 » En línea

Un byte a la izquierda.
The Swash

Desconectado Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
Re: [AYUDA] formato PE obtener dirección fisica de secciones y mas cosas
« Respuesta #1 en: 4 Septiembre 2011, 04:01 am »

  • Usas una estructura ISH y el tamaño que tiene por defecto es: 0x28 bytes como vas guardar más de una sección ahí?, no tienes un array.
  • Te recomiendo trabajar con archivo proyectado en memoria y para las estructuras punteros.
  • + (sizeof(ish)*(ifh.NumberOfSections-1)) + suma; + suma está sobrando ya lo haces con la multiplicación.

Un saludo ;)
« Última modificación: 4 Septiembre 2011, 04:07 am por The Swash » En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: [AYUDA] formato PE obtener dirección fisica de secciones y mas cosas
« Respuesta #2 en: 4 Septiembre 2011, 16:31 pm »

yo opino como The swash.

ademas, el fseek y suma sobra ya que fread avanza lo el numero de bytes que lee. 2 llamadas consecutivas de fread no leeran los mismos datos.

Saludos
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [AYUDA] formato PE obtener dirección fisica de secciones y mas cosas
« Respuesta #3 en: 5 Septiembre 2011, 02:34 am »

Me gustaria ver un diagrama del formato PE... se que son estructuras pero lo grafico se analiza mas facil mente xP, quizas tambien te sirva graficarlo Drinky94

P.D.: solo he dicho un Consejo/Opinion ¬¬"

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: [AYUDA] formato PE obtener dirección fisica de secciones y mas cosas
« Respuesta #4 en: 5 Septiembre 2011, 13:21 pm »

Ya lo e conseguido, muchas gracias a todos...
El código arreglado es el siguiente:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. int main()
  6. {
  7. IMAGE_DOS_HEADER idh;
  8. IMAGE_FILE_HEADER ifh;
  9. IMAGE_OPTIONAL_HEADER ioh;
  10. IMAGE_SECTION_HEADER ish;
  11.  
  12. char ruta[] = "C:\\MS-DOC.exe";
  13.  
  14. FILE * archivo = fopen(ruta,"r+b");
  15. if (archivo == NULL)
  16. { // si no podemos abrri el archivo.
  17. printf("Error al abrir el archivo\n");
  18. system("PAUSE");
  19.  
  20. return 1;
  21. }
  22.  
  23. fread(&idh,0x40,1,archivo); // rellenamos IMAGE_DOS_HEADER
  24. if (idh.e_magic != IMAGE_DOS_SIGNATURE)
  25. { // comprovamos el e_magic para saber si es un EXE
  26. printf("No es un archivo EXE\n");
  27. system("PAUSE");
  28.  
  29. return 1;
  30. }
  31.  
  32. fseek(archivo,idh.e_lfanew + 4,SEEK_SET);
  33. fread(&ifh,0x14,1,archivo); // rellenamos IMAGE_FILE_HEADER
  34. fseek(archivo, idh.e_lfanew + 4 + sizeof(ifh), SEEK_SET);
  35. fread(&ioh,ifh.SizeOfOptionalHeader,1,archivo); // Leemos IMAGE_OPTIONAL_HEADER
  36.  
  37. for (int i=0;i<ifh.NumberOfSections;i++)
  38. {
  39. fread(&ish, sizeof(ish),1,archivo);
  40. printf("%x\n",ish.Misc.PhysicalAddress);
  41. }
  42.  
  43. fclose(archivo);
  44.  
  45. system("PAUSE");
  46.  
  47. return 0;
  48. }

saludos.
En línea

Un byte a la izquierda.
Queta

Desconectado Desconectado

Mensajes: 267



Ver Perfil
Re: [AYUDA] formato PE obtener dirección fisica de secciones y mas cosas
« Respuesta #5 en: 5 Septiembre 2011, 13:40 pm »

Puedes programar la entrada y salida de ficheros, y básicamente todo el código, con las funciones de la API, así te ahorras la C Runtime Library y reduces el peso del ejecutable.
En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: [AYUDA] formato PE obtener dirección fisica de secciones y mas cosas
« Respuesta #6 en: 5 Septiembre 2011, 16:21 pm »

Puedes programar la entrada y salida de ficheros, y básicamente todo el código, con las funciones de la API, así te ahorras la C Runtime Library y reduces el peso del ejecutable.

Cierto pero bueno yo ya lo hice asi ;)
En línea

Un byte a la izquierda.
The Swash

Desconectado Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
Re: [AYUDA] formato PE obtener dirección fisica de secciones y mas cosas
« Respuesta #7 en: 5 Septiembre 2011, 18:33 pm »

http://www.sendspace.com/file/eiwwul

Ahí les dejo un código en C con todas las estructuras hechas a mano y la lectura de cada campo ;).

Un saludo.
The Swash
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Se puede saber la direccion fisica de NW
Programación Visual Basic
juanjoxx 3 2,086 Último mensaje 1 Abril 2007, 20:12 pm
por juanjoxx
Direccion fisica del kernel
ASM
xv0 0 2,209 Último mensaje 15 Agosto 2014, 20:38 pm
por xv0
[Ayuda] Secciones web desplegables y contraibles - Acordeon Vertical
Desarrollo Web
Graphixx 3 3,094 Último mensaje 30 Agosto 2014, 17:49 pm
por Graphixx
Kerberos y el filtrado/autenticación por dirección física (MAC)
Seguridad
guiu 1 2,188 Último mensaje 21 Febrero 2015, 17:02 pm
por DavEmmanuel
[Ayuda] Obtener direccion MAC desde script PHP
PHP
danny920825 9 6,686 Último mensaje 24 Febrero 2017, 00:48 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines