吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14657|回复: 207
上一主题 下一主题
收起左侧

[Windows] 自己动手写个微信DAT文件解密工具

    [复制链接]
跳转到指定楼层
楼主
xue5hen 发表于 2022-11-17 22:07 回帖奖励
【原理简介】
  • 首先,微信DAT文件是将图片数据的每个字节经过和密钥做异或运算来得到的。
  • 异或运算法则:如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
  • 异或运算有个可交换的特点,即:如果a和b异或运算后得到了c,那么在a、b、c三者中,任意两者进行异或运算会得到它们中的第三者。


  基于上面三条来梳理一下工具编写的前提条件,就变成了下面表格描述的这样。问题变得简单了,我们只需要通过循环,将图片的文件头数据的第1、2字节与DAT数据的第1、2字节相应做异或运算,那么就可以得到两个值,如果这两个值相等,那么就是我们要找的密码。然后用得到的密码与DAT的所有字节做异或运算,便可以还原出原始的图片文件。
图片
密码
DAT

可有限枚举,已知文件头数据

jpg: [0xFF, 0xD8, 0xFF]

png: [0x89, 0x50, 0x4E]

gif: [0x47, 0x49, 0x46]

...
未知
已知

   
【工具编写】
  基于上述原理,代码实现起来并不难。我用JS写了两个版本,一个Electron版本的,一个是Web版本的。相对而言,Electron打包后体积较大,对于一个功能单一的小工具来讲太鸡肋;而Web版本比较轻量,而且可以挂到网上,随时随地方便地使用,性价比更优。
  如下图所示,工具的界面设计比较简单,Web版本只有一个主区域,可以将DAT文件拖拽进去还原出图片,因为文件头枚举数量很少,所以速度很快,基本是瞬间的;下方设置了两个按钮“全部删除”和“全部下载”,可以快速清空主体区域和下载所有还原出来的图片。


  代码逻辑并不复杂,这里贴两处比较关键的代码片段(Web版),文后会附上Web版的下载地址,另外也做了个视频(两个版本的工具展示+代码解释),可以视自己口味选择下载和观看。
  
[JavaScript] 纯文本查看 复制代码
// 拖拽添加文件drop (e) {
  const fileList = e.dataTransfer.files
  if (!fileList) return
  // 取文件后缀名,必须是dat文件
  let taskList = []
  let indexList = []
  for (let i = 0; i < fileList.length; i++) {
    const file = fileList[i]
    if (!/.dat$/i.test(file.name)) {
      return this.$toast('请选择DAT文件!')
    }
    let fStat = fs.statSync(file.path)
    if (fStat.isDirectory()) {
      return this.$toast('请选择DAT文件!')
    }
    taskList.push(this.getFileInfo(file.path))
    indexList.push(i)
  }
  Promise.all(taskList).then((infos) => {
    if (!infos || !infos.length) return
    infos.forEach((v, i) => {
      let file = fileList[indexList[i]]
      this.filesList.push({
        name: file.name, path: file.path, size: file.size, ...v
      })
    })
  })
}

  
[JavaScript] 纯文本查看 复制代码
// 获取单个文件的信息(包括密码和数据解密)getFileInfo (filePath) {
  let result = {name: '', type: '未知', password: '', data: '', url: ''}
  let _arr = path.basename(filePath).split('.')
  result.name = _arr.slice(0, _arr.length - 1).join('.')
  return new Promise((resolve, reject) => {
    if (!fs.existsSync(filePath)) {
      reject('文件不存在')
    }
    fs.readFile(filePath, (err, data) => {
      if (err || !data) reject('读取文件错误')
      result.data = data
      for (let key in this.fileHeaderMarks) {
        let val = this.fileHeaderMarks[key] || []
        let pwd1 = (val[0] || 0) ^ data[0]
        let pwd2 = (val[1] || 0) ^ data[1]
        if (pwd1 === pwd2) {
          result.type = key
          result.password = pwd1
          break
        }
      }
      if (result.password) {
        let mimeType = this.fileMimeType[result.type] || `image/${result.type}`
        result.data = result.data.map(v => (v ^ result.password))
        result.url = `data:${mimeType};base64,${result.data.toString('base64')}`
      }
      resolve(result)
    })
  })
}

  视频展示:https://www.bilibili.com/video/BV1f841187tm/
  Web版工具源码:https://pan.baidu.com/s/1_KIqd0h_3T2vcR87GlUJYg?pwd=3m4h 提取码: 3m4h

免费评分

参与人数 32吾爱币 +30 热心值 +29 收起 理由
qike521 + 1 谢谢@Thanks!
sqdwmr + 1 + 1 我很赞同!
冬天冷了多穿点 + 1 我很赞同!
bodapanxu + 1 + 1 我很赞同!
帅气的小莲 + 1 + 1 谢谢@Thanks!
JadenZh + 1 nice,真香
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yuleuncle + 1 谢谢@Thanks!
xiaoweng + 1 + 1 用心讨论,共获提升!
52netgold + 1 我很赞同!
lichenhaov + 1 热心回复!
anenanen + 1 + 1 谢谢@Thanks!
hiplease + 1 + 1 热心回复!
PeterWu + 1 如果能解密聊天记录就牛了
fatcats + 1 + 1 牛啊
WM715 + 1 + 1 谢谢@Thanks!
LightswornSnow + 1 + 1 用心讨论,共获提升!
VIP中P + 1 + 1 谢谢@Thanks!
lgc81034 + 1 谢谢@Thanks!
laobai6866 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 + 1 谢谢@Thanks!
axin0529 + 1 + 1 热心回复!
blywq + 1 + 1 谢谢@Thanks!
Thefirst1 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
sgyz520 + 1 + 1 我很赞同!
long8586 + 1 + 1 谢谢@Thanks!
menoooooos + 1 + 1 谢谢@Thanks!
wapj152321 + 1 + 1 支持源码
Patches + 1 + 1 用心讨论,共获提升!
诗木 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
GaryGan01 + 1 我很赞同!
已经好晕了 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
已经好晕了 发表于 2022-11-18 11:40
思路清晰,出个聊天记录版吧大佬
推荐
 楼主| xue5hen 发表于 2022-11-18 20:54 |楼主
nuxingxp 发表于 2022-11-18 20:19
楼主,达到您的水平,得学哪些课程?

前端开发相关的课程:html、css、js、jQuery、vue全家桶(或React)、nodejs、electron这些
推荐
wxq_hz 发表于 2022-11-18 12:22
推荐
Q17 发表于 2022-11-18 12:49
估计出个聊天记录会更火
3#
baohe 发表于 2022-11-18 11:54
看不懂多多学习谢谢
4#
shf8799 发表于 2022-11-18 12:12
暂时还看不明白,努力!
5#
chen0jay 发表于 2022-11-18 12:17
大佬大佬
7#
Michael_Yang 发表于 2022-11-18 12:34
请收下膝盖
8#
faith9527 发表于 2022-11-18 12:42
学习学习,谢谢楼主
10#
诗木 发表于 2022-11-18 12:52
好强,感谢大佬分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 00:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表