腾格里

程序员交流学习的网站
站长QQ:540329378

c++实现pc端微信图片解密

在使用OD分析pc版微信接收消息时,发现微信图片消息使用加密方式存储在.dat文件中。

od.JPG

我们可以用二进制编辑器打开
1.JPG

微信图片的加密方式是使用一个特征码按字节做异或运算,每台电脑的特征码可能不一样。我们先要计算特征码。
因为jpg图片头字节是固定的“FF”,所以我们只需要将.dat文件中的第一个字节与“FF”异或运算一下。比如我.dat文件第一个字节是"FD",将"FD"与“FF”异或,等到“02”,“02”即是我的特征码。可以使用windows系统自带的计算器改成程序员模式做异或运算。
soogif.gif

获得特征码之后,下面是代码实现:

//需要解密的.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);
未经允许不得转载:腾格里 » c++实现pc端微信图片解密

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. 这个图片好像还是 缩微图 有点蛋疼 ~~~

    冷月无风 (2019-10-23) 回复