从磁盘映像中提取JPEG图片

0 投票
1 回答
1618 浏览
提问于 2025-04-18 17:24

我一直在尝试写一个程序,目的是从一个选定的磁盘镜像中提取所有的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 个回答

1

其实有现成的工具可以解决这个问题。你可以看看这个链接:http://www.cgsecurity.org/wiki/PhotoRec

我想样例代码的问题在于它一次读取2个或4个字节的数据。如果一个JPEG文件的开始位置不是2或4的倍数,你就找不到它了。(具体是2还是4,取决于我们在哪个循环中)

撰写回答