mirror of
https://github.com/mvt-project/mvt.git
synced 2026-09-03 08:30:51 +02:00
85 lines
3.0 KiB
Python
85 lines
3.0 KiB
Python
# Mobile Verification Toolkit (MVT)
|
|
# Copyright (c) 2021-2023 The MVT Authors.
|
|
# Use of this software is governed by the MVT License 1.1 that can be found at
|
|
# https://license.mvt.re/1.1/
|
|
import logging
|
|
|
|
from mvt.android.artifacts.dumpsys_dbinfo import DumpsysDBInfoArtifact
|
|
from mvt.common.indicators import Indicators
|
|
|
|
from ..utils import get_artifact
|
|
|
|
|
|
class TestDumpsysDBinfoArtifact:
|
|
def test_parsing(self):
|
|
dbi = DumpsysDBInfoArtifact()
|
|
file = get_artifact("android_data/dumpsys_dbinfo.txt")
|
|
with open(file) as f:
|
|
data = f.read()
|
|
|
|
assert len(dbi.results) == 0
|
|
dbi.parse(data)
|
|
assert len(dbi.results) == 5
|
|
assert dbi.results[0]["action"] == "executeForCursorWindow"
|
|
assert dbi.results[0]["sql"] == "PRAGMA database_list;"
|
|
assert (
|
|
dbi.results[0]["path"] == "/data/user/0/com.wssyncmldm/databases/idmsdk.db"
|
|
)
|
|
|
|
def test_ioc_check(self, indicator_file):
|
|
dbi = DumpsysDBInfoArtifact()
|
|
file = get_artifact("android_data/dumpsys_dbinfo.txt")
|
|
with open(file) as f:
|
|
data = f.read()
|
|
dbi.parse(data)
|
|
|
|
ind = Indicators(log=logging.getLogger())
|
|
ind.parse_stix2(indicator_file)
|
|
ind.ioc_collections[0]["app_ids"].append("com.wssyncmldm")
|
|
dbi.indicators = ind
|
|
assert len(dbi.alertstore.alerts) == 0
|
|
dbi.check_indicators()
|
|
assert len(dbi.alertstore.alerts) == 5
|
|
|
|
def test_parsing_month_day_timestamp_without_pid(self):
|
|
dbi = DumpsysDBInfoArtifact()
|
|
dbi.parse(
|
|
"""
|
|
Connection pool for /data/user/0/com.example/databases/current.db:
|
|
Most recently executed operations:
|
|
0: [07-15 20:27:39.431] executeForCursorWindow took 1ms - succeeded, sql="SELECT 1"
|
|
"""
|
|
)
|
|
|
|
assert dbi.results == [
|
|
{
|
|
"timestamp": "07-15 20:27:39.431",
|
|
"pid": None,
|
|
"action": "executeForCursorWindow",
|
|
"duration_ms": 1,
|
|
"status": "succeeded",
|
|
"sql": "SELECT 1",
|
|
"path": "/data/user/0/com.example/databases/current.db",
|
|
"pool_path": "/data/user/0/com.example/databases/current.db",
|
|
"connection_number": None,
|
|
"is_primary": None,
|
|
}
|
|
]
|
|
|
|
def test_parses_operations_from_multiple_connections(self):
|
|
dbi = DumpsysDBInfoArtifact()
|
|
dbi.parse(
|
|
"""Connection pool for /data/example.db:
|
|
Connection #0:
|
|
isPrimaryConnection: true
|
|
Most recently executed operations:
|
|
0: [2025-01-01 00:00:00.000] execute took 1ms - succeeded, sql="SELECT 1", path=/data/example.db
|
|
Connection #1:
|
|
isPrimaryConnection: false
|
|
Most recently executed operations:
|
|
0: [2025-01-01 00:00:01.000] execute took 2ms - succeeded, sql="SELECT 2", path=/data/example.db
|
|
"""
|
|
)
|
|
|
|
assert [record["connection_number"] for record in dbi.results] == [0, 1]
|