From 06cd640c5e1f10c3f300446cc0ce01aa6e3d5194 Mon Sep 17 00:00:00 2001 From: Nex Date: Mon, 31 Jan 2022 12:58:33 +0100 Subject: [PATCH] Using static methods --- mvt/android/modules/adb/dumpsys_accessibility.py | 13 +++++++++---- mvt/android/modules/adb/dumpsys_activities.py | 13 +++++++++---- mvt/android/modules/adb/dumpsys_battery_daily.py | 12 ++++++++---- mvt/android/modules/adb/dumpsys_battery_history.py | 13 +++++++++---- mvt/android/modules/adb/dumpsys_dbinfo.py | 11 ++++++++--- mvt/android/modules/adb/dumpsys_receivers.py | 13 +++++++++---- 6 files changed, 52 insertions(+), 23 deletions(-) diff --git a/mvt/android/modules/adb/dumpsys_accessibility.py b/mvt/android/modules/adb/dumpsys_accessibility.py index b30b33d..60361c7 100644 --- a/mvt/android/modules/adb/dumpsys_accessibility.py +++ b/mvt/android/modules/adb/dumpsys_accessibility.py @@ -27,7 +27,10 @@ class DumpsysAccessibility(AndroidExtraction): self.detected.append(result) continue - def process_accessibility(self, output): + @staticmethod + def parse_accessibility(output): + results = [] + in_services = False for line in output.split("\n"): if line.strip().startswith("installed services:"): @@ -43,17 +46,19 @@ class DumpsysAccessibility(AndroidExtraction): service = line.split(":")[1].strip() log.info("Found installed accessibility service \"%s\"", service) - self.results.append({ + results.append({ "package": service.split("/")[0], "service": service, }) - log.info("Identified a total of %d accessibility services", len(self.results)) + return results def run(self): self._adb_connect() output = self._adb_command("dumpsys accessibility") - self.process_accessibility(output) + self.results = self.parse_accessibility(output) + + self.log.info("Identified a total of %d accessibility services", len(self.results)) self._adb_disconnect() diff --git a/mvt/android/modules/adb/dumpsys_activities.py b/mvt/android/modules/adb/dumpsys_activities.py index 8d6164b..3a6f2fb 100644 --- a/mvt/android/modules/adb/dumpsys_activities.py +++ b/mvt/android/modules/adb/dumpsys_activities.py @@ -30,7 +30,10 @@ class DumpsysActivities(AndroidExtraction): self.detected.append({intent: activity}) continue - def parse_activity_resolver_table(self, output): + @staticmethod + def parse_activity_resolver_table(output): + results = {} + in_activity_resolver_table = False in_non_data_actions = False intent = None @@ -57,7 +60,7 @@ class DumpsysActivities(AndroidExtraction): # We detect the action name. if line.startswith(" " * 6) and not line.startswith(" " * 8) and ":" in line: intent = line.strip().replace(":", "") - self.results[intent] = [] + results[intent] = [] continue # If we are not in an intent block yet, skip. @@ -76,15 +79,17 @@ class DumpsysActivities(AndroidExtraction): activity = line.strip().split(" ")[1] package = activity.split("/")[0] - self.results[intent].append({ + results[intent].append({ "package": package, "activity": activity, }) + return results + def run(self): self._adb_connect() output = self._adb_command("dumpsys package") - self.parse_activity_resolver_table(output) + self.results = self.parse_activity_resolver_table(output) self._adb_disconnect() diff --git a/mvt/android/modules/adb/dumpsys_battery_daily.py b/mvt/android/modules/adb/dumpsys_battery_daily.py index 4ef5360..64d770d 100644 --- a/mvt/android/modules/adb/dumpsys_battery_daily.py +++ b/mvt/android/modules/adb/dumpsys_battery_daily.py @@ -35,7 +35,9 @@ class DumpsysBatteryDaily(AndroidExtraction): self.detected.append(result) continue - def process_battery_history(self, output): + @staticmethod + def parse_battery_history(output): + results = [] daily = None daily_updates = [] for line in output.split("\n")[1:]: @@ -48,7 +50,7 @@ class DumpsysBatteryDaily(AndroidExtraction): continue if line.strip() == "": - self.results.extend(daily_updates) + results.extend(daily_updates) daily = None daily_updates = [] continue @@ -75,12 +77,14 @@ class DumpsysBatteryDaily(AndroidExtraction): "vers": vers_nr, }) - self.log.info("Extracted %d records from battery daily stats", len(self.results)) + return results def run(self): self._adb_connect() output = self._adb_command("dumpsys batterystats --daily") - self.process_battery_history(output) + self.results = self.parse_battery_history(output) + + self.log.info("Extracted %d records from battery daily stats", len(self.results)) self._adb_disconnect() diff --git a/mvt/android/modules/adb/dumpsys_battery_history.py b/mvt/android/modules/adb/dumpsys_battery_history.py index c3537c2..7743f9e 100644 --- a/mvt/android/modules/adb/dumpsys_battery_history.py +++ b/mvt/android/modules/adb/dumpsys_battery_history.py @@ -27,7 +27,10 @@ class DumpsysBatteryHistory(AndroidExtraction): self.detected.append(result) continue - def process_battery_history(self, output): + @staticmethod + def parse_battery_history(output): + results = [] + for line in output.split("\n")[1:]: if line.strip() == "": break @@ -64,7 +67,7 @@ class DumpsysBatteryHistory(AndroidExtraction): else: continue - self.results.append({ + results.append({ "time_elapsed": time_elapsed, "event": event, "uid": uid, @@ -72,12 +75,14 @@ class DumpsysBatteryHistory(AndroidExtraction): "service": service, }) - self.log.info("Extracted %d records from battery history", len(self.results)) + return results def run(self): self._adb_connect() output = self._adb_command("dumpsys batterystats --history") - self.process_battery_history(output) + self.results = self.parse_battery_history(output) + + self.log.info("Extracted %d records from battery history", len(self.results)) self._adb_disconnect() diff --git a/mvt/android/modules/adb/dumpsys_dbinfo.py b/mvt/android/modules/adb/dumpsys_dbinfo.py index 23a200d..dd518a6 100644 --- a/mvt/android/modules/adb/dumpsys_dbinfo.py +++ b/mvt/android/modules/adb/dumpsys_dbinfo.py @@ -32,7 +32,10 @@ class DumpsysDBInfo(AndroidExtraction): self.detected.append(result) continue - def process_dbinfo(self, output): + @staticmethod + def parse_dbinfo(output): + results = [] + rxp = re.compile(r'.*\[([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3})\].*\[Pid:\((\d+)\)\](\w+).*sql\=\"(.+?)\".*path\=(.*?$)') in_operations = False @@ -53,7 +56,7 @@ class DumpsysDBInfo(AndroidExtraction): continue match = matches[0] - self.results.append({ + results.append({ "isodate": match[0], "pid": match[1], "action": match[2], @@ -61,11 +64,13 @@ class DumpsysDBInfo(AndroidExtraction): "path": match[4], }) + return results + def run(self): self._adb_connect() output = self._adb_command("dumpsys dbinfo") - self.process_dbinfo(output) + self.results = self.parse_dbinfo(output) self.log.info("Extracted a total of %d records from database information", len(self.results)) diff --git a/mvt/android/modules/adb/dumpsys_receivers.py b/mvt/android/modules/adb/dumpsys_receivers.py index a762480..f051a64 100644 --- a/mvt/android/modules/adb/dumpsys_receivers.py +++ b/mvt/android/modules/adb/dumpsys_receivers.py @@ -52,7 +52,10 @@ class DumpsysReceivers(AndroidExtraction): self.detected.append({intent: receiver}) continue - def parse_receiver_resolver_table(self, output): + @staticmethod + def parse_receiver_resolver_table(output): + results = {} + in_receiver_resolver_table = False in_non_data_actions = False intent = None @@ -79,7 +82,7 @@ class DumpsysReceivers(AndroidExtraction): # We detect the action name. if line.startswith(" " * 6) and not line.startswith(" " * 8) and ":" in line: intent = line.strip().replace(":", "") - self.results[intent] = [] + results[intent] = [] continue # If we are not in an intent block yet, skip. @@ -98,15 +101,17 @@ class DumpsysReceivers(AndroidExtraction): receiver = line.strip().split(" ")[1] package = receiver.split("/")[0] - self.results[intent].append({ + results[intent].append({ "package": package, "receiver": receiver, }) + return results + def run(self): self._adb_connect() output = self._adb_command("dumpsys package") - self.parse_receiver_resolver_table(output) + self.results = self.parse_receiver_resolver_table(output) self._adb_disconnect()