console.time('完成,耗时');
var fs = require('fs');
var xor = 'a4a4a4a4a4';
xor = hexToBin(xor);
var dataPath = './0c9a14c9d42da570d3ea13466be20608.dat';
var resPath = './res.';
var xorLen = 2;
fs.readFile(dataPath, { encoding: 'hex' }, function (err, data ) {
if (err) {
console.log(err);
} else {
var res = handleEncrypted(data, xor);
var extension = getNameExtension(res.substring(0,4));
var hex = Buffer.from(res, 'hex');
fs.writeFile(resPath + extension, hex, function (err) {
if (err) {
console.log('出错:', err);
console.timeEnd('完成,耗时');
function handleEncrypted(strEncrypted) {
let strLength = strEncrypted.length;
var source = '';
var list = [];
for (var i = 0; i < strLength; i = i + xorLen) {
var str = strEncrypted.substring(0, xorLen);
strEncrypted = strEncrypted.substring(xorLen);
var res = getResult(str);
list.push(res);
source = list.join('');
return source;
function getXor(str) {
xor = 'ffd8';
xor = getResult(str);
return;
function getNameExtension(hex) {
var str = hex.substring(0, 4);
var res = dataHead.find(function (item) {
return item.hex === hex;
}).name
return res;
function hexToBin(str) {
let hex_array = [{ hex: '0', bin: "0000" }, { hex: '1', bin: "0001" }, { hex: '2', bin: "0010" }, { hex: '3', bin: "0011" }, { hex: '4', bin: "0100" }, { hex: '5', bin: "0101" }, { hex: '6', bin: "0110" }, { hex: '7', bin: "0111" },
{ hex: '8', bin: "1000" }, { hex: '9', bin: "1001" }, { hex: 'a', bin: "1010" }, { hex: 'b', bin: "1011" }, { hex: 'c', bin: "1100" }, { hex: 'd', bin: "1101" }, { hex: 'e', bin: "1110" }, { hex: 'f', bin: "1111" }];
let value = "";
for (let i = 0; i < str.length; i++) {
value += hex_array.find(function (item) {
return item.hex == str[i];
}).bin;
return value;
function binToHex(str) {
let hex_array = [{ hex: '0', bin: "0000" }, { hex: '1', bin: "0001" }, { hex: '2', bin: "0010" }, { hex: '3', bin: "0011" }, { hex: '4', bin: "0100" }, { hex: '5', bin: "0101" }, { hex: '6', bin: "0110" }, { hex: '7', bin: "0111" },
{ hex: '8', bin: "1000" }, { hex: '9', bin: "1001" }, { hex: 'a', bin: "1010" }, { hex: 'b', bin: "1011" }, { hex: 'c', bin: "1100" }, { hex: 'd', bin: "1101" }, { hex: 'e', bin: "1110" }, { hex: 'f', bin: "1111" }];
let value = '';
let list = [];
while (str.length > 4) {
list.push(str.substring(0, 4));
str = str.substring(4);
list.push(str);
for (let i = 0; i < list.length; i++) {
value += hex_array.find(function (item) {
return item.bin == list[i];
}).hex;
return value;
function getResult(a) {
let A = hexToBin(a);
let B = xor;
let d = "";
for (let i = 0; i < A.length; i++) {
if (A[i] === B[i]) {
d = d.concat('0');
} else {
d = d.concat('1');
return binToHex(d);
var dataHead = [
name: 'jpg',
hex: 'ffd8'
name: 'png',
hex: '8950'
name: 'gif',
hex: '4749'
代码其实写的并不是很好,很多地方并没有做优化,还有批量处理这个还没实现,等有空了会更新博客,如果可能的话还会打包成exe文件。
js的parseDate与操作系统和浏览器相关,会失败。
采用默认的yyyy/MM/dd来进行,兼容常见的所有浏览器,所以如果项目允许的话,可以定义输入框中的日期格统一为yyyy/MM/dd
长期使用后,非常消耗电脑的空间,导致电脑越来越卡,建议删除里面没用的垃圾文件和图片文件。这些可以选择性删除,虽然删除这些文件并不会影响微信的正常使用,但是如果需保留微信的聊天记录,重要的图片、资料则不要删除。微信dat文件是电脑上微信聊天记录数据文件,可以选择删除,但需要注意,若是文件内有重要的数据(聊天记录、文件),需要及时进行保存,或者选择不删除,以免出现不必要的麻烦。如下图所示,点击成功后面的红色的小文件夹图标,就可以打开转换后的文件夹了哦。提示:您也可以拖放微信dat文件夹哦,操作也是一样的呢。
使用Date对象
支持脚本的浏览器含一个全局Date对象(事实上,每个窗口都有一个Date对象),这个对象总是存在的,随时随地都可被调用。Date对象是一个静态对 象,当需要处理日期时,可以调用Date对象的构造函数,获取一个与特定事件和日期关联的Date对象实体。如果不带参数调用这个构造函数,格式如下:
var today=new Date();
Date对象取得了PC内部时钟的一个快照,
最近用户越来越多,每天用户行为数据也原来越大,虽然每天写一个文件,但是对于上M的文件,node.js的fs.readFiles是扛不住的,会报错,因为v8引擎的内存是有限制的,readFiles会一下子把整个文件加载进内存里面来,当然会越界。幸好nodejs提供了fs.ReadStream,我们一块块(默认64k,可以自己设置,具体参考官方文档)读取文件数据,内存就不会爆掉。我们需要一行一行的分析...
这个不是完整版,请不要下载了。
上次在CSDN下载了一个类似的功能的源码,发现源码不全,根本无法执行,没有学习价值,于是我又多方查资料,最终成功了,应该在CSDN上易语言这种源码完整的就独此一份了吧。希望对大家有用。我也混几个积分好下载我眼馋的源码和资源。^_^
运行后将微信“FileStorage\Image\”下的DAT格式的缓存批量拖入到程序窗口,即可批量异或解密这些图片缓存,速度还可以。这个源码绝对可用。
解密的密码,源码里面是15,你可以搜索15,然后替换成你的密码,各微信的都不一样,之前忘了做自动识别图片个格式和密码了,今天已经做好了,但不想上传了。很简单,大家自己摸索一下就会了,这样才能理解更深刻。
微信dat文件批量解密—PHP版
演示地址:https://tool.kongning.top/datdecode/
php版本下载:https://download.csdn.net/download/qq_34792050/81459999
HTML5提供了一套文件系统的API,可以操作本地的文件。
最近的需求是要读取本地的一个DAT文件。所以特此记录一下。
关于读取本地文件的方式,可以参考文章:http://www.voidcn.com/article/p-ajsiagvh-gr.html
这里我主要想说的是,读取里面8个字节的double类型数据。
var selectedFile = document.get
一键批量将微信聊天接受到的加密存储DAT图片文件转化为普通图片。通过查看转化后的图片,您可以:(1)清理无用的历史图片,节省电脑硬盘存储空间。(2)恢复寻找重要照片资料。
解码解密微信电脑版image文件夹下缓存的用户图片?
在检查微信缓存中“FileStorage”文件夹时发现了其目录下的“Image”文件夹,想到可能是使用过程中缓存的聊天图片等,但是打开文件夹发现都是dat文件,用图片浏览器打开也提示无法查看。
D:\Documents\Tencent\WeChat Files\wxid_xxxxxx\FileStorage\Image\2021-07
想到可能是进行了加密处理,便去网上查了一下资料,现在把解密过程描述如下。
需要的工具:Python 16进制编辑
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Doc
var tree = document.getElementById("tree");
//getAttribute()取值属性
console.log(tree.getAttribute("data-leaves"));
console.log(tree.getAttribute("data-plant-height"));
//setAttribute()赋值属性
tree.setA
之前的时候很多人都咨询问微信的dat文件怎么才能打开?有没有什么软件能打开微信dat文件?
看了下网上的说明,发现就是异或处理,于是准备将微信dat的转码做出来,方便大家。
微信dat文件在微信进行图片存储的时候做了异或加密,然后将后缀修改为了dat格式。由于文件大小没有变化,可以很容易得到异或值,然后我们通过异或值,将文件进行字节码解码,就可以将文件还原成为图片了。
至此,微信dat文件还原成为图片也就结束了。
本人使用的nodejs的语言实现的,下面贴下nodejs的代码,各位可以