Извлечение JPEG из образа диска

Я пытался сделать программу, которая может извлечь все файлы JPEG в выбранный образ диска. Я знаю, что в образе диска 7 файлов JPEG, на которых я тестирую, и все же код, который я сделал, может извлечь только 2 из них. Я хотел бы спросить, что я могу сделать неправильно, чтобы это произошло.

#!/usr/bin/python
import sys
from binascii import hexlify

def main(): 
    filename = 'disk.img'
    i = 1
    f = open(filename, 'rb')
    for data in iter(lambda:f.read(4), ""):
            if (data == '\xff\xd8\xff\xe1' or data == '\xff\xd8\xff\xe0'):
                print data.encode('hex')
                print f.tell()
            while(data != '\xff\xd9'):
                new_filename = "%03d.jpg" % i
                newfile = open(new_filename, 'ab')
                newfile.write(data)
                data = f.read(2)
            newfile.close() 
            print "%03d.jpg extracted!" % i             
            i = i+1
            #position = f.tell()

            #f.seek(position+16)


    f.close()
    print "EOF"


if __name__ == '__main__':
    main()

1 ответ

Существуют инструменты для этого. См. http://www.cgsecurity.org/wiki/PhotoRec

Я предполагаю, что проблема с примером кода состоит в том, что он читает (2|4) байта за раз, и когда JPEG не начинается с позиции, которая делится на (два | четыре), вы не найдете его. (два или четыре в зависимости от цикла, в котором мы находимся)

Другие вопросы по тегам