wechat微信dat文件通过nodejs恢复为图片

wechat微信dat文件通过nodejs恢复为图片

BUG集散地

2019-06-22 10:26 阅读 810 喜欢 4 dat文件 wechat

第二次更新:中间发现一些图片总是失败,考虑到应该是图片的格式问题,最后兼容了下jpg gif png 这三个格式,基本上能把所有的图片全部转化成功了。(代码已更新)

更新: 先提供一个在线的版本,可以直接批量上传微信dat文件,然后转化成图片,支持批量下载功能。代码可以保证绝不保留任何文件.. 最主要的是,我服务器才40G硬盘,带宽1M,再说我看了也没意义,也没时间捣鼓啊.. 请各位放心使用,不相信的可以去看下源码即可,我是开源的站。 微信dat在线解码,就在顶部demo里可以找到,点我也行。

之前在知乎上有看到,基本上都是一致的,这里提供一个nodejs版本的针对微信内dat文件进行处理恢复为图片的方法。

可以指定某文件夹,然后将图片恢复到另外一个文件夹。

微信的dat文件存在于 wechat files/xxx/filestorage/image/2019-06/ 类似的文件夹内。

需要安装的模块

async 异步处理

代码
//修改图片
//修改图片
let fs = require('fs');
let path = require('path');
let async = require('async');

//值是多少自己算。
let base = 0xFF;
let next = 0xD8;
let gifA = 0x47;
let gifB = 0x49;
let pngA = 0x89;
let pngB = 0x50;

let scanDir = 'd:/ttt/load/';
let imgDir = 'd:/ttt/load1/';

let files = fs.readdirSync(scanDir);
var arr = [];
files.forEach(function(item){
    if(path.extname(item) == '.dat'){
        arr.push(item);
    }
})
async.mapLimit(arr,50,function(item,cb){
    convert(item,cb);
},function(){
    process.exit(0);
})
//convert
function convert(item,cb){
    let absPath =path.join(scanDir,item);
    let imgPath = path.join(imgDir,item+'.jpg');
    fs.readFile(absPath,(err,content)=>{
        if(err){
            console.log(err);
            cb(err);
        }
        let firstV = content[0],
            nextV = content[1],
            jT = firstV ^ base,
            jB = nextV ^ next,
            gT = firstV ^ gifA,
            gB = nextV ^ gifB,
            pT = firstV ^ pngA,
            pB = nextV ^ pngB;
        var v = firstV ^ base;
        if(jT == jB){
            v = jT;
        }else if(gT == gB){
            v = gT;
        }else if(pT == pB){
            v = pT;
        }

        let bb = content.map(br=>{
            return br ^ v
        })
        fs.writeFileSync(imgPath,bb)
        cb(null);
    })
}

以上代码可以直接拿去用的。 通过nodejs 来将微信wechat的缓存的dat图片进行还原,这种情况也可以实现恢复微信中已经撤回的图片。

github

github : https://github.com/chrunlee/wechat_dat_decoder

转载请注明出处: https://chrunlee.cn/article/nodejs-wechat-dat-img.html


如果对你有用的话,请赏给作者一个馒头吧 ...或帮点下页面底部的广告,感谢!!

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
通过node-xlsx模块读取excel和写入
因为自己的记录笔记的应用是有道云,又想着把有道云跟自己的小网站联通起来,所以查找了有道云的,然后实现了nodejs版本的sdk.
使用nodejs 连接mysql数据库还是很简单的,有现成的模块可以直接调用。下面介绍下 mysql 的调用
从豆瓣转到网易云后,发现了不少好听的歌曲,然鹅..当我想把这些歌拿下来扔车上听的时候发现竟然不允许下载..能听不能下?这不科学,作为一名程序猿,必然要迎难而上啊.
在日常开发中,经常会频繁的做一些重复性的操作,作为一名程序员,解放双手的时刻到了
在使用puppeteer 跳转窗口的时候,发现waitForNavigator 并不起作用,最后找到通过browser 获得page 并继续操作。
由于国家的行政区划每年都有变化,所以经常需要更新最新的数据,这里提供一个nodejs版本mysql数据存储的抓取示例。
在我们做运维或者小工具的时候,总会有些需要提醒的事情,比如服务器宕机或者天气提醒,但是发email又会不够及时或者可能会忽略,那么短信就是一个不错的选择了