def _dump_phone(self, serial): print('DUMPING iOS INFO...') # FIXME: pathlib migration at some point hmac_serial = config.hmac_serial(serial) cmd = "'{}/ios_dump.sh' {} {Apps} {Info} {Jailbroken-FS} {Jailbroken-SSH}"\ .format(config.SCRIPT_DIR, hmac_serial, **config.IOS_DUMPFILES) print(cmd) path = self.dump_path(serial, fkind='Dir') # dumped = catch_err(run_command(cmd)).strip() dumpf = os.path.join(path, config.IOS_DUMPFILES['Apps']) dumpfinfo = os.path.join(path, config.IOS_DUMPFILES['Info']) #dumped = catch_err(run_command(cmd)).strip() dumped = catch_err(run_command(cmd)).strip() print('iOS DUMP RESULTS for {}:'.format(hmac_serial)) print(dumped) if dumped == serial or True: print("Dumped the data into: {}".format(dumpf)) self.parse_dump = parse_dump.IosDump(dumpf, finfo=dumpfinfo) return True else: print( "Couldn't connect to the device. Trying to reconnect. This way." ) #connected, connected_reason = self.setup() #if not connected: # print(connected_reason) return False
def get_system_apps(self, serialno): dumpf = self.dump_file_name(serialno, 'json') if os.path.exists(dumpf): s = parse_dump.IosDump(dumpf) return s.system_apps() else: return []
def app_details(self, serialno, appid): try: d = pd.read_sql('select * from apps where appid=?', self.app_info_conn, params=(appid, )) if not isinstance(d.get('permissions', ''), list): d['permissions'] = d.get('permissions', pd.Series([])) d['permissions'] = d['permissions'].fillna('').str.split(', ') if 'descriptionHTML' not in d: d['descriptionHTML'] = d['description'] dfname = self.dump_file_name(serialno) if self.device_type == 'ios': ddump = parse_dump.IosDump(dfname) else: ddump = parse_dump.AndroidDump(dfname) info = ddump.info(appid) if self.device_type == 'ios': d['permissions'] = [info['permissions']] d['title'] = [info['title']] #print(info['permissions']) del info['permissions'] print("AppInfo: ", info, appid, dfname, ddump) # p = self.run_command( # 'bash scripts/android_scan.sh info {ser} {appid}', # ser=serialno, appid=appid # ); p.wait() # d['info'] = p.stdout.read().decode().replace('\n', '<br/>') return d.fillna(''), info except KeyError as ex: print("Exception:::", ex) return pd.DataFrame([]), dict()
def get_apps(self, serialno): self.serialno = serialno # cmd = '{cli} -i {serial} install browse | tail -n +2 > {outf}' cmd = '{cli} -i {serial} -B | tail -n +3 > {outf}' dumpf = self.dump_file_name(serialno, 'json') if self.catch_err(self.run_command(cmd, serial=serialno, outf=dumpf)) != -1: print("Dumped the data into: {}".format(dumpf)) s = parse_dump.IosDump(dumpf) self.installed_apps = s.installed_apps() else: self.installed_apps = [] return self.installed_apps
def app_details(self, serialno, appid): try: d = pd.read_sql('select * from apps where appid=?', self.app_info_conn, params=(appid, )) if not isinstance(d.get('permissions', ''), list): d['permissions'] = d.get('permissions', pd.Series([])) d['permissions'] = d['permissions'].fillna('').str.split(', ') if 'descriptionHTML' not in d: d['descriptionHTML'] = d['description'] dfname = self.dump_path(serialno) if self.device_type == 'ios': ddump = self.parse_dump if not ddump: ddump = parse_dump.IosDump(dfname) else: ddump = parse_dump.AndroidDump(dfname) info = ddump.info(appid) print('BEGIN APP INFO') print("info={}".format(info)) print('END APP INFO') # FIXME: sloppy iOS hack but should fix later, just add these to DF # directly. if self.device_type == 'ios': # TODO: add extra info about iOS? Like idevicediagnostics # ioregentry AppleARMPMUCharger or IOPMPowerSource or # AppleSmartBattery. d['permissions'] = pd.Series(info.get('permissions', '')) #d['permissions'] = [info.get('permissions','')] d['title'] = pd.Series(info.get('title', '')) del info['permissions'] print("AppInfo: ", info, appid, dfname, ddump) return d.fillna(''), info except KeyError as ex: print(">>> Exception:::", ex, file=sys.stderr) return pd.DataFrame([]), dict()