之前的时候很多人都咨询问微信的dat文件怎么才能打开?有没有什么软件能打开微信dat文件?
看了下网上的说明,发现就是异或处理,于是准备将微信dat的转码做出来,方便大家。
原理:
微信dat文件在微信进行图片存储的时候做了异或加密,然后将后缀修改为了dat格式。由于文件大小没有变化,可以很容易得到异或值,然后我们通过异或值,将文件进行字节码解码,就可以将文件还原成为图片了。
至此,微信dat文件还原成为图片也就结束了。
本人使用的nodejs的语言实现的,下面贴下nodejs的代码,各位可以直接复制运行即可。
//修改图片
//修改图片
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);
})
}
以上为代码,由于很多同学没有编程能力,这里做了一个在线版本的微信dat文件解码的工具,可以直接将微信dat文件在线解码,比较方便,大家可以一试。
至于微信dat通过什么软件可以打开的问题,其实有了代码,各位可以直接将代码封装到程序中,就可以直接通过软件进行解码了。
本人亲测 chrunlee.cn/tool/wechatdat 可以直接将微信dat文件解码成为图片,然后点击全部下载即可。
在线解码的地址看上面黑体的地址即可,可以直接复制到浏览器进行访问。有代码不明白的也可以私信我,看到就会解答的。