def setup_process(self, package_name: str): # 设置当前hook进程 self.package_name = package_name proc: Process = None # 判定进程是否存在,不存在就先spawn for process in self.enumerate_process(): _process: Process = process if _process.name == package_name: proc = _process self.session = self.device.attach(proc.pid) break if not proc: pid = self.device.spawn([package_name]) self.session = self.device.attach(pid) self.device.resume(pid) time.sleep(1) for process in self.enumerate_process(): _process: Process = process if _process.name == package_name: proc = _process self.session = self.device.attach(proc.pid) break self.process = proc logger.debug("setup process, pid = %d, name = %s" % (proc.pid, proc.name))
def on_message(self, message, data): if message['type'] == 'send': info = message.get("payload") self.messages.append(info) logger.debug("receive message: %s" % info) else: logger.debug("receive message: %s" % message)
def setup_device(self, device_id: str = None, remote: str = None): # remote传递格式 127.0.0.1:27042 if not remote: # 远程设备 if not device_id: self.device = frida.get_usb_device() else: self.device = frida.get_device(id=device_id) else: # usb设备 device_manager = frida.get_device_manager() dev = device_manager.add_remote_device(remote) self.device = dev logger.debug("setup device: name = %s, id = %s" % (self.device.name, self.device.id))
def attach_process_and_load_script(self, script_content: str): if script_content: self.script_content = script_content if not self.process: if self.package_name: self.setup_process(self.package_name) if self.session: if self.script: self.script.unload() self.script = self.session.create_script(script_content) time.sleep(1) self.messages.clear() self.script.on("message", self.on_message) self.script.load() logger.debug("load script success")
def spawn_process(self, package_name: str): proc: Process = None pid = self.device.spawn([package_name]) self.session = self.device.attach(pid) self.device.resume(pid) time.sleep(1) for process in self.enumerate_process(): _process: Process = process if _process.name == package_name: proc = _process self.session = self.device.attach(proc.pid) break self.process = proc logger.debug("spawn process, pid = %d, name = %s" % (proc.pid, proc.name))
def spawn_process_and_load_script(self, package_name: str, script_content: str): proc: Process = None pid = self.device.spawn([package_name]) self.session = self.device.attach(pid) self.script_content = script_content self.package_name = package_name self.script = self.session.create_script(script_content) self.messages.clear() self.script.on("message", self.on_message) self.script.load() logger.debug("load script success") self.device.resume(pid) for process in self.enumerate_process(): _process: Process = process if _process.name == package_name: proc = _process break self.process = proc