| 7 | import platform |
| 8 | |
| 9 | class Commons: |
| 10 | def __init__(self): |
| 11 | self.wechatutils_instance = WechatUtils() |
| 12 | self.device = frida.get_local_device() |
| 13 | self.process = self.device.enumerate_processes() |
| 14 | self.version_list = [] |
| 15 | self.configs_path = "" |
| 16 | self.active_sessions = [] |
| 17 | |
| 18 | def onMessage(self, message, data): |
| 19 | if message['type'] == 'send': |
| 20 | print(Color.GREEN + message['payload'], Color.END) |
| 21 | elif message['type'] == 'error': |
| 22 | print(Color.RED + message['stack'], Color.END) |
| 23 | |
| 24 | def inject_wechatEx(self, pid, code): |
| 25 | try: |
| 26 | session = frida.attach(pid) |
| 27 | script = session.create_script(code) |
| 28 | script.on("message", self.onMessage) |
| 29 | script.load() |
| 30 | print(f"Successfully injected into WeChat PID: {pid}") |
| 31 | return session |
| 32 | except Exception as e: |
| 33 | print(f"Error injecting into WeChat PID {pid}: {e}") |
| 34 | return None |
| 35 | |
| 36 | def inject_wechatDLL(self, path, code): |
| 37 | pid = self.device.spawn(path) |
| 38 | session = frida.attach(pid) |
| 39 | script = session.create_script(code) |
| 40 | script.on("message", self.onMessage) |
| 41 | script.load() |
| 42 | self.device.resume(pid) |
| 43 | time.sleep(10) |
| 44 | session.detach() |
| 45 | |
| 46 | def load_wechatEx_configs(self): |
| 47 | path = self.wechatutils_instance.get_configs_path() |
| 48 | if get_cpu_architecture() == "MacOS x64": |
| 49 | wechat_instances = self.wechatutils_instance.get_wechat_pids_and_versions_mac() |
| 50 | else: |
| 51 | wechat_instances = self.wechatutils_instance.get_wechat_pids_and_versions() |
| 52 | |
| 53 | if wechat_instances: |
| 54 | for pid, version in wechat_instances: |
| 55 | try: |
| 56 | wechatEx_hookcode = open(path + "../scripts/hook.js", "r", encoding="utf-8").read() |
| 57 | wechatEx_addresses = open(path + f"../configs/address_{version}_x64.json").read() |
| 58 | wechatEx_hookcode = "var address=" + wechatEx_addresses + wechatEx_hookcode |
| 59 | session = self.inject_wechatEx(pid, wechatEx_hookcode) |
| 60 | if session: |
| 61 | self.active_sessions.append(session) |
| 62 | print(f"Injected into WeChat instance PID: {pid}, Version: {version}") |
| 63 | except Exception as e: |
| 64 | print(f"Error injecting into WeChat PID {pid}: {e}") |
| 65 | else: |
| 66 | self.wechatutils_instance.print_process_not_found_message() |
no outgoing calls
no test coverage detected