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.
- */
- #include <stdio.h>
- #include <stdint.h>
- #include <string.h>
- #include <stdlib.h>
- typedef uint8_t BYTE;
- int main(int argc, char* argv[])
- {
- // open card.raw
- FILE* card = fopen("card.raw", "r");
- // check if card.raw was opened correctly
- if (card == NULL)
- {
- printf("Could not oped card.raw");
- return 1;
- }
- // declares img file
- FILE* img;
- // int to store number of recovered images
- unsigned int rec = 0;
- // string to hold the name of the jpeg
- char* title = malloc((7 * sizeof(char)) + 1);
- // space to store image pixels
- BYTE buffer[512];
- while (fread(buffer, sizeof(buffer), 1, card) == 1)
- {
- //goes back to where it was before fread call
- fseek(card, -512, SEEK_CUR);
- // reads sequence of bytes until it spots start of jpg
- fread(buffer, sizeof(BYTE), 512, card);
- // if start of jpg
- if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && buffer[3] >= 0xe0 && buffer[3] <= 0xef)
- {
- // closes previous img file
- if (rec != 0)
- {
- fclose(img);
- }
- // creates filename
- sprintf(title, "%03d.jpg", rec);
- // creates new image
- img = fopen(title, "a");
- // outputs error if img could not be opened
- if (img == NULL)
- {
- printf("Could not create %s.", title);
- return 2;
- }
- // updates number of recevered files
- rec++;
- // writes sequence of bytes into img file
- fwrite(buffer, sizeof(BYTE), 512, img);
- }
- else
- {
- // if jpg already found but not at the start of it just write bytes into img
- if (rec != 0)
- {
- fwrite(buffer, sizeof(BYTE), 512, img);
- }
- }
- }
- // closes last img file
- fclose(img);
- // frees title string
- free(title);
- // closes card file
- fclose(card);
- // that's all folks
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement