Advertisement
Guest User

RecoverHELP

a guest
Jul 5th, 2020
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.22 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(int argc, char *argv[]) // forensic card file taken as argv[1]
  6. {
  7.     if (argc != 2) // check for correct number of arguments
  8.     {
  9.         printf("Usage: file name"); // return usage error
  10.         return 1; // end program, return fail
  11.     }
  12.  
  13.     FILE *card; // forensic card file pointer
  14.     card = fopen(argv[1], "r"); // open forensic card for reading
  15.  
  16.     if (!card)
  17.     {
  18.         fclose(card); // close invalid card file
  19.         printf("ERROR: Could not open file");
  20.         return 1; // end program, return fail
  21.     }
  22.  
  23.     int fileCount = 0; // Counter for sequential file names
  24.     char nextFile[8]; // Jpeg file name strings
  25.     unsigned char buffer[512]; // read/write buffer
  26.     FILE *newJpeg; // recovered jpeg file pointer
  27.     char ch; // check for EOF
  28.  
  29.     while ((ch = fgetc(card)) != EOF) // For the full length of the forensic card file
  30.     {
  31.         fread(buffer, sizeof(unsigned char), 512, card); // read from card to buffer
  32.  
  33.         for (int i = 0; i  <= 512; i++) // DEBUGGING
  34.             printf("%d : %p : %c\n", i, &buffer[i], buffer[i]); // DEBUGGING
  35.  
  36.         // If first jpeg header is detected
  37.         if (fileCount == 0 && buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
  38.         {
  39.             sprintf(nextFile, "img_%03d.jpg", fileCount); // set first file name
  40.             newJpeg = fopen(nextFile, "w"); // open first jpeg file
  41.             fileCount++; // increase file count for next file name
  42.             fwrite(buffer, sizeof(unsigned char), 512, newJpeg); // write from buffer to jpeg file
  43.             continue;
  44.         }
  45.  
  46.         // If next jpeg header is detected
  47.         if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
  48.         {
  49.             fclose(newJpeg); // close last jpeg file
  50.             sprintf(nextFile, "img_%03d.jpg", fileCount); // set current file name
  51.             newJpeg = fopen(nextFile, "w"); // open current jpeg file
  52.             fileCount++; // increase file count for next file name
  53.             fwrite(buffer, sizeof(unsigned char), 512, newJpeg); // write from buffer to jpeg file
  54.             continue;
  55.         }
  56.  
  57.         fwrite(buffer, sizeof(unsigned char), 512, newJpeg); // write from buffer to jpeg file
  58.     }
  59.  
  60.     fclose(newJpeg); // close final jpeg file
  61.     fclose(card); // close forensic card file
  62.  
  63.     return 0; // end program, return success
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement