Me vi con ganas de programar esto,aunque sin los usuarios mencionados en el agradecimiento nunca habría finalizado el proyecto.
Comenté el código todo lo que pude,espero les sirva de ayuda.

Imagen


Imagen

Código: Seleccionar todo

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

int main(int argc, char *argv[])
{

  ///////////////////////////////////////////////////////////////////////////////////////////
  // pEOF 1.0                                                                              //
  // Agradecimientos a:                                                                    //
  //   *linkgl - Por explicarme como leer las secciones y echarme una mano con errores.    //
  //   *ps1c0s1s - Por mostrarme el error.                                                 //
  //   *osnaraus - Por tomar el tiempo leyendo el codigo y ayudarme                        //
  ///////////////////////////////////////////////////////////////////////////////////////////
  
  //Estructuras de la PE
    IMAGE_DOS_HEADER BloqueA;
    IMAGE_NT_HEADERS BloqueB;
    IMAGE_SECTION_HEADER BloqueC;
  //End
  
  char Entrada[MAX_PATH];
  char Salida[MAX_PATH];
  
  printf("Introduca el Nombre del Archivo con EOF \n");
  scanf("%s",&Entrada);
  
  printf("Introduca el Nombre del Archivo a Parchear \n");
  scanf("%s",&Salida);
  
  
  FILE * pFile = fopen(Entrada,"rb");
  if(pFile != NULL){
          fseek(pFile,0,SEEK_END);  //Nos posicionarmos al final
          DWORD pSize = ftell(pFile); //Obtenemos el peso
          rewind(pFile); //Posicionamos el Indicador en 0
          
          //Leemos el BloqueA correspondiente a la cabecera PE
          fread(&BloqueA,sizeof(IMAGE_DOS_HEADER),1,pFile); 
          //Nos posicionamos en esta
          fseek(pFile,BloqueA.e_lfanew,SEEK_SET);
          
          //Leemos el BloqueB correspondiente a la TABLA de secciones
          fread(&BloqueB,sizeof(IMAGE_NT_HEADERS),1,pFile);
          fseek(pFile,BloqueA.e_lfanew + sizeof(IMAGE_NT_HEADERS) + sizeof(IMAGE_SECTION_HEADER) * (BloqueB.FileHeader.NumberOfSections - 1),SEEK_SET);
          
          //Leemos el BloqueC correspondiente a los Datos Finales
          fread(&BloqueC,sizeof(IMAGE_SECTION_HEADER),1,pFile); 
          
          //Obtenemos el Final de la Ultima Seccion de la PE
          DWORD pEOF = BloqueC.PointerToRawData + BloqueC.SizeOfRawData;
          
          //Si el peso dela Ultima seccion es menor que el Peso Total,existe EOF
          if(pEOF < pSize){
                  MessageBox(NULL,"EOF ENCONTRADO","INFO",MB_OK);
                  
                   //Nos posicionamos en el final de la ultima secion
                   fseek(pFile,pEOF,SEEK_SET);
                   
                   //Creamos un Buffer para almacenar el EOF que vamos a leer
                   char * pBuffer = (char*)malloc(pSize - pEOF+20);
                   //Leemos y almacenamos los datos comprendidos entre el
                   //Peso Total y el final de la seccion(EOF)
                   fread(pBuffer,pSize - pEOF,sizeof(char),pFile);
                   
                   FILE * pSaved = fopen(Salida,"ab");
                   //Escribimos en el final del nuevo archivo el EOF
                   //              Tamaño EOF , 
                   fwrite(pBuffer,pSize - pEOF,sizeof(char),pSaved);
                     
                   fclose(pSaved);
                   //Liberamos el espacio reservado en memoria
                   free(pBuffer);
                          }
                   }
                   fclose(pFile);
  getchar();	
  return 0;
}
Quizás les sea util para programar un Encriptador por EOF sin delimitador....
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
Bien ahí, veo que ya entendiste masomenos como leer y posicionarte en las secciones del PE :p, recuerda que al sumar el SizeOfRawData + PointerToRawData de las secciones nos sirve para sacar el tamaño físico real del archivo es decir lo que pesa el archivo sin el EOF!! (:
//mHmm..
Si,acabé por reprogramarlo entero bro... sinó no aprendía nada....

Muchas gracias por su tiempo...
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
Excelente man, ya sabes que querer es poder. Y vos vas a llegar lejos en este lenguaje, no me cabe la menor duda. Felicitaciones
Imagen
Gran trbajo hermano , me gusto mucho el coded , bien comentado y ordenado...
obey escribió:Pues si tuviese mas edad todavia pero esqe perder la virginidad con tu profesora de informatica y que ademas tenga 50....
Responder

Volver a “Fuentes”