Guest User

Untitled

a guest
Apr 25th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.07 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. void main(int argc,char *argv[])
  5. {
  6.     FILE *input_file;
  7.     FILE *output_file;
  8.  
  9.     unsigned char header[6];
  10.     unsigned int offset;
  11.     int counter;
  12.     char filename[256];
  13.     unsigned char *buffer;
  14.  
  15.     if (argc<2)
  16.     {
  17.         printf("\nFF7 .BIN files decoder by +=|KaRMa|=+\n");
  18.         printf("\nSyntax: ff7dec file.bin\n\n");
  19.         exit(0);
  20.     }
  21.  
  22.     // in realta alcuni file .bin sono file .gz puri
  23.     // e basta rinominarli in .gz e scompattarli
  24.     // direttamente con Winzip senza usare questo programma
  25.     // ad esempio il file title.bin e' un immagine RAW
  26.     // di dimensione 320x224 con header di 12 bytes da saltare
  27.  
  28.     counter=0;
  29.     input_file=fopen(argv[1],"rb");
  30.  
  31.     while (!feof(input_file))
  32.     {
  33.         memset(header,6,0);
  34.         // legge i 6 bytes di header
  35.         fread(header,6,1,input_file);
  36.         // i primi due bytes sono i byte da
  37.         // leggere che compongono il blocco GZIP
  38.         // i restanti bytes hanno origine sconosciuta
  39.         // forse sono una specie di checksum o CRC
  40.         // sto tracciando il codice ASM e ho visto
  41.         // che fa un test su questi bytes ma non
  42.         // capito ancora se e come li calcola
  43.         offset=0;
  44.         offset=header[1]<<8;
  45.         offset+=header[0];
  46.         if (offset==0)
  47.             break;
  48.         memset(filename,0,256);
  49.         sprintf(filename,"%s%d.gz",argv[1],counter);
  50.         buffer=(unsigned char*)malloc(offset);
  51.         // legge il blocco GZIP
  52.         // ogni blocco incomincia con la stringa esadecimale
  53.         // 1F8B08
  54.         if (fread(buffer,offset,1,input_file)!=-1)
  55.         {  
  56.             // crea il file GZIP
  57.             output_file=fopen(filename,"wb");
  58.             fwrite(buffer,offset,1,output_file);
  59.             fclose(output_file);
  60.             printf("\nFile %s created!",filename);
  61.         }
  62.         else
  63.             break;
  64.         free(buffer);
  65.         counter++;
  66.     }
  67.     fclose(input_file);
  68.  
  69.     // i file .gz possono essere scompattati con Winzip o WinRAR
  70.     // modificati e poi ricompressi con gzip.
  71.     // Appunti su un probabile compressore:
  72.     // in teoria una volta modificati i files decompressi basta ricomprimere
  73.     // con gizp e creare un programmino simile a questo che scrive
  74.     // i 6 bytes (di 2 byte di lunghezza blocco compresso) e di seguito
  75.     // il blocco (file) .gz
  76.  
  77. }
Add Comment
Please, Sign In to add comment