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

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

月光魔力鸭

2019-06-22 10:26 阅读 19527 喜欢 21 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图片进行还原,这种情况也可以实现恢复微信中已经撤回的图片。

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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
使用nodejs 连接mysql数据库还是很简单的,有现成的模块可以直接调用。下面介绍下 mysql 的调用
今天想在服务器上跑下自己自动签到的程序,需要安装puppeteer ,结果出错。 permission denied, mkdir '/root/.nvm/versions/node/v9.11.1/lib/node_modules/
最近一直在围绕着我的小电脑在转,基本都是这方面的问题。在没有公网IP的情况下,这个问题就是我怎么才能通过域名访问到我家中的服务器。
我们项目一直在使用puppeteer 生成pdf ,整体的思路是没有问题的,而且在开发环境运行了好久了,但是部署后总会有各种各样的报错。各种so文件找不到等等 。
分享一个自动抓取静态站资源的小工具,可以在抓取某个静态站点的时候方便很多,尤其是如果页面比较多的话,会很难受,而且会自动将资源进行归类,如果一个页面一个页面的保存的话,那就比较费劲了。
在使用marked来做md解析的时候,部分解析规则可能并不是很如意,比如说,我在md中写了a标签,但是这些标签都是在当前页面替换的,而我想要的是新打开窗口。
近期有个小工具,需要使用到本地数据库,想使用sqlite ,本来以为是个手到擒来的活... 没成想卡在了开始上。
客户有一批音频需要处理成视频,最好是带有图片,于是就有了下文。