Advertisement
Philosophist

recover.c

May 28th, 2015
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 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. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <cs50.h>
  12. #include <math.h>
  13. #include <stdint.h>
  14.  
  15. FILE* inptr;
  16.  
  17. void make_jpg (FILE* new_jpg)
  18. {
  19. uint8_t buffer[512];
  20. fread(&buffer, 512, 1, inptr);
  21. if((buffer[0]==0xff && buffer[1]==0xd8 && buffer[2]==0xff && buffer[3]==0xe1) || (buffer[0]==0xff && buffer[1]==0xd8 && buffer[2]==0xff && buffer[3]==0xe0))
  22. {
  23. fseek(inptr, -512, SEEK_CUR);
  24. }else if(feof(inptr)){
  25.  
  26. }else{
  27. fwrite(&buffer, 512, 1, new_jpg);
  28. make_jpg(new_jpg);
  29. }
  30. };
  31.  
  32. int main(void)
  33. {
  34. char* infile = "card.raw";
  35. inptr = fopen(infile, "r");
  36. if (inptr == NULL)
  37. {
  38. printf("Could not open %s.\n", infile);
  39. return 2;
  40. }
  41.  
  42. // Move inptr to first jpg filled block
  43. uint8_t check[4];
  44. fread(&check, 4, 1, inptr);
  45. bool look = true;
  46. while (look)
  47. {
  48. if((check[0]==0xff && check[1]==0xd8 && check[2]==0xff && check[3]==0xe1) || (check[0]==0xff && check[1]==0xd8 && check[2]==0xff && check[3]==0xe0))
  49. {
  50. look = false;
  51. }else{
  52. fseek(inptr, 508, SEEK_CUR);
  53. fread(&check, 4, 1, inptr);
  54. }
  55. }
  56. fseek(inptr, -4, SEEK_CUR);
  57.  
  58. // set counter for jpg files
  59. int i = 0;
  60.  
  61. // keep creating jpg files until eof
  62. while (!feof(inptr))
  63. {
  64. char str[7];
  65. sprintf(str, "%03d.jpg", i);
  66. FILE* outptr;
  67. char* outfile = str;
  68. outptr = fopen(outfile, "w");
  69.  
  70. //write the first block
  71. uint8_t buffer[512];
  72. fread(&buffer, 512, 1, inptr);
  73. fwrite(&buffer, 512, 1, outptr);
  74.  
  75. //finish remaining jpg if any
  76. make_jpg(outptr);
  77.  
  78. //close
  79. fclose(outptr);
  80. i++;
  81. }
  82. fclose(inptr);
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement