Advertisement
Guest User

recover.c

a guest
May 17th, 2016
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.35 KB | None | 0 0
  1. /**
  2.  * recover.c
  3.  *
  4.  * Computer Science 50
  5.  * Problem Set 4
  6.  *
  7.  * Recovers JPEGs from a forensic image.
  8.  */
  9.  
  10. #include <stdio.h>
  11. #include <stdint.h>
  12. #include <string.h>
  13. #include <stdlib.h>
  14.  
  15. typedef uint8_t BYTE;
  16.  
  17. int main(int argc, char* argv[])
  18. {
  19.     // open card.raw
  20.     FILE* card = fopen("card.raw", "r");
  21.    
  22.     // check if card.raw was opened correctly
  23.     if (card == NULL)
  24.     {
  25.         printf("Could not oped card.raw");
  26.         return 1;
  27.     }
  28.    
  29.     // declares img file
  30.     FILE* img;
  31.    
  32.     // int to store number of recovered images
  33.     unsigned int rec = 0;
  34.    
  35.     // string to hold the name of the jpeg
  36.     char* title = malloc((7 * sizeof(char)) + 1);
  37.    
  38.     // space to store image pixels
  39.     BYTE buffer[512];
  40.    
  41.     while (fread(buffer, sizeof(buffer), 1, card) == 1)
  42.     {
  43.         //goes back to where it was before fread call
  44.         fseek(card, -512, SEEK_CUR);
  45.        
  46.         // reads sequence of bytes until it spots start of jpg
  47.         fread(buffer, sizeof(BYTE), 512, card);
  48.        
  49.         // if start of jpg
  50.         if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && buffer[3] >= 0xe0 && buffer[3] <= 0xef)
  51.         {
  52.             // closes previous img file
  53.             if (rec != 0)
  54.             {
  55.                 fclose(img);
  56.             }
  57.            
  58.             // creates filename
  59.             sprintf(title, "%03d.jpg", rec);
  60.            
  61.             // creates new image
  62.             img = fopen(title, "a");
  63.        
  64.             // outputs error if img could not be opened
  65.             if (img == NULL)
  66.             {
  67.                 printf("Could not create %s.", title);
  68.                 return 2;
  69.             }
  70.            
  71.             // updates number of recevered files
  72.             rec++;
  73.            
  74.             // writes sequence of bytes into img file
  75.             fwrite(buffer, sizeof(BYTE), 512, img);
  76.         }
  77.         else
  78.         {
  79.             // if jpg already found but not at the start of it just write bytes into img
  80.             if (rec != 0)
  81.             {
  82.                 fwrite(buffer, sizeof(BYTE), 512, img);
  83.             }
  84.         }
  85.     }
  86.    
  87.     // closes last img file
  88.     fclose(img);
  89.    
  90.     // frees title string
  91.     free(title);
  92.    
  93.     // closes card file
  94.     fclose(card);
  95.    
  96.     // that's all folks
  97.     return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement