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