All pastes #611921 Raw Edit

Something

public c v1 · immutable
·published 2007-07-10 03:18 UTC
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);}