PC微信会下载图片到本地存储,会为.dat后缀的文件进行加密,保护文件。
通过异或的方法对文件进行简单的加解密的方法很常规的做法。微信将收取到的文件,对每个字节进行异或加密,保存为dat文件。
其中异或的值为反推出来的,需要知道文件类型,才能确定文件的头文件特征,才能反推出异或值,所以这个工具是写死的文件类型为jpg的 ,头文件特征为 FFD8FFE1
异或值=FF^加密文件第一个字节。
1、选择dat文件所在目录 2、输入异或值(自行百度异或值计算方法) 3、解密图片会出现在所选择目录 4、如果出现“图片异或值错误”,请重新计算异或值
打开 WeChatImageDatEncryption.exe ,输入图片的位置按回车即可。
如果你没有修改过位置,原来的位置就是在 %USERPROFILE%\Documents\WeChat Files\你的微信名\data
如果确实不知道在哪里,可以打开微信设置,查看通用设置>打开文件夹,在进入到 Data 目录即可。
解密出来的文件会放在 WeChatImageDatEncryption.exe 同级目录的 Data 文件夹里。
先确定原本的文件类型,就能确定文件的头文件特征,然后查看dat文件的头文件特征,就能反推出异或值。
每个账号或者客户端对那个异或值可能是不一样的,所以不同版本的微信可能就会失效,但是你知道原理之后,就可以自己计算异或值啦~我把源码放出来,你们也可以参考。
//修改图片
//修改图片
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);
})
}
如果不会代码,又有需要的话.
希望这篇文章可以帮助有需要的有缘人,写文不易,如果好用回来给个赞啊!
转载请注明出处: http://sdxlp.cn/article/weixin003.html