From d1d92cfa0df2b688c9063b7d5c725d1160d1ae04 Mon Sep 17 00:00:00 2001 From: xaoyaoo Date: Fri, 5 Apr 2024 19:18:01 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=BB=E5=8F=96=E7=BE=A4=E8=81=8A=E6=95=B0?= =?UTF-8?q?=E6=8D=AE,=E4=B8=BB=E8=A6=81=E4=B8=BA=20wxid=EF=BC=8C=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E5=AF=B9=E5=BA=94=E6=98=B5=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pywxdump/analyzer/db_parsing.py | 33 ++++++++++++++++++++++++++++++++- pywxdump/analyzer/utils.py | 2 +- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/pywxdump/analyzer/db_parsing.py b/pywxdump/analyzer/db_parsing.py index 9631965..a420f4f 100644 --- a/pywxdump/analyzer/db_parsing.py +++ b/pywxdump/analyzer/db_parsing.py @@ -251,6 +251,25 @@ def wordcloud_generator(text, out_path="", is_show=False, img_path="", font="C:\ wordcloud_img.show() +def convert_bytes_to_str(d): + """ + 遍历字典并将bytes转换为字符串 + :param d: + :return: + """ + for k, v in d.items(): + if isinstance(v, dict): + convert_bytes_to_str(v) + elif isinstance(v, list): + for item in v: + if isinstance(item, dict): + convert_bytes_to_str(item) + elif isinstance(item, bytes): + item = item.decode('utf-8') # 将bytes转换为字符串 + elif isinstance(v, bytes): + d[k] = v.decode('utf-8') + + def read_BytesExtra(BytesExtra): if BytesExtra is None or not isinstance(BytesExtra, bytes): return None @@ -258,4 +277,16 @@ def read_BytesExtra(BytesExtra): deserialize_data, message_type = blackboxprotobuf.decode_message(BytesExtra) return deserialize_data except Exception as e: - return None \ No newline at end of file + return None + + +def read_ChatRoom_RoomData(RoomData): + # 读取群聊数据,主要为 wxid,以及对应昵称 + if RoomData is None or not isinstance(RoomData, bytes): + return None + try: + data = read_BytesExtra(RoomData) + convert_bytes_to_str(data) + return data + except Exception as e: + return None diff --git a/pywxdump/analyzer/utils.py b/pywxdump/analyzer/utils.py index 17cbe6e..5de07ed 100644 --- a/pywxdump/analyzer/utils.py +++ b/pywxdump/analyzer/utils.py @@ -20,6 +20,7 @@ def time_int2str(time_int): """ return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time_int)) + def read_dict_all_values(data): """ 读取字典中所有的值(单层) @@ -199,7 +200,6 @@ class DBPool: cls.__db_pool[db_path] = sqlite3.connect(db_path, check_same_thread=False) cls.connection = cls.__db_pool[db_path] - def __init__(self, db_path): if db_path == "DBPOOL_INIT": return