写在前面
最近,微信中加的群有点多,信息根本看不过来。如果不看,怕遗漏了有价值的信息;如果一条条向上翻阅,实在是太麻烦。
有没有办法一键导出所有聊天记录?
一来翻阅更方便一点,二来还可以让 AI 帮我总结一下,避免遗漏有价值的内容。
网上翻阅了很多资料,完全有效的不多,而且很多工具都需要收费。
最终找到一个开源项目(传送门),本文将参考这个项目,分享给大家:导出微信聊天记录的几个关键步骤。
-
- 手机微信数据库导入电脑端
-
- 破解数据库密码
-
- 导出数据库
-
- 提取联系人信息和聊天记录
希望给有类似需求的小伙伴带来帮助。
话不多说,直接上实操!
关键步骤拆解
1. 手机微信数据库导入电脑端
对于很少用电脑端微信的小伙伴,首先需要先把手机微信的数据迁移到电脑端:
在手机端微信,依次点击**「我-设置-聊天-聊天记录迁移与备份-迁移」**,选择迁移到电脑微信;
继续选择部分 或者 全部聊天记录,如果聊天数据较多,可能需要稍等一段时间~
2. 破解数据库密码
电脑端自己的微信数据存放在哪?
在电脑端微信,左下角依次点击「设置-文件管理」,找到自己的微信数据存放位置,然后打开对应的文件夹。
文件最后一级目录就是自己的微信号,如果登录过多个微信账号的需要注意切换,比如下面这张就是我的微信数据存放位置,其中的 Msg
文件夹中存放的就是微信中所有的联系人和聊天信息。
打开 Msg
文件夹,会发现这里有很多 .db
结尾的,就是微信数据存放的数据库文件。如果你用任何数据库软件打开,这时是打不开的。
因为还需要数据库密码。
怎么破解数据库密码?
参考这个项目,我把其中破解数据库密码部分的代码提取出来了,方便大家直接使用:
def get_key(db_path, addr_len):
def read_key_bytes(h_process, address, address_len=8):
array = ctypes.create_string_buffer(address_len)
if ReadProcessMemory(h_process, void_p(address), array, address_len, 0) == 0: return "None"
address = int.from_bytes(array, byteorder='little') # 逆序转换为int地址(key地址)
key = ctypes.create_string_buffer(32)
if ReadProcessMemory(h_process, void_p(address), key, 32, 0) == 0: return "None"
key_bytes = bytes(key)
return key_bytes
def verify_key(key, wx_db_path):
if not wx_db_path or wx_db_path.lower() == "none":
return True
KEY_SIZE = 32
DEFAULT_PAGESIZE = 4096
DEFAULT_ITER = 64000
with open(wx_db_path, "rb") as file:
blist = file.read(5000)
salt = blist[:16]
byteKey = hashlib.pbkdf2_hmac("sha1", key, salt, DEFAULT_ITER, KEY_SIZE)
first = blist[16:DEFAULT_PAGESIZE]
mac_salt = bytes([(salt[i] ^ 58) for i in range(16)])
mac_key = hashlib.pbkdf2_hmac("sha1", byteKey, mac_salt, 2, KEY_SIZE)
hash_mac = hmac.new(mac_key, first[:-32], hashlib.sha1)
hash_mac.update(b'\x01\x00\x00\x00')
if hash_mac.digest() != first[-32:-12]:
return False
return True
phone_type1 = "iphone\x00"
phone_type2 = "android\x00"
phone_type3 = "ipad\x00"
pm = pymem.Pymem("WeChat.exe")
module_name = "WeChatWin.dll"
MicroMsg_path = os.path.join(db_path, "MSG", "MicroMsg.db"