安卓相册中有一个隐藏目录,里面有一个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!"
blackfeather
2019/3/15
℃
0评论
有些人在程序嵌入一个webbrowser,然后里面打开网页,其中的声音不知道怎么屏蔽。
其实很简单,通过API HOOK干掉以下几个函数就行:
DirectSoundCreate
waveOutWrite
midiStreamOpen
API HOOK的类推荐使用Detours,微软官方推荐的库。HOOK掉,然后直接返回一个0即可。
据说WIN7下不可用,谁测试了给我反馈一下,继续跟进研究。
...
More...
blackfeather
2013/11/25
℃
1评论
最近工作中要用到截屏,都知道使用BitBlt截取到的数据是BMP编码,一个1024x*的桌面就要2M多,转换为jpg编码大小是100K左右,gif根据quality也会很小。
但是网上找到的转码都会生成一个临时文件,比如将BMP保存成文件后,建立编码器然后对文件编码,还有的就是编码器编码完后直接就生成了文件,这个明显不符合我们的需求,我们需要的就是内存中截取,内存中转换。
经过一上午的资料查询,搞定了这个玩意。大致流程是先BitBlt到内存BMP编码的数据,然后转换为数据流(Stream),建立一个编码器直接对流进行编码,最后将流转换为buffer,最后生成的buffer可以直接保存成jpg后缀的文件,直接打开即可查看。
...
More...
blackfeather
2012/3/28
℃
1评论
网上找到的这份代码,添加IE的可信站点和受限站点有两种方法,一种是调用IE COM的某某,没细看,再了就是这个方法,直接写注册表。。。
不多说了 ,直接上代码:
/************************************************************************/
...
More...
blackfeather
2012/1/18
℃
0评论
由于工作关系,最近转投VC的开发了。。。当然,还是要从最近本做起的。最近跟网络这块接触较多,写了两段小函数。
获取本机MAC,网上的代码都写烂了,但是异常处理不太好,比如多网卡等情况,于是自己写了一段简单明了靠谱的代码。
具体流程为先获取自己程序所在的网络的网络名,然后根据网络名获取IP,最后sendarp得到MAC。思路清晰。。。。
代码如下:
CString GetLocalIP()
...
More...
blackfeather
2012/1/17
℃
0评论
最近最的项目用到了socket,开始使用VB的winscok控件,但是这个控件的效率太低了而且没法设置超时,要建立一个Timer来完成,很不方便。于是决定用功能强大的PowerBasic来做。PB本身自带了好多有关TCP的函数使用起来非常方便,Google小搜索了下找到了这个很不错的代码,是一个Http服务器,使用多线程来完成socket,代码比较长,但是分析下就能看到socket部分的代码。希望对PBer有用。
点击下载:PowerBasci的HTTP服务器源代码
...
More...
blackfeather
2010/7/25
℃
0评论
最近做的一个项目里需要用到两个串口来完成通信,但是熟悉的51只有一个串口,后来问老师给我的回答竟然是用两个单片机。。。
无语了,于是想尝试使用普通I/O端口模拟串口来通信(微机原理不能白学呀),于是百度了一些资料,有了以下代码。
此代码不是我写的,但是感觉这个代码比较适合新手,有很高的参考价值并且可以直接编译,使用的是传说中的中断法。各位使用的时候注意修改晶振。
打包下载: 单片机模拟串口发送与接收代码
...
More...
blackfeather
2010/1/16
℃
0评论
PowerBasic是BASIC语言的一种编译器,编译出来的EXE或者DLL结构非常紧凑,执行速度跟C不相上下。编译出来的DLL也是标准DLL,不需要像VB那样拖着一个笨重的库文件。通常PowerBASIC 编译的代码在性能上比VB 编译的代码好3到23 倍, 产生的可执行文件比VB生成的可执行文件小4 到40 倍。我的很多很多工程里用的DLL都是由这个编译的。至于语法,和VB基本一致,所以上手很容易。最爽的是powerbasic里面有指针,变量指针还是函数指针都可以只用,所以能很容易的从C的代码翻译成powerbasic可编译的代码。
...
More...
blackfeather
2009/12/3
℃
3评论
这个代码是我从某个被挂马网站上分离出来的,并且本机全补丁测试真的可用,还是秒杀~~~所以就贴出来吧
一般的孩子喜欢生成器,所以也弄了一个。
...
More...
blackfeather
2009/7/7
℃
1评论
没事做了,用JAD反编译了手机版飞信想看看他的登陆时流程,结果弄出来却看不懂JAVA,非常不习惯面对对象这种思想。。。、
贴出来吧,有意者自己看看。。。
代码片段(登陆的这一段代码):
public void on_Login(Vector vector)
throws Exception
...
More...
blackfeather
2009/6/22
℃
0评论