最近在整理磁盘文件,因为经过一段时间的蹂躏后,磁盘实在是太多东西了,不整理一下,简直对不住我的SSD好嘛。偶然发现磁盘中某公司的文件夹占用空间简直不能再大,那可是我的C盘啊,合计才119GB的SSD空间,你给我占了差不多10个G,说的就是你Tencent。

但是也不能怪人家,毕竟人家只是负责将数据保存下来方便给我们展示而已。所以,就冒着好奇的心,看看文件夹里面有什么。因为这次的主题说的是Dat文件的解密,我就不扯那么远。 大家假装知道我点完文件夹,看到很多历史图片缓存图片众多*.db就好了哈。(PS:不得不提的是腾讯将近给我缓存了6个G的表情包,未来可以收集这个内容做一个随机表情包网页出来乐呵乐呵呀。咳咳这些都是后话啦)
然后我们便来到了微信PC版的文件夹,找到自己的账号所在文件夹。比如我的是CBR-1997。找到后,如下所示

这个时候,我便猜测,这些dat文件都是什么内容呢?聊天内容?不可能呀,聊天内容这么机密,肯定是放到db里面加密处理的。聊天文件?也不至于有1700+个文件吧。所以,综上,猜测这些个dat文件都是一些聊天时接收到的“表情包”或者“图片”。嗯,平时那些群聊斗图这么凶,估计没错了的。

接下来,尝试直接改后缀试试。不出意外的得到了“图片错误”,我就知道不会这么简单。。。

那接下来怎么办嘛。思来想去,便想着拿16进制编辑器看一下下,里面数据长啥样。打开了多个文件看到里面文件头是8A AD ,但是一般jpg文件的文件头为FF D8 开头的。又记得之前看过说文通过异或对文件进行简单的加解密的很常规的做法。所以,打开计算器。一顿操作猛如虎,哈哈哈,结果一看没错辽,

将计算器调整到程序员模式,然后使用FFD8与8AAD进行异或处理。结果为7575,显然可以知道,这个dat就是微信将收取到的文件对吗,每个字节进行异或0x75进行加密,保存为dat文件。
这个时候,只要用Python写个脚本,不就可以轻松解码了嘛。 来来来,代码写起来。
# -*- coding: utf-8 -*-
# @Time : 3/27/2019 21:54
# @Author : MARX·CBR
# @File : 微信Dat文件转图片.py import os import os out_path=r"D:\\" def imageDecode(f,fn):
dat_read = open(f, "rb")
# out='P:\\'+fn+".png"
out=out_path+fn+".png"
png_write = open(out, "wb")
for now in dat_read:
for nowByte in now:
newByte = nowByte ^ 0x33
png_write.write(bytes([newByte]))
dat_read.close()
png_write.close() def findFile(f):
fsinfo = os.listdir(f)
for fn in fsinfo:
temp_path = os.path.join(f, fn)
if not os.path.isdir(temp_path):
print('文件路径: {}' .format(temp_path))
print(fn)
imageDecode(temp_path,fn)
else:
... # path = r'C:\Users\输入自己微信存储路径\Data'
# findFile(path) # path = r'E:\\'
findFile(path)

  

跑出来的结果如下图,没错吧,以往的表情包,发过收过的图片都出现在了里面。
至此微信dat文件的复原解码到此就完成了。补充一下,每个账号或者客户端对那个异或值都是不一样的,所以,小伙伴们如果需要还原dat文件的话,还是要自己用计算器异或处理一波哦。看看这个值是多少哈。

本文对你有没帮助呀,喜欢的话,记得留言、点赞、转发、收藏哟。谢谢各位!


欢迎扫码关注我的微信公众号:叙之亭

微信Dat文件解码的更多相关文章

  1. 微信DAT文件转JPG图片(图片恢复)

    微信电脑版现在已经是日常工作生活必不可少的工具,有时候删除了聊天记录或者被系统清理软件清理了,但还想查看曾经的微信聊天图片. 这个时候辛辛苦苦找到了文件,却发现无法查看,因为微信电脑版为了保护我们的隐 ...

  2. 微信DAT文件解密(dat转图像)

    微信电脑版现在已经是日常工作生活必不可少的工具,有时候删除了聊天记录或者被系统清理软件清理了,但还想查看曾经的微信聊天图片. 这个时候辛辛苦苦找到了文件,却发现无法查看,因为微信电脑版为了保护我们的隐 ...

  3. 微信电脑版DAT文件转图片工具

    一键批量将微信聊天接受到的加密存储DAT图片文件转化为普通图片. 通过查看转化后的图片,您可以: (1)清理无用的历史图片,节省电脑硬盘存储空间. (2)恢复寻找重要照片资料. 下载地址:点此下载 微 ...

  4. 将.dat文件导入数据库

    *最近在搞文本分类,就是把一批文章分成[军事].[娱乐].[政治]等等. 但是这个先需要一些样本进行训练,感觉文本分类和"按图索骥"差不多,训练的文章样本就是"图&quo ...

  5. 用SQLSERVER里的bcp命令或者bulkinsert命令也可以把dat文件导入数据表

    用SQLSERVER里的bcp命令或者bulkinsert命令也可以把dat文件导入数据表 下面的内容的实验环境我是在SQLSERVER2005上面做的 之前在园子里看到两篇文章<C# 读取纯真 ...

  6. dat文件中如何编写DOS的多行命令

    dat文件中如何编写DOS的多行命令 2012-10-15 11:29 四海柔情108 分享到:   2012-10-16 23:36 提问者采纳   你问的应该是BAT文件吧?BAT是DOS命令的批 ...

  7. FPGA笔记-读取.dat文件

    读取.dat图像文件 .dat文件是matlab生成的图像文件 initial begin // Initialize Inputs CLK = 0; RST = 1; IMAGE_DATA = 0; ...

  8. DAT文件怎样打开

    DAT文件类型主要是"数据"文件.能够是不论什么内容,比方:文字,图形,视频或一般的二进制数据,它并没有统一详细的结构.所以您不能理解它也相应一个用来打开它的应用程序.比方你看到一 ...

  9. FPGA笔记-阅读.dat文件

    阅读.dat图像文件 .dat文件是matlab生成的图像文件 initial begin // Initialize Inputs CLK = 0; RST = 1; IMAGE_DATA = 0; ...

随机推荐

  1. Java-API-Package:javax.annotation

    ylbtech-Java-API-Package:javax.annotation 1.返回顶部 1. Package javax.annotation Enum Summary Resource.A ...

  2. SQL 从身份证号得到出生日期、年龄、男女

    ), CONVERT(smalldatetime, SUBSTRING(b.IDCard, , )), ) AS BrithDate_Name, DATEDIFF(year, CONVERT(smal ...

  3. Android 4学习(1):学习路线图

    学习路线图 如下图所示,整个Android的架构可以分为四层,五个部分.我给自己制定的学习路线图是这样的: 对于有java基础的入门级android开发者而言,首先要学会使用Application F ...

  4. #pragma execution_character_set("utf-8")

    VC2010增加了“#pragma execution_character_set("utf-8")”,指示char的执行字符集是UTF-8编码. VS2010 设置 字符编码: ...

  5. C#高级参数params的使用

    params,可变参数,使用十分简单,看代码吧. using System; using System.Collections.Generic; using System.Linq; using Sy ...

  6. 2.2.3 Analyzing the output 分析对用户推荐书目的结果(2)

    2.2.3 Analyzing the output   在之前的程序运行结果中我们得到的结果输出是: RecommendedItem [item:104, value:4.257081]   程序要 ...

  7. cocos2d中setBlendFunc设置颜色混合方案

    CCSprite有一个ccBlendFunc类型的blendFunc_结构体成员,可以用来设置描绘时的颜色混合方案.ccBlendFunc包含了一个src和一个dst,分别表示源和目标的运算因子. 如 ...

  8. 杭电acm 1038题

    本题比较简单,但是需要掌握几个小技巧,先上代码 /************************************* 杭电ACM 1038题,已AC ********************* ...

  9. ZROI2018提高day3t2

    传送门 分析 我们设A[i]表示点i有几个矿,B[i]表示这之中有几个矿是第一次出现,所以点i的贡献即为 (2^B[i]-1)*(2^(A[i]-B[i])) 注意减一的原因是第一次出现的矿应至少有一 ...

  10. java快排(两种方法)

    快排是最基础的排序算法之一,今天来回顾一下. public class QuickSort { public static void quickSort(int[] array){ if(array ...