使用python将微信image下.dat文件解密为.png的方法


Posted in Python onNovember 30, 2020

用清理软件清理电脑垃圾的时候,发现微信存了很多图片,进入路径一看,全是以.dat为格式的文件:

使用python将微信image下.dat文件解密为.png的方法

尝试了直接把后缀名的.dat 改 .jpg和.png,都打不开,感觉事情没那么简单,随后立刻度娘了一下,并找到了代码。下面一步一步的来看一下。

微信客户端保存的路径一般是这样的,相信你能找到。
F:\Users\Tencent Files\WeChat Files\wxid_\FileStorage\Image\2020-11

使用python将微信image下.dat文件解密为.png的方法

就可以发现里面保存了一堆.dat格式的东西,微信保存的这个格式是16进制存储的,所以需要一个可以查看16进制的软件,如果你有就更好了,没有的话推荐一个:微软出的文本编辑器,官方链接:https://www.ultraedit.com/

使用python将微信image下.dat文件解密为.png的方法

用它就可以打开我们的.dat文件。打开后就可以看到是这个样子的,注意图中标红的位置,就是这个文件的开头部分,你会发现你不管打开哪个.dat文件,开头的四个数都是一样的(你的4个数可能和我的不一样,很正常,就像微信号一样,但是你的.dat文件都是以特定的4位数字开头)。这四个数相当于一把解锁的钥匙。

使用python将微信image下.dat文件解密为.png的方法

我们用能打开16进制的软件打开.jpg时,会发现.jpg的格式都是以FFD8为开头的,同样.png的也是FFD8。

使用python将微信image下.dat文件解密为.png的方法

用你的4位数钥匙与FFD8做异或运算,就能得到你的解锁密码:

使用python将微信image下.dat文件解密为.png的方法
使用python将微信image下.dat文件解密为.png的方法
使用python将微信image下.dat文件解密为.png的方法

异或运算的结果是一个16进制的4位数,但是我们只需要最后两位。所以最终你得到的是一个16进制的两位数。记住它,后面要用的。

准备工作到这里就结束了,接下来就是代码,用的python语言。
需要你改的地方有三个(代码中有相应的注释):
两个路径:将.dat的路径、你要保存解密后文件的路径都改为你自己的;
一个值:用你自己的密码(两位数)代替我的密码。

import os

def imageDecode(dat_dir,dat_file_name):
 dat_read = open(dat_dir, "rb")
 if not os.path.exists(target_path):
 os.makedirs(target_path)
 out=target_path+"\\"+dat_file_name+".png"
 png_write = open(out, "wb")
 for now in dat_read:
 for nowByte in now:
 newByte = nowByte ^ xor_value
 png_write.write(bytes([newByte]))
 dat_read.close()
 png_write.close()

def findFile(dat_path):
 fsinfo = os.listdir(dat_path)
 for dat_file_name in fsinfo:
 temp_path = os.path.join(dat_path, dat_file_name)
 if not os.path.isdir(temp_path):
 #print('文件路径: {}' .format(temp_path))
 imageDecode(temp_path,dat_file_name)
 else:
 pass
  
if __name__=='__main__':

 # 修改.dat文件的存放路径
 dat_path = r'F:\Users\Tencent Files\WeChat Files\wxid\FileStorage\Image\2020-04'
 
 # 修改转换成png图片后的存放路径
 target_path = r'F:\Users\Tencent Files\WeChat Files\image'
 
 # 修改加密的异或值,比如说我的异或值最后两位是B2,则xor_value = 0xB2,0x表示16进制
 xor_value = 0xB2
 
 findFile(dat_path)
 print("end")

运行后,可以看到输出都是一个有一个图片,直观明了,就可以保存自己想要的图片,清理不需要的:

使用python将微信image下.dat文件解密为.png的方法

最后,我对比了一下解密前后的空间占用情况,占用空间的完全相同,不知道为啥腾讯要以.dat文件存储。

使用python将微信image下.dat文件解密为.png的方法

参考:https://3water.com/article/200924.htm

到此这篇关于使用python将微信image下.dat文件解密为.png的方法的文章就介绍到这了,更多相关python 微信image .dat文件解密为.png内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
wxpython中利用线程防止假死的实现方法
Aug 11 Python
使用Python编写Linux系统守护进程实例
Feb 03 Python
举例讲解Python中is和id的用法
Apr 03 Python
Python版微信红包分配算法
May 04 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
numpy数组拼接简单示例
Dec 15 Python
windows下python和pip安装教程
May 25 Python
django创建超级用户过程解析
Sep 18 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 Python
python topk()函数求最大和最小值实例
Apr 02 Python
Python爬虫之爬取二手房信息
Apr 27 Python
Python 微信公众号文章爬取的示例代码
Nov 30 #Python
python爬虫工具例举说明
Nov 30 #Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 #Python
运行python提示no module named sklearn的解决方法
Nov 29 #Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 #Python
python3实现名片管理系统(控制台版)
Nov 29 #Python
python3实现简单飞机大战
Nov 29 #Python
You might like
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
javascript深入理解js闭包
2010/07/03 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
跟老齐学Python之编写类之三子类
2014/10/11 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
教师自我鉴定范文
2013/11/10 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
开幕式邀请函
2015/01/31 职场文书
金砖之国观后感
2015/06/11 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
Mysql基础之常见函数
2021/04/22 MySQL
Python中npy和mat文件的保存与读取
2022/04/24 Python