当前位置: 首页 > news >正文

python实现微信聊天图片DAT文件还原

完整代码如下:

from glob import glob
import os
from tqdm import tqdmdef get_sign(dat_r):signatures = [(0x89, 0x50, 0x4e), (0x47, 0x49, 0x46), (0xff, 0xd8, 0xff)]mats = [".png", ".gif", ".jpg"]for now in dat_r:for j, xor in enumerate(signatures):res = [nowByte ^ xor_byte for nowByte,xor_byte in zip(now[:3], xor)]if res[0] == res[1] == res[2]:return res[0], mats[j]else:raise Exception("no valid signature is found")def imageDecode(file, root_path, dest_path=None):dat_r = open(file, "rb")try:sign, mat = get_sign(dat_r)dat_r.seek(0)data = bytes(byte ^ sign for byte in dat_r.read())relative_path = os.path.relpath(file, root_path)if dest_path is None:dest_path = os.path.join(root_path, "CovertImage")dest = os.path.join(dest_path,relative_path.replace(".dat", mat))os.makedirs(os.path.dirname(dest), exist_ok=True)with open(dest, "wb") as write:write.write(data)finally:dat_r.close()def main(into_path, out_path=None):for file in tqdm(glob(os.path.join(into_path, "**", "*.dat"), recursive=True)):imageDecode(file, into_path, out_path)if __name__ == '__main__':into_path = r"D:\tmp\wx_icon_dat"
#     out_path = r"D:\tmp\wx_icon_dat"main(into_path, out_path=None)

支持递归处理,不指定结果文件夹时,结果将写入into_path+"CovertImage"目录下。
还原示例:
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LeetCode 572.另一棵树的子树 C写法
  • Day3-shell脚本编程
  • LLM:flash-attention概述
  • 药明康德:头顶达摩克利斯之剑
  • 从C到Py:Python中的函数
  • 数仓入门:数据分析模型、数仓建模、离线实时数仓、Lambda、Kappa、湖仓一体
  • 相机拍摄如何正确曝光
  • 3个功能强大的PDF转换工具,免费试用
  • 软件系统架构设计的“三高”
  • ORA-00911: invalid character
  • 动手学大模型应用开发笔记--用dash开发一个大模型知识库
  • 网络空间资产测绘:为安全防护“画出”实时“地图”
  • SPIFFS与LittleFS的对gz文件格式的区别
  • 静态IP代理和动态IP代理的区别
  • 使用ollama分别在我的window、mac、小米手机上部署体验llama3-8b(文末有福利)
  • 4个实用的微服务测试策略
  • Docker: 容器互访的三种方式
  • HTTP那些事
  • IDEA常用插件整理
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • NSTimer学习笔记
  • Python_OOP
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 程序员最讨厌的9句话,你可有补充?
  • 对象引论
  • 关于springcloud Gateway中的限流
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 技术发展面试
  • 前端路由实现-history
  • 前端设计模式
  • 前端相关框架总和
  • 使用 @font-face
  • 听说你叫Java(二)–Servlet请求
  • linux 淘宝开源监控工具tsar
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​iOS实时查看App运行日志
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #android不同版本废弃api,新api。
  • #VERDI# 关于如何查看FSM状态机的方法
  • $(function(){})与(function($){....})(jQuery)的区别
  • $.ajax()
  • (13)DroneCAN 适配器节点(一)
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)Dubbo快速入门、介绍、使用
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET业务框架的构建
  • .so文件(linux系统)
  • @property python知乎_Python3基础之:property
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [AI 大模型] 百度 文心一言