第二次更新:中间发现一些图片总是失败,考虑到应该是图片的格式问题,最后兼容了下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