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