安卓相册缓存文件恢复原理与代码

其他代码 blackfeather

安卓相册中有一个隐藏目录,里面有一个thumbdata后缀的文件,经常会非常大(几个G),这就是类似于电脑的thumb.db一样是图片的缩略图缓存文件,用于加速相册等应用显示的。

如果相册里面的照片删除后,这个缓存里面的是不会自动清理的,所以经常被利用来恢复照片,缺点是缩略图,太小了。

这个缓存数据结构是块的,具体也不解释了,直接贴代码好了:


import os
from struct import *
currpath = "D:\\recovery"
filename = ".thumbdata4--1967290299"
offset=0
file_size=os.path.getsize(filename)
f=open(filename, "rb")
while(offset<file_size):
            f.seek(offset)
            tmp=f.read(10000)
            if tmp[0]=="\x01":
                #print offset
                #normal mode and xiaomi mode
                if tmp[21]!="\xFF": #normal mode
                    tmp_magic_code=tmp[1:9]
                    tmp_jpg_size=tmp[9:13]
                    #magic_code=unpack("i",tmp_magic_code[::-1])
                    jpg_size=unpack("I",tmp_jpg_size[::-1])
                    #print jpg_size
                    f2=open(currpath + "\\" + str(offset/10000) + ".jpg","wb")
                    f.seek(offset + 13)
                    f2.write(f.read(int(jpg_size[0])))
                    #print "extracting " + str(offset/10000) + ".jpg"
                else:
                    tmp_magic_code = tmp[1:17]
                    tmp_jpg_size = tmp[17:21]
                    jpg_size=unpack("I",tmp_jpg_size[::-1])
                    #print jpg_siz
                    f2 = open(currpath + "\\" + str(offset / 10000) + ".jpg", "wb")
                    f.seek(offset + 21)
                    f2.write(f.read(int(jpg_size[0])))
                    #print "extracting " + str(offset / 10000) + ".jpg"
            offset+=10000
print "All Done!"


评论列表:

发表评论: