Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- void main(int argc,char *argv[])
- {
- FILE *input_file;
- FILE *output_file;
- unsigned char header[6];
- unsigned int offset;
- int counter;
- char filename[256];
- unsigned char *buffer;
- if (argc<2)
- {
- printf("\nFF7 .BIN files decoder by +=|KaRMa|=+\n");
- printf("\nSyntax: ff7dec file.bin\n\n");
- exit(0);
- }
- // in realta alcuni file .bin sono file .gz puri
- // e basta rinominarli in .gz e scompattarli
- // direttamente con Winzip senza usare questo programma
- // ad esempio il file title.bin e' un immagine RAW
- // di dimensione 320x224 con header di 12 bytes da saltare
- counter=0;
- input_file=fopen(argv[1],"rb");
- while (!feof(input_file))
- {
- memset(header,6,0);
- // legge i 6 bytes di header
- fread(header,6,1,input_file);
- // i primi due bytes sono i byte da
- // leggere che compongono il blocco GZIP
- // i restanti bytes hanno origine sconosciuta
- // forse sono una specie di checksum o CRC
- // sto tracciando il codice ASM e ho visto
- // che fa un test su questi bytes ma non
- // capito ancora se e come li calcola
- offset=0;
- offset=header[1]<<8;
- offset+=header[0];
- if (offset==0)
- break;
- memset(filename,0,256);
- sprintf(filename,"%s%d.gz",argv[1],counter);
- buffer=(unsigned char*)malloc(offset);
- // legge il blocco GZIP
- // ogni blocco incomincia con la stringa esadecimale
- // 1F8B08
- if (fread(buffer,offset,1,input_file)!=-1)
- {
- // crea il file GZIP
- output_file=fopen(filename,"wb");
- fwrite(buffer,offset,1,output_file);
- fclose(output_file);
- printf("\nFile %s created!",filename);
- }
- else
- break;
- free(buffer);
- counter++;
- }
- fclose(input_file);
- // i file .gz possono essere scompattati con Winzip o WinRAR
- // modificati e poi ricompressi con gzip.
- // Appunti su un probabile compressore:
- // in teoria una volta modificati i files decompressi basta ricomprimere
- // con gizp e creare un programmino simile a questo che scrive
- // i 6 bytes (di 2 byte di lunghezza blocco compresso) e di seguito
- // il blocco (file) .gz
- }
Add Comment
Please, Sign In to add comment