Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * recover.c
- *
- * Computer Science 50
- * Problem Set 4
- *
- * Recovers JPEGs from a forensic image.
- *
- * open memory card file
- * find beginning of jpg
- * open a new jpg
- * write 512 bytes until new jpg is found
- * detect end of file
- */
- #include <stdio.h>
- #include <stdint.h>
- typedef uint8_t BYTE;
- int main(void)
- {
- // open card file
- FILE* inptr = fopen("card.raw", "r");
- // check if file can be opened, if not, show error message
- if (inptr == NULL)
- {
- printf("Could not open card.raw.\n");
- return 1;
- }
- // counter for number of jpg files recovered
- int counter = 0;
- // create a buffer of 512 bytes
- BYTE buffer[512];
- // declare jpg file name, 3 digit number, starting from 000
- char filename[8];
- // temporary file output
- FILE* outptr = NULL;
- // repeat until end of card
- while ((fread(buffer, 512, 1, inptr)) == 1)
- {
- // detect jpg file by checking first four bytes
- if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] >= 0xe0 && buffer[3] <= 0xef))
- {
- // if temp already exists, fclose temp (start of new jpg file and end of previous jpg file, hence close old file and open new file)
- if (outptr != NULL)
- {
- fclose(outptr);
- }
- // title of jpg files
- sprintf(filename, "%03d.jpg", counter);
- // open temp file
- outptr = fopen(filename, "w");
- counter++;
- // write data to temp file
- fwrite(buffer, 512, 1, outptr);
- }
- // else if buffer conditions above not met and counter > 0
- else if (counter > 0)
- {
- // continue to fwrite to temp file (start of jpg file already written, continue to write to file currently opened)
- fwrite(buffer, 512, 1, outptr);
- }
- // continue to fread (cos if buffer condition not met + counter = 0, means havent hit jpg file yet, so keep reading)
- else
- fread(buffer, 512, 1, inptr);
- }
- // close remaining files
- fclose(inptr);
- fclose(outptr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement