在使用OD分析pc版微信接收消息时,发现微信图片消息使用加密方式存储在.dat文件中。
我们可以用二进制编辑器打开
微信图片的加密方式是使用一个特征码按字节做异或运算,每台电脑的特征码可能不一样。我们先要计算特征码。
因为jpg图片头字节是固定的“FF”,所以我们只需要将.dat文件中的第一个字节与“FF”异或运算一下。比如我.dat文件第一个字节是"FD",将"FD"与“FF”异或,等到“02”,“02”即是我的特征码。可以使用windows系统自带的计算器改成程序员模式做异或运算。
获得特征码之后,下面是代码实现:
//需要解密的.dat文件
FILE *fid;
fid = fopen("C:\\Users\\xh\\Documents\\WeChat Files\\znana2019\\FileStorage\\Image\\2019-09\\4333e24f42d200621e46a630f54878f4.dat", "rb");
//写入解密后存储的jpg文件
FILE *fin;
fin = fopen("C:\\Users\\xh\\Documents\\5.jpg", "wb");
//获取文件大小
fseek(fid, 0, SEEK_END);
long lSize = ftell(fid);
rewind(fid);
int num = lSize / sizeof(unsigned char);
//申请内存,用于存储dat文件二进制数据
unsigned char *pos = (unsigned char*)malloc(sizeof(unsigned char)*num);
fread(pos, 1, num, fid);
//特征码,每台电脑不一样
unsigned char fcode = 0x02;
//按字节异或运算
for (int i = 0; i < lSize; i++) {
pos[i] = pos[i]^fcode;
}
//二进制写入,按字节写入
int result = fwrite(pos, 1, num, fin);
if (result != num) {
cout << "写入失败!" << endl;
}
fclose(fin);
fclose(fid);
这个图片好像还是 缩微图 有点蛋疼 ~~~