Bueno desde que toqué el runPE del cryptic me salió la curiosidad de meterme en eso del PE y bueno leyendo y documentandome he hecho esta función que te dice si existe el PE en el archivo o no.!

Código: Seleccionar todo

/**************************
* Coder: Linkgl           *
* Fecha 30/12/2010        *
* Indetectables.net       *
***************************/

#include <windows.h>
#include <stdio.h>

BOOL existe_header(char *sRuta)
{
  IMAGE_DOS_HEADER iDh; //Estructuras PE necesarias
  IMAGE_NT_HEADERS iNt;
  
  FILE *f1;
  f1=fopen(sRuta,"rb"); //Abrimos el archivo
  if(f1==NULL) //Si es nulo retornamos false
    return false;
  fread(&iDh,sizeof(IMAGE_DOS_HEADER),1,f1); //leemos y el IMAGE_DOS_HEADER
  fseek(f1,iDh.e_lfanew,SEEK_SET); //Nos posicionamos para leer el IMAGE_NT_HEADERS
  fread(&iNt,sizeof(IMAGE_NT_HEADERS),1,f1); //leemos el IMAGE_NT_HEADERS
  //Si ambos existen retornamos true
  if(iDh.e_magic==IMAGE_DOS_SIGNATURE && iNt.Signature == IMAGE_NT_SIGNATURE)
    return true;
  else
    return false;
}

//uso ->
int main()
{
  if(existe_header("c:\\crackme.exe")==true)
  {
    printf("Existen los headers");
  }
  else 
    printf("No existen");
  getchar();
}
//mHmm..
Muy bueno link,tengo que ponerme a leer el formato PE...

Ahora agarro el codigo para ver con detenimiento,gracias...
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
También puedes declarar PIMAGE_NT_HEADERS (lo mismo con dos_header...) y llamarla como en C++ piNh->OptionalHeader.AddressOfEntryPoint; (Por un decir) una vez que lees las propiedades de ambas estructuras leer el PE es pan comido :P
//mHmm..
Responder

Volver a “Fuentes”