Top
thumbdata_BlackFeather'S Blog_第1页
忙忙碌碌,更新不及时诶。
其他代码

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

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

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

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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!"


blackfeather 2019/3/15 1340 0评论