def extract_dumps(self, serial, folder): files = os.listdir(folder) self.internal_path = os.path.join(folder, "data", "data") self.external_path = os.path.join(folder, "data", "media", "0", "Android", "data") Utils.check_and_generate_folder(self.internal_path) Utils.check_and_generate_folder(self.external_path) if self.dsprocessor: self.progress.setProgressText( ' Handling extracted data from {}.\n Please wait.'.format( serial)) else: self.progress.progress( 'Handling extracted data from {}'.format(serial)) for filename in files: if '_internal.tar.gz' in filename: Utils.extract_tar( os.path.join(folder, filename), os.path.join(self.internal_path, filename.replace('_internal.tar.gz', ''))) elif '_external.tar.gz' in filename: Utils.extract_tar( os.path.join(folder, filename), os.path.join(self.external_path, filename.replace('_external.tar.gz', ''))) return os.path.join(folder, "data")
def generate_report(self): if not self.app_id: logging.critical("Module not found for application {}".format( self.app)) return None if not self.app: logging.critical("Module not found for {} package".format( self.app_id)) return None logging.info("Found module {} for {}".format(self.app, self.app_id)) logging.info("Looking for {} data in {}".format(self.app, self.folder)) # self.report_path = os.path.join(report_path, "report", self.report_name) Utils.check_and_generate_folder(self.report_path) self.internal_cache_path = os.path.join(self.report_path, "Contents", "internal") self.external_cache_path = os.path.join(self.report_path, "Contents", "external") if self.internal_path or self.external_path: logging.info("Dump file found. Extracting dump.") if self.internal_path: Utils.extract_tar(self.internal_path, self.internal_cache_path) if self.external_path: Utils.extract_tar(self.external_path, self.external_cache_path) else: self.internal_path = os.path.join("data", "data", self.app_id) self.external_path = os.path.join("data", "media", "0", "Android", "data", self.app_id) int_find = Utils.find_folder_has_folder(self.internal_path, self.folder) if int_find: Utils.copy_tree(int_find, self.internal_cache_path) ext_find = Utils.find_folder_has_folder(self.external_path, self.folder) if ext_find: Utils.copy_tree(ext_find, self.external_cache_path) if not int_find and not ext_find: logging.info("Application data for {} not found".format( self.app)) return None m = __import__("modules.report.{}".format(self.app), fromlist=[None]) module = m.ModuleReport(self.internal_cache_path, self.external_cache_path, self.report_path, self.app, self.app_id) # Utils.remove_folder(os.path.join(self.report_path)) return module.generate_report()