rendered paste body#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; 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); 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);}