当前位置:   article > 正文

电脑端微信用户图片DAT格式解码为图片_电脑端微信用户图片dat格式解码为图片 csdn

电脑端微信用户图片dat格式解码为图片 csdn

 电脑硬盘空间被大量占用发现是微信自己账号下的Image文件夹引起的,因不清楚里面的图片有些是否有用。想逐一整理清理。

 

 进去后发现都是dat格式,无法打开。修改后缀后仍无法打开,被加密了。

 二进制方式打开文件后发现是这样的规律。通过异或运算加密了。

  1. jpg:
  2. ff d8 ff e0 20 10 4a 46 49 46 20 01 01
  3. 加密后:
  4. 17 30 17 08 e8 f8 a2 ae a1 ae e8 e9 e9
  5. png:
  6. 89 50 4e 47 0d 0a 1a 0a 20 20 20 0d
  7. 加密后:
  8. 61 b8 a6 af e5 e2 f2 e2 e8 e8 e8 e5

 解码代码如下(批量操作):

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 功能:电脑端微信用户图片DAT格式转化为图片
  5. 环境:python3.7
  6. 日期:2019/12/31 22:28
  7. 作者:指尖魔法师
  8. 版本:1.0
  9. """
  10. import os
  11. def main():
  12. indir = r'G:\wx\2019-06'
  13. outdir = r'G:\wx\out2019-06'
  14. # 获取文件夹下所有文件
  15. infiles = os.listdir(indir)
  16. # 计数成功的文件个数
  17. count = 0
  18. # 循环每个文件进行判断、转换
  19. for infile in infiles:
  20. # 获取文件名
  21. filename = infile[0:infile.find('.')]
  22. # 二进制读取文件
  23. f1 = open(os.path.join(indir, infile), 'rb')
  24. infilebytes = f1.read()
  25. newfile = []
  26. # 判断图片类型JPG,通过异或判定
  27. if (infilebytes[0] ^ 0xFF) == (infilebytes[1] ^ 0xD8):
  28. y1 = infilebytes[0] ^ 0xFF
  29. print('%s,文件是JPG图片,每个字节是根据0x%X异或进行加密' % (infile, y1))
  30. # 字节进行异或转换,组合成新的文件
  31. for i in infilebytes:
  32. newbyte = i ^ y1
  33. newfile.append(newbyte)
  34. newfile2 = bytes(newfile)
  35. # 写入新文件
  36. f2 = open(os.path.join(outdir, filename+'.jpg'), 'wb')
  37. f2.write(newfile2)
  38. count += 1
  39. # 判断图片类型PNG,通过异或判定
  40. elif (infilebytes[0] ^ 0x89) == (infilebytes[1] ^ 0x50):
  41. y1 = infilebytes[0] ^ 0x89
  42. print('%s,文件是PNG图片,每个字节是根据0x%X异或进行加密' % (infile, y1))
  43. for i in infilebytes:
  44. newbyte = i ^ y1
  45. newfile.append(newbyte)
  46. newfile2 = bytes(newfile)
  47. f2 = open(os.path.join(outdir, filename+'.png'), 'wb')
  48. f2.write(newfile2)
  49. count += 1
  50. # 判断图片类型GIF,通过异或判定
  51. elif (infilebytes[0] ^ 0x47) == (infilebytes[1] ^ 0x49):
  52. y1 = infilebytes[0] ^ 0x47
  53. print('%s,文件是GIF图片,每个字节是根据0x%X异或进行加密' % (infile, y1))
  54. for i in infilebytes:
  55. newbyte = i ^ y1
  56. newfile.append(newbyte)
  57. newfile2 = bytes(newfile)
  58. f2 = open(os.path.join(outdir, filename+'.gif'), 'wb')
  59. f2.write(newfile2)
  60. count += 1
  61. else:
  62. print('%s无法识别的类型!' % infile)
  63. print('识别出图片%d张' % count)
  64. if __name__ == '__main__':
  65. main()

运行结果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/85098
推荐阅读
相关标签
  

闽ICP备14008679号