安卓相册缓存文件恢复原理与代码
安卓相册中有一个隐藏目录,里面有一个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!"