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