mirror of
https://github.com/mvt-project/mvt.git
synced 2026-09-12 20:58:57 +02:00
Parse dumpsys settings as per-record results
The `dumpsys settings` parser matched a single regex per line, which truncated every value that spans more than one line and, when `defaultSystemSet:` did not fall on the first line, left the trailing `default:` metadata inside the value. It also keyed results by setting name within a namespace, so a name recorded twice kept only the last row and a row without a `pkg:` field was dropped entirely. Replace it with a line loop that accumulates one record at a time and splits the `key:value` fields once the whole record has been read. Results become a list of records carrying the fields dumpsys prints: namespace, user, _id, name, value, pkg, default and defaultSystemSet, plus the per-setting change history. History timestamps are printed without a year, so they are resolved against the "ending at:" time of the section and serialized into the timeline. This shows which package changed a security-relevant setting, and when. The androidqf settings module shares this artifact, so it now emits the same record shape.
This commit is contained in:
@@ -10,6 +10,7 @@ from mvt.android.modules.bugreport.dumpsys_appops import DumpsysAppops
|
||||
from mvt.android.modules.bugreport.dumpsys_getprop import DumpsysGetProp
|
||||
from mvt.android.modules.bugreport.dumpsys_packages import DumpsysPackages
|
||||
from mvt.android.modules.bugreport.dumpsys_receivers import DumpsysReceivers
|
||||
from mvt.android.modules.bugreport.settings import Settings
|
||||
from mvt.android.modules.bugreport.tombstones import Tombstones
|
||||
from mvt.common.module import run_module
|
||||
|
||||
@@ -93,6 +94,25 @@ class TestBugreportAnalysis:
|
||||
assert alert.event == malicious_receiver
|
||||
assert alert.matched_indicator.value == "com.android.services"
|
||||
|
||||
def test_settings_module(self):
|
||||
m = self.launch_bug_report_module(Settings)
|
||||
assert len(m.results) == 11
|
||||
|
||||
assert len(m.alertstore.alerts) == 1
|
||||
assert "accessibility_enabled = 1" in m.alertstore.alerts[0].message
|
||||
|
||||
assert len(m.timeline) == 3
|
||||
change = [
|
||||
entry
|
||||
for entry in m.timeline
|
||||
if entry["timestamp"] == "2022-03-28 22:41:07.980000"
|
||||
][0]
|
||||
assert change["event"] == "settings_change"
|
||||
assert change["data"] == (
|
||||
'secure setting "accessibility_enabled" changed from "0" to "1" '
|
||||
"by com.example.helper"
|
||||
)
|
||||
|
||||
def test_tombstones_modules(self):
|
||||
m = self.launch_bug_report_module(Tombstones)
|
||||
assert len(m.results) == 2
|
||||
|
||||
Reference in New Issue
Block a user