/ example / 1-decrypt.py
1-decrypt.py
 1  #!/usr/bin/env python
 2  # -*- coding: utf-8 -*-
 3  
 4  """
 5  @Time        : 2025/3/11 20:27
 6  @Author      : SiYuan
 7  @Email       : 863909694@qq.com
 8  @File        : wxManager-1-decrypt.py
 9  @Description :
10  """
11  
12  import json
13  import os
14  from multiprocessing import freeze_support
15  
16  from wxManager import Me
17  from wxManager.decrypt import get_info_v4, get_info_v3
18  from wxManager.decrypt.decrypt_dat import get_decode_code_v4
19  from wxManager.decrypt import decrypt_v4, decrypt_v3
20  
21  
22  def dump_v3():
23      """
24      解析微信3.x版本的数据库
25      """
26      version_list_path = '../wxManager/decrypt/version_list.json'
27      with open(version_list_path, "r", encoding="utf-8") as f:
28          version_list = json.loads(f.read())
29      r_3 = get_info_v3(version_list)  # 微信3.x
30      for wx_info in r_3:
31          print(wx_info)
32          me = Me()
33          me.wx_dir = wx_info.wx_dir
34          me.wxid = wx_info.wxid
35          me.name = wx_info.nick_name
36          info_data = me.to_json()
37          output_dir = wx_info.wxid
38          key = wx_info.key
39          if not key:
40              print('error! 未找到key,请重启微信后再试')
41              continue
42          wx_dir = wx_info.wx_dir
43          decrypt_v3.decrypt_db_files(key, src_dir=wx_dir, dest_dir=output_dir)
44          # 导出的数据库在 output_dir/Msg 文件夹下,后面会用到
45          with open(os.path.join(output_dir, 'Msg', 'info.json'), 'w', encoding='utf-8') as f:
46              json.dump(info_data, f, ensure_ascii=False, indent=4)
47          print(f'数据库解析成功,在{os.path.join(output_dir, "Msg")}路径下')
48  
49  
50  def dump_v4():
51      """
52      解析微信4.0版本的数据库
53      """
54      r_4 = get_info_v4()  # 微信4.0
55      for wx_info in r_4:
56          print(wx_info)
57          me = Me()
58          me.wx_dir = wx_info.wx_dir
59          me.wxid = wx_info.wxid
60          me.name = wx_info.nick_name
61          me.xor_key = get_decode_code_v4(wx_info.wx_dir)
62          info_data = me.to_json()
63          output_dir = wx_info.wxid  # 数据库输出文件夹
64          key = wx_info.key
65          if not key:
66              print('error! 未找到key,请重启微信后再试')
67              continue
68          wx_dir = wx_info.wx_dir
69          decrypt_v4.decrypt_db_files(key, src_dir=wx_dir, dest_dir=output_dir)
70          # 导出的数据库在 output_dir/db_storage 文件夹下,后面会用到
71          with open(os.path.join(output_dir, 'db_storage', 'info.json'), 'w', encoding='utf-8') as f:
72              json.dump(info_data, f, ensure_ascii=False, indent=4)
73          print(f'数据库解析成功,在{os.path.join(output_dir, "Msg")}路径下')
74  
75  
76  if __name__ == '__main__':
77      freeze_support()  # 使用多进程必须
78      # 根据自己的微信版本选择使用对应的函数
79      dump_v3()  # 微信3.x
80      # dump_v4() # 微信4.0