Exemple #1
0
    def __init__(self, device=None):
        """
        initiate a minicap connection
        :param device: instance of Device
        :return:
        """
        self.logger = logging.getLogger(self.__class__.__name__)
        self.host = "localhost"

        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device
        self.port = self.device.get_random_port()

        self.remote_minicap_path = "/data/local/tmp/minicap-devel"

        self.sock = None
        self.connected = False
        self.minicap_process = None
        self.banner = None
        self.width = -1
        self.height = -1
        self.orientation = -1

        self.last_screen = None
        self.last_screen_time = None
        self.last_views = []
Exemple #2
0
    def __init__(self,
                 device=None,
                 out_file=None,
                 package_name=None,
                 is_wearable=False):
        """
        initialize logcat connection
        :param device: a Device instance
        """
        self.logger = logging.getLogger(self.__class__.__name__)
        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device
        self.connected = False
        self.process = None
        if device.output_dir is None:
            self.out_file = None
        else:
            if out_file is not None:
                self.out_file = "%s/%s" % (device.output_dir, out_file)
            else:
                self.out_file = "%s/logcat.txt" % device.output_dir
        self.package_name = package_name
        self.is_wearable = is_wearable

        # NOTE: /dcsl/ Wear Event Mapper.
        #       Maps an observable state in the wearable (e.g., sensor activity, intra-device comm.)
        #       with a sequence of UI events (either in the mobile device or wearable device).
        self.wear_events = []
Exemple #3
0
 def __init__(self, device=None):
     """
     initiate a emulator console via telnet
     :param device: instance of Device
     :return:
     """
     self.logger = logging.getLogger(self.__class__.__name__)
     if device is None:
         from droidbot.device import Device
         device = Device()
     self.device = device
     self.connected = False
Exemple #4
0
    def __init__(self, device=None):
        """
        initiate a ADB connection from serial no
        the serial no should be in output of `adb devices`
        :param device: instance of Device
        :return:
        """
        self.logger = logging.getLogger(self.__class__.__name__)
        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device

        self.cmd_prefix = ['adb', "-s", device.serial]
Exemple #5
0
    def __init__(self, device=None):
        """
        initialize connection
        :param device: a Device instance
        """
        self.logger = logging.getLogger(self.__class__.__name__)

        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device
        self.connected = False
        self.process = None
        # if device.output_dir is None:
        self.out_file = None
Exemple #6
0
    def __init__(self, device=None):
        """
        initiate a socket connection between droidbot and the fuzzer app installed
        on the device
        """
        self.logger = logging.getLogger(self.__class__.__name__)
        self.host = REMOTE_SERVER
        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device
        self.port = self.device.get_random_port()
        self.connected = False

        self.sock = None
 def __init__(self, device=None):
     """
     initialize logcat connection
     :param device: a Device instance
     """
     if device is None:
         from droidbot.device import Device
         device = Device()
     self.device = device
     self.connected = False
     self.process = None
     if device.output_dir is None:
         self.out_file = None
     else:
         self.out_file = "%s/logcat.txt" % device.output_dir
    def __init__(self, device=None, auth_token=None):
        """
        initiate a emulator console via telnet
        :param device: instance of Device
        :return:
        """
        self.logger = logging.getLogger('TelnetConsole')

        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device
        self.auth_token = auth_token
        self.console = None
        self.__lock__ = threading.Lock()
Exemple #9
0
    def __init__(self, device=None, auth_token=None):
        """
        Initiate a emulator console via telnet.
        On some devices, an authentication token is required to use telnet
        :param device: instance of Device
        :return:
        """
        self.logger = logging.getLogger(self.__class__.__name__)

        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device
        self.auth_token = auth_token
        self.console = None
        self.__lock__ = threading.Lock()
Exemple #10
0
    def __init__(self, device=None):
        """
        initiate a jdwp connection.
        :param device: instance of Device
        :return:
        """
        self.logger = logging.getLogger(self.__class__.__name__)
        self.host = "localhost"

        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device
        self.port = self.device.get_random_port()

        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.connected = False
    def __init__(self, device=None):
        """
        initiate a emulator console via telnet
        :param device: instance of Device
        :return:
        """
        self.logger = logging.getLogger('DroidBotAppConn')
        self.host = "localhost"
        self.port = 7336
        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device
        self.connected = False
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        self.last_acc_event = None
Exemple #12
0
    def __init__(self, device=None):
        """
        initiate a droidbot app connection
        :param device: instance of Device
        :return:
        """
        self.logger = logging.getLogger(self.__class__.__name__)
        self.host = "localhost"
        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device
        self.port = self.device.get_random_port()
        self.connected = False
        self.__can_wait = True

        self.sock = None
        self.last_acc_event = None
Exemple #13
0
 def __init__(self, device=None):
     """
     initialize logcat connection
     :param device: a Device instance
     """
     self.logger = logging.getLogger(self.__class__.__name__)
     if device is None:
         from droidbot.device import Device
         device = Device()
     self.device = device
     self.connected = False
     self.process = None
     self.parsers = []
     self.recent_lines = []
     if device.output_dir is None:
         self.out_file = None
     else:
         self.out_file = "%s/logcat.txt" % device.output_dir
Exemple #14
0
    def __init__(self, device=None):
        """
        initiate a droidbot app connection
        :param device: instance of Device
        :return:
        """
        self.logger = logging.getLogger('DroidBotAppConn')
        self.host = "localhost"
        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device
        self.port = self.device.get_random_port()
        self.connected = False
        self.__can_wait = True

        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        self.last_acc_event = None
Exemple #15
0
    def __init__(self, device=None):
        """
        initiate a emulator console via telnet
        :param device: instance of Device
        :return:
        """
        self.logger = logging.getLogger('minicap')
        self.host = "localhost"
        self.port = 7335
        self.device = device
        self.remote_minicap_path = "/data/local/tmp/minicap-devel"

        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.connected = False
        self.minicap_process = None
        self.banner = None
        self.last_screen = None
        self.last_screen_time = None

        if self.device is None:
            from droidbot.device import Device
            self.device = Device()
Exemple #16
0
    def __init__(self, device=None):
        """
        initiate a droidbot app connection
        :param device: instance of Device
        :return:
        """
        self.logger = logging.getLogger(self.__class__.__name__)
        self.host = "localhost"
        if device is None:
            from droidbot.device import Device
            device = Device()
        self.device = device
        self.port = self.device.get_random_port()
        self.connected = False
        self.__can_wait = True

        self.sock = None
        self.last_acc_event = None
        self.enable_accessibility_hard = device.enable_accessibility_hard
        self.ignore_ad = device.ignore_ad
        if self.ignore_ad:
            import re
            self.__first_cap_re = re.compile("(.)([A-Z][a-z]+)")
            self.__all_cap_re = re.compile("([a-z0-9])([A-Z])")
Exemple #17
0
    def __init__(self,
                 app_path=None,
                 device_serial=None,
                 is_emulator=False,
                 output_dir=None,
                 cv_mode=False,
                 grant_perm=False,
                 debug_mode=False,
                 enable_accesibility_hard=False,
                 humanoid=None,
                 device2_serial=None,
                 wear_device=0,
                 replay_output=None):
        """
        Initiates orchestrator and required configurations
        :param app_path:
        :param device_serial:
        :param wear_device_serial:
        :param state_model:
        :param is_emulator:
        :param output_dir:
        :param cv_mode:
        :param grant_perm:
        :param enable_accesibility_hard:
        :param humanoid:
        :param device2_serial:
        :param wear_device:
        """
        logging.basicConfig(
            level=logging.DEBUG if debug_mode else logging.INFO,
            format=GV.LOG_FORMAT)

        self.logger = logging.getLogger('Orchestrator')

        self.keep_env = False
        Orchestrator.instance = self

        self.output_dir = output_dir
        self.device = None
        self.device_paired = None
        self.orchestrator = None
        self.monitor = None
        self.replay_output = replay_output
        self.enable_accesibility_hard = enable_accesibility_hard

        self.enabled = True
        self.comando = None

        try:

            device_adapters = {
                "adb": True,
                "telnet": False,
                "droidbot_app": False,
                "minicap": False,
                "logcat": True,
                "user_input_monitor": True,
                "process_monitor": True,
                "droidbot_ime": False
            }

            # setup to main device
            self.device = Device(
                device_serial,
                is_emulator,
                output_dir=self.output_dir,
                cv_mode=cv_mode,
                grant_perm=grant_perm,
                enable_accessibility_hard=self.enable_accesibility_hard,
                humanoid=humanoid,
                is_wearable=True if wear_device == 1 else False  #,
                # adapters=device_adapters
            )
            print("[ORHC] Device(s) started")

            # app (used for training)
            self.app = App(app_path, output_dir=self.output_dir)
            print("[ORHC] App started")

            # NOTE: /dcsl/ Setup secondary device (paired device)
            #       This device is optional. If the training was done in the mobile, then we will need a paired
            #       device (wearable). However, in case that no `device2_serial` is provided, this could mean
            #       that the training was done in the wearable and there is no need to instance this additional device.
            if device2_serial is not None:
                self.device_paired = Device(device_serial=device2_serial,
                                            output_dir=self.output_dir,
                                            is_wearable=True,
                                            package_name=self.app.package_name,
                                            adapters=device_adapters)
            else:
                self.device_paired = None

            # replay module
            self.replay = Replay(device_serial=device_serial,
                                 is_emulator=is_emulator,
                                 output_dir=output_dir)
            print("[ORHC] Replay Module started")

            # NOTE: /dcsl/ Socket command interface
            #       This adapter is used to communicate fuzz command to the target application.
            if wear_device == 1:
                self.comando = Comando(self.device)
                print("[ORHC] Command interface started on %s" %
                      self.device.serial)
            else:
                self.comando = Comando(self.device_paired)
                print("[ORHC] Command interface started on %s" %
                      self.device_paired.serial)

        except Exception:
            import traceback
            traceback.print_exc()
            self.stop()
            sys.exit(-1)