使用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程序添加图形化界面的教程
Apr 29 Python
基python实现多线程网页爬虫
Sep 06 Python
python中类变量与成员变量的使用注意点总结
Apr 29 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
python2.7到3.x迁移指南
Feb 01 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
python3.x实现发送邮件功能
May 22 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 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
模仿OSO的论坛(二)
2006/10/09 PHP
PHP COOKIE设置为浏览器进程
2009/06/21 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
在Django中限制已登录用户的访问的方法
2015/07/23 Python
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
Python流程控制 if else实现解析
2019/09/02 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
毕业生自我鉴定
2013/11/05 职场文书
秘书岗位职责
2013/11/18 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
保护环境倡议书500字
2014/05/19 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
医学检验专业自荐信
2014/09/18 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
浅谈JS的原型和原型链
2021/06/04 Javascript