import sys SECTOR_SIZE = 512 cr2_header = '49492a001000000043520200' wav_header = '52494646' jpeg_header = 'ffd8ffe' class RecoverImages: outfile = "" extension = "" file_number = "" def __init__(self, filename): self.extension = "junk" self.outfile = 0 self.file_number = 0 self.recover(filename) def recover(self, in_filename): data=open(in_filename, 'rb') self.update_output_file() sector = data.read(SECTOR_SIZE) while(sector): if(self.detected_start_of_file(sector)): self.file_number = self.file_number + 1 self.update_output_file() self.outfile.write(sector) sector = data.read(SECTOR_SIZE) data.close() def update_output_file(self): if(self.outfile): self.outfile.close() out_filename = "saved_%03d.%s" % (self.file_number, self.extension) self.outfile = open(out_filename, 'wb') print out_filename def detected_start_of_file(self, sector): result = False; header = sector[0:12] headerhex = header.encode('hex') # detect Canon cr2 headers if (headerhex == cr2_header): result = True self.extension = "cr2" # WAV files if (headerhex[0:8] == wav_header): result = True self.extension = "wav" # JPEG files if (headerhex[0:7] == jpeg_header): result = True self.extension = "jpg" return result if __name__ == "__main__": recover = RecoverImages(sys.argv[1])