elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
21 Mayo 2012, 12:17  


Tema destacado: Entra al canal IRC oficial de #elhacker.net

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderadores: Karcrack, [Zero])
| | |-+  [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 1,282 veces)
mDrinky

Desconectado Desconectado

Mensajes: 274


Miauuuuuuuuuuuuu dice el gato XD


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

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
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
int main()
{
IMAGE_DOS_HEADER idh;
IMAGE_FILE_HEADER ifh;
IMAGE_OPTIONAL_HEADER ioh;
IMAGE_SECTION_HEADER ish;
 
char ruta[] = "C:\\MS-DOC.exe";
 
FILE * archivo = fopen(ruta,"r+b");
if (archivo == NULL)
{ // si no podemos abrri el archivo.
printf("Error al abrir el archivo\n");
system("PAUSE");
 
return 1;
}
 
fread(&idh,0x40,1,archivo); // rellenamos IMAGE_DOS_HEADER
if (idh.e_magic != IMAGE_DOS_SIGNATURE)
{ // comprovamos el e_magic para saber si es un EXE
printf("No es un archivo EXE\n");
system("PAUSE");
 
return 1;
}
 
fseek(archivo,idh.e_lfanew + 4,SEEK_SET);
fread(&ifh,0x14,1,archivo); // rellenamos IMAGE_FILE_HEADER
fseek(archivo, idh.e_lfanew + 4 + sizeof(ifh), SEEK_SET);
fread(&ioh,ifh.SizeOfOptionalHeader,1,archivo); // Leemos IMAGE_OPTIONAL_HEADER
 
int suma = 0;
 
for (int i=0;i<ifh.NumberOfSections;i++)
{
fseek(archivo, idh.e_lfanew + 4 + sizeof(ifh) + ifh.SizeOfOptionalHeader + (sizeof(ish)*(ifh.NumberOfSections-1)) + suma ,SEEK_SET);
fread(&ish, sizeof(ish),1,archivo); // rellenamos IMAGE_SECTION_HEADER
 
printf("%x\n",(&ish)[i].Misc.PhysicalAddress);
 
suma += 0x28; // sumo 0x28 que es lo que ocupa ish para pasar a los datos de la siguiente sección.
}
 
fclose(archivo);
 
system("PAUSE");
 
return 0;
}

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 por Drinky94 » En línea
The Swash

Desconectado Desconectado

Mensajes: 76


-H-Sec Fan-


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

  • 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 por The Swash » En línea
Arkangel_0x7C5

Desconectado Desconectado

Mensajes: 298



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

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 (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.824


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 »

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

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
mDrinky

Desconectado Desconectado

Mensajes: 274


Miauuuuuuuuuuuuu dice el gato XD


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

Ya lo e conseguido, muchas gracias a todos...
El código arreglado es el siguiente:
Código
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
int main()
{
IMAGE_DOS_HEADER idh;
IMAGE_FILE_HEADER ifh;
IMAGE_OPTIONAL_HEADER ioh;
IMAGE_SECTION_HEADER ish;
 
char ruta[] = "C:\\MS-DOC.exe";
 
FILE * archivo = fopen(ruta,"r+b");
if (archivo == NULL)
{ // si no podemos abrri el archivo.
printf("Error al abrir el archivo\n");
system("PAUSE");
 
return 1;
}
 
fread(&idh,0x40,1,archivo); // rellenamos IMAGE_DOS_HEADER
if (idh.e_magic != IMAGE_DOS_SIGNATURE)
{ // comprovamos el e_magic para saber si es un EXE
printf("No es un archivo EXE\n");
system("PAUSE");
 
return 1;
}
 
fseek(archivo,idh.e_lfanew + 4,SEEK_SET);
fread(&ifh,0x14,1,archivo); // rellenamos IMAGE_FILE_HEADER
fseek(archivo, idh.e_lfanew + 4 + sizeof(ifh), SEEK_SET);
fread(&ioh,ifh.SizeOfOptionalHeader,1,archivo); // Leemos IMAGE_OPTIONAL_HEADER
 
for (int i=0;i<ifh.NumberOfSections;i++)
{
fread(&ish, sizeof(ish),1,archivo);
printf("%x\n",ish.Misc.PhysicalAddress);
}
 
fclose(archivo);
 
system("PAUSE");
 
return 0;
}

saludos.
En línea
Queta

Desconectado Desconectado

Mensajes: 250



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

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.
mDrinky

Desconectado Desconectado

Mensajes: 274


Miauuuuuuuuuuuuu dice el gato XD


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

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
The Swash

Desconectado Desconectado

Mensajes: 76


-H-Sec Fan-


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

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:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines