Busca la funcion que necesitas!

viernes, 7 de enero de 2011

C - Detectar EOF haciendo uso del PE

Bueno primero tenemos que tener claros algunos términos para poder entender el código, primero EOF significa End Of File, como su nombre lo dice, esta sección es el final de un ejecutable, pero hay ciertos ejecutables (sobre todo los troyanos y encriptadores), que almacenan datos al final de su estructura, masomenos así:

Estructura de un ejecutable
1.- Cabeceras
2.- Tabla de secciones
3.- Secciones
4.- EOF (Datos extra's)


Un ejecutable puede meter una cadena o string al final de sí mismo para despues extraerla y usarla en el programa, ahora hize esta función para detectar si un archivo tiene datos extra o EOF, o no los tiene

Código:
#include <stdio.h>
#include <windows.h>
/***************************\
*        _                  *
*       | |                 *
*       | |__               *
* Coder |____|inkgl         *
* Fecha: 02/01/11           *
* Indetectables.net/foro    *
* Revolutionteams.info      *
* Orgulloso de ser...       *
*  -INDETECTABLE-           *
\***************************/

BOOL existe_EOF(char *ruta)
{
  //-> Estructuras necesarias
  IMAGE_DOS_HEADER idh;
  IMAGE_NT_HEADERS inh;
  IMAGE_SECTION_HEADER ish;
  //-> Variables necesarias
  FILE *fp;
  DWORD iTam;
  DWORD hTam;
  //Abrimos el archivo para leer en binario
  fp=fopen(ruta,"rb");
  if(fp!=NULL)
  {
    fseek(fp,0,SEEK_END);
    iTam=ftell(fp);
    rewind(fp);
    fread(&idh,sizeof(IMAGE_DOS_HEADER),1,fp);
    fseek(fp,idh.e_lfanew,SEEK_SET);
    fread(&inh,sizeof(IMAGE_NT_HEADERS),1,fp);
    fseek(fp,idh.e_lfanew + sizeof(IMAGE_NT_HEADERS) + sizeof(IMAGE_SECTION_HEADER) * (inh.FileHeader.NumberOfSections - 1),SEEK_SET);
    fread(&ish,sizeof(IMAGE_SECTION_HEADER),1,fp);
    fclose(fp);
    hTam=ish.PointerToRawData + ish.SizeOfRawData;
    if(hTam < iTam)
      return true;
    else
      return false;
  }
}

//->USO
int main()
{
  if(existe_EOF("C:\\salida.exe"))
    printf("El ejecutable tiene EOF");
  else
    printf("El ejecutable no tiene EOF");
  getchar();
  return 0;
}//Compilado con mingw - Dev C++
 Críticas, dudas, sugerencias en los coments!

1 comentario: