Con estas funciones puedes leer y escribir en otro archivo como un .txt u otro binario los datos que contiene el EOF (End Of File) de un archivo binario, esto nos sirve para los encriptadores, juntadores (binders o joiners) que pasan datos por el final del archivo esto nos ayuda a encontrar los datos que se le agregaron al exe original y la funcion WriteEOFData nos permite escribir esos datos en un .txt por ejemplo para facilitar su lectura, dejo ambas funciones:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
/* ReadEOFData
&
WriteEOFData C
Coded By linkgl
Funcion-linkgl.blogspot.com
Indetectables.net/foro
Indetectables Coders :D
*/
int VariableGlobal;
char *ReadEOFData(char *ruta)
{
//-> Estructuras necesarias del PE
IMAGE_DOS_HEADER idh;
IMAGE_NT_HEADERS inh;
IMAGE_SECTION_HEADER ish;
//-> Variables necesarias
FILE *fp;
DWORD iTam;
DWORD hTam;
char *szEof;
//Abrimos el archivo para leer en binario
fp=fopen(ruta,"rb");
if(fp!=NULL)
{
//Nos posicionamos hasta el final
//Y obtenemos el tamaño del archivo
fseek(fp,0,SEEK_END);
iTam=ftell(fp);
rewind(fp);
//Leemos el PE
//(IMAGE_DOS_HEADER,NT_HEADERS Y SECTION_HEADER)
//Y las guardamos en su correspondiente estructura
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);
//Obtenemos el tamaño que debe tener el archivo
//Usando la IMAGE_SECTION_HEADER
//sumamos el PointerToRawData y SizeOfRawData
//que es la direccion donde apunta la seccion
//mas el tamaño de la seccion del PE
hTam=ish.PointerToRawData + ish.SizeOfRawData;
//Si es mayor el tamaño total del exe que el del PE
//entonces existe EOF y procedemos a leerlo
if(hTam < iTam)
{
//Reservamos memoria del tamaño del eof
//Nos posicionamos para leerlo
//Y lo leemos y retornamos
//Tambien almacenamos el tamaño del EOF
//como variable global
szEof=(char *)malloc(iTam-hTam);
fseek(fp,hTam,SEEK_SET);
fread(szEof,iTam-hTam,1,fp);
fclose(fp);
VariableGlobal=iTam-hTam;
return szEof;
}
else
{
fclose(fp);
return NULL;
}
}
}
BOOL WriteEOFData(char *ruta,char *szEof)
{
//Aqui es sencillo
//Abrimos, nos posicionamos al final
//Y escribimos el EOF :P
//->Saludines Linkgl
FILE *fp;
fp=fopen(ruta,"ab");
char buffer[1024];
if(fp!=NULL)
{
fseek(fp,0,SEEK_END);
fwrite(szEof,VariableGlobal,sizeof(char),fp);
fclose(fp);
return TRUE;
}
else
return FALSE;
}
//->USO
int main()
{
WriteEOFData("c:\\es_eof.exe",ReadEOFData("c:\\EEOF.EXE"));
return 0;
}