使用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 相关文章推荐
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
Python脚本实现自动将数据库备份到 Dropbox
Feb 06 Python
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
Python模块WSGI使用详解
Feb 02 Python
利用Python如何批量更新服务器文件
Jul 29 Python
解决Python 使用h5py加载文件,看不到keys()的问题
Feb 08 Python
Django中自定义admin Xadmin的实现代码
Aug 09 Python
python根据文本生成词云图代码实例
Nov 15 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
Dec 04 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
Python爬虫之爬取淘女郎照片示例详解
Jul 28 Python
python 批量将中文名转换为拼音
Feb 07 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下几种删除目录的方法总结
2007/08/19 PHP
PHP异步调用socket实现代码
2012/01/12 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
Vue指令指令大全
2019/02/09 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
Python编程之序列操作实例详解
2017/07/22 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
班组长安全生产职责
2013/12/16 职场文书
费城故事观后感
2015/06/10 职场文书
元宵节晚会主持词
2015/07/01 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书