#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import sys import re import struct import argparse import logging from pyquery import PyQuery from pysqlcipher3 import dbapi2 as sqlite from hashlib import md5 import wechat # noqa: setup logger color from common.procutil import subproc_succ, subproc_call logger = logging.getLogger("wechat") RES_DIR = "/mnt/sdcard/tencent/MicroMsg" MM_DIR = "/data/data/com.tencent.mm" def get_uin(): candidates = [] try: uin = None out = subproc_succ(f"adb shell cat {MM_DIR}/shared_prefs/system_config_prefs.xml") for line in out.decode('utf-8').split("\n"): if "default_uin" in line: line = PyQuery(line) uin = line.attr["value"] break uin = int(uin) except Exception: logger.warning("uin not found in system_config_prefs.xml") else: candidates.append(uin) logger.info(f"found uin={uin} in system_config_prefs.xml") try: uin = None out = subproc_succ(f"adb shell cat {MM_DIR}/shared_prefs/com.tencent.mm_preferences.xml") for line in out.decode('utf-8').split("\n"): if "last_login_uin" in line: line = PyQuery(line) uin = line.text() break uin = int(uin) except Exception: logger.warning("uin not found in com.tencent.mm_preferences.xml") else: candidates.append(uin) logger.info(f"found uin={uin} in com.tencent.mm_preferences.xml") try: uin = None out = subproc_succ(f"adb shell cat {MM_DIR}/shared_prefs/auth_info_key_prefs.xml") for line in out.decode('utf-8').split("\n"): if "auth_uin" in line: line = PyQuery(line) uin = line.attr["value"] break uin = int(uin) except Exception: logger.warning("uin not found in auth_info_key_prefs.xml") else: candidates.append(uin) logger.info(f"found uin={uin} in auth_info_key_prefs.xml") candidates = list({x for x in candidates if x != 0}) logger.info(f"Possible uin: {candidates}") return candidates def get_imei(): candidates = [] class Parcel(object): # https://gist.github.com/ktnr74/60ac7bcc2cd17b43f2cb def __init__(self, text): if text.startswith(b'Result: Parcel(') and text.endswith(b'\')'): self.data = b''.join([struct.pack('