/** * recover.c * * Computer Science 50 * Problem Set 4 * * Recovers JPEGs from a forensic image. */
include
include
include
int main(int argc, char* argv[]) { // Ensure proper usage if(argc != 2) { printf("You need ./recover and an infile\n"); return 1; }
//remember file name
char* infile = argv[1];
//open input file
FILE* inptr = fopen("card.raw", "r");
if(inptr == NULL)
{
printf("Could not open %s. \n", infile);
return 2;
}
//define buffer
unsigned char buffer[512] = {0};
//jpegs
char jpg[8] = {0};
//keep track of the filenumbers
int filenumber = 0;
//pointer for outfile
FILE* outptr;
//repeat until end of file
while(fread(&buffer, sizeof(buffer), 1, inptr) == 1)
{//read 512 bytes into a buffer
//Finding the beginning of a jpg
if(buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] == 0xe0 || buffer[3] == 0xe1))
{
//opens new jpg; creates file name for jpgs
sprintf(jpg, "%03d.jpg", filenumber);
//opens a new file
outptr = fopen(jpg, "w");
if (NULL == outptr)
{
printf("Cannot open jpg\n");
return 1;
}
//write into outfile
fwrite(buffer, sizeof(buffer), 1, outptr);
//increment jpgs
filenumber++;
}
else
{
if(NULL != outptr)
{
fwrite(buffer, sizeof(buffer), 1, outptr);
}
}
}
fclose(inptr);
fclose(outptr);
return 0;
}