使用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 相关文章推荐
python3图片转换二进制存入mysql
Dec 06 Python
python根据出生日期获得年龄的方法
Mar 31 Python
python框架django基础指南
Sep 08 Python
python计算auc指标实例
Jul 13 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
python使用Qt界面以及逻辑实现方法
Jul 10 Python
利用Python检测URL状态
Jul 31 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
python基本算法之实现归并排序(Merge sort)
Sep 01 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 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
层叠菜单的动态生成
2006/10/09 PHP
PHP新手上路(八)
2006/10/09 PHP
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
Javascript中的变量使用说明
2010/05/18 Javascript
无阻塞加载脚本分析[全]
2011/01/20 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
python序列类型种类详解
2020/02/26 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
百联网上商城:i百联
2017/01/28 全球购物
写出一个方法实现冒泡排序
2016/07/08 面试题
护士求职信
2014/07/05 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
环境建议书
2015/02/04 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
HDFS免重启挂载新磁盘
2022/04/06 Servers