网站已升级!
其他代码

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

安卓相册中有一个隐藏目录,里面有一个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打开网页的声音

 

有些人在程序嵌入一个webbrowser,然后里面打开网页,其中的声音不知道怎么屏蔽。

其实很简单,通过API HOOK干掉以下几个函数就行:

DirectSoundCreate
waveOutWrite
midiStreamOpen

API HOOK的类推荐使用Detours,微软官方推荐的库。HOOK掉,然后直接返回一个0即可。

据说WIN7下不可用,谁测试了给我反馈一下,继续跟进研究。

...

More...

blackfeather 2013/11/25 1评论

其他代码

内存中截屏并转换为JPG编码的数据 -- VC

 

最近工作中要用到截屏,都知道使用BitBlt截取到的数据是BMP编码,一个1024x*的桌面就要2M多,转换为jpg编码大小是100K左右,gif根据quality也会很小。

但是网上找到的转码都会生成一个临时文件,比如将BMP保存成文件后,建立编码器然后对文件编码,还有的就是编码器编码完后直接就生成了文件,这个明显不符合我们的需求,我们需要的就是内存中截取,内存中转换。

经过一上午的资料查询,搞定了这个玩意。大致流程是先BitBlt到内存BMP编码的数据,然后转换为数据流(Stream),建立一个编码器直接对流进行编码,最后将流转换为buffer,最后生成的buffer可以直接保存成jpg后缀的文件,直接打开即可查看。

...

More...

blackfeather 2012/3/28 1评论

其他代码

获取本机IP、MAC及获取网关MAC -- VC

 

由于工作关系,最近转投VC的开发了。。。当然,还是要从最近本做起的。最近跟网络这块接触较多,写了两段小函数。

获取本机MAC,网上的代码都写烂了,但是异常处理不太好,比如多网卡等情况,于是自己写了一段简单明了靠谱的代码。

具体流程为先获取自己程序所在的网络的网络名,然后根据网络名获取IP,最后sendarp得到MAC。思路清晰。。。。

代码如下:

 

CString GetLocalIP()

...

More...

blackfeather 2012/1/17 0评论

其他代码

PowerBasic的HTTP服务器源代码

 

最近最的项目用到了socket,开始使用VB的winscok控件,但是这个控件的效率太低了而且没法设置超时,要建立一个Timer来完成,很不方便。于是决定用功能强大的PowerBasic来做。PB本身自带了好多有关TCP的函数使用起来非常方便,Google小搜索了下找到了这个很不错的代码,是一个Http服务器,使用多线程来完成socket,代码比较长,但是分析下就能看到socket部分的代码。希望对PBer有用。

 

点击下载:PowerBasci的HTTP服务器源代码

...

More...

blackfeather 2010/7/25 0评论

其他代码

51单片机模拟串口发送与接收

 

最近做的一个项目里需要用到两个串口来完成通信,但是熟悉的51只有一个串口,后来问老师给我的回答竟然是用两个单片机。。。

无语了,于是想尝试使用普通I/O端口模拟串口来通信(微机原理不能白学呀),于是百度了一些资料,有了以下代码。

此代码不是我写的,但是感觉这个代码比较适合新手,有很高的参考价值并且可以直接编译,使用的是传说中的中断法。各位使用的时候注意修改晶振。

 

打包下载: 单片机模拟串口发送与接收代码

...

More...

blackfeather 2010/1/16 0评论

其他代码

PowerBasic的常用函数

 

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评论