Página 1 de 1

pEOF Reader/Writer

Publicado: 07 Ene 2011, 15:30
por p0is0n-123
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....

Re: pEOF Reader/Writer

Publicado: 07 Ene 2011, 17:00
por linkgl
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!! (:

Re: pEOF Reader/Writer

Publicado: 07 Ene 2011, 19:31
por p0is0n-123
Si,acabé por reprogramarlo entero bro... sinó no aprendía nada....

Muchas gracias por su tiempo...

Re: pEOF Reader/Writer

Publicado: 07 Ene 2011, 19:47
por osnaraus
Excelente man, ya sabes que querer es poder. Y vos vas a llegar lejos en este lenguaje, no me cabe la menor duda. Felicitaciones

Re: pEOF Reader/Writer

Publicado: 07 Ene 2011, 20:31
por ØnLy
Gran trbajo hermano , me gusto mucho el coded , bien comentado y ordenado...