使用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 相关文章推荐
python进程管理工具supervisor使用实例
Sep 17 Python
分析在Python中何种情况下需要使用断言
Apr 01 Python
python查看FTP是否能连接成功的方法
Jul 30 Python
python删除列表内容
Aug 04 Python
Python中将dataframe转换为字典的实例
Apr 13 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
Python正则表达式指南 推荐
Oct 09 Python
Python动态语言与鸭子类型详解
Jul 01 Python
基于python进行抽样分布描述及实践详解
Sep 02 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
将keras的h5模型转换为tensorflow的pb模型操作
May 25 Python
一文读懂Python 枚举
Aug 25 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
77A一级收信机修理记
2021/03/02 无线电
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
2015/04/15 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
JS解密入门之凭直觉解
2008/06/25 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
跟老齐学Python之正规地说一句话
2014/09/28 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
计算机操作自荐信
2013/12/07 职场文书
职业生涯规划书范文
2014/03/10 职场文书
我的中国心演讲稿
2014/09/04 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
正规借条模板
2015/05/26 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis
Oracle中日期的使用方法实例
2022/07/07 Oracle