Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- typedef struct _HEADER
- {
- char signature[0x2B];
- unsigned char xormask;
- unsigned int filecount;
- unsigned int indexoffset;
- } HEADER;
- typedef struct _FILEINDEX
- {
- char filename[0x27];
- char addcrypt;
- unsigned int offset;
- unsigned int size;
- } FILEINDEX;
- //changes string!
- char *ToUpper(char *s)
- {
- int i;
- for (i = 0 ; i < strlen(s); i ++ ) s[i]=toupper(s[i]);
- return s;
- }
- void main (int argc, char *argv[])
- {
- HEADER head;
- FILE* in;
- int i,j;
- FILEINDEX* indexes;
- if(argc < 3)
- {
- printf("CARNIVAL Script Dumper v0.01\n");
- printf("Usage: %s infile.pd OutDir\n",argv[0]);
- return;
- }
- if((in = fopen(argv[1],"rb"))==NULL)
- {
- printf("Failed opening input\n");
- return;
- }
- fread(&head,sizeof(HEADER), 1, in);
- if (strncmp(head.signature,"Pack",4))
- {
- printf("Invalid signature.\n");
- return;
- }
- fseek(in, head.indexoffset, SEEK_SET);
- indexes = (FILEINDEX*)malloc(head.filecount*sizeof(FILEINDEX));
- fread(indexes,sizeof(FILEINDEX),head.filecount,in);
- mkdir(argv[2]);
- chdir(argv[2]);
- for (i = 0; i < head.filecount; i++)
- {
- FILE* out;
- char *outbuff;
- indexes[i].size-=indexes[i].addcrypt;
- indexes[i].offset-=indexes[i].addcrypt;
- if ((out=fopen(indexes[i].filename, "wb"))==0)
- {
- printf("Failed opening output file %s\n",indexes[i].filename);
- continue;
- }
- outbuff = (char*) malloc(indexes[i].size);
- fseek(in, indexes[i].offset, SEEK_SET);
- fread(outbuff, indexes[i].size, 1, in);
- if ((strstr(ToUpper(indexes[i].filename),".PNG")==0)&&
- (strstr(ToUpper(indexes[i].filename),".OGG")==0)
- )
- for (j = 0; j < indexes[i].size; j++) outbuff[j]^=head.xormask;
- fwrite(outbuff,indexes[i].size,1,out);
- fclose(out);
- free(outbuff);
- }
- chdir("..");
- free(indexes);
- fclose(in);
- }
Advertisement
Add Comment
Please, Sign In to add comment