mirror of
https://github.com/mvt-project/mvt.git
synced 2024-06-29 07:39:00 +00:00
92 lines
3.3 KiB
Python
92 lines
3.3 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
|
|
import os
|
|
from pathlib import Path
|
|
|
|
from mvt.android.modules.androidqf.sms import SMS
|
|
from mvt.common.module import run_module
|
|
|
|
from ..utils import get_android_androidqf, get_artifact_folder, list_files
|
|
|
|
TEST_BACKUP_PASSWORD = "123456"
|
|
|
|
|
|
class TestAndroidqfSMSAnalysis:
|
|
def test_androidqf_sms(self):
|
|
data_path = get_android_androidqf()
|
|
m = SMS(target_path=data_path, log=logging)
|
|
files = list_files(data_path)
|
|
parent_path = Path(data_path).absolute().parent.as_posix()
|
|
m.from_folder(parent_path, files)
|
|
run_module(m)
|
|
assert len(m.results) == 2
|
|
assert len(m.timeline) == 0
|
|
assert len(m.detected) == 0
|
|
|
|
def test_androidqf_sms_encrypted_password_valid(self):
|
|
data_path = os.path.join(get_artifact_folder(), "androidqf_encrypted")
|
|
m = SMS(
|
|
target_path=data_path,
|
|
log=logging,
|
|
module_options={"backup_password": TEST_BACKUP_PASSWORD},
|
|
)
|
|
files = list_files(data_path)
|
|
parent_path = Path(data_path).absolute().parent.as_posix()
|
|
m.from_folder(parent_path, files)
|
|
run_module(m)
|
|
assert len(m.results) == 1
|
|
|
|
def test_androidqf_sms_encrypted_password_prompt(self, mocker):
|
|
data_path = os.path.join(get_artifact_folder(), "androidqf_encrypted")
|
|
prompt_mock = mocker.patch(
|
|
"rich.prompt.Prompt.ask", return_value=TEST_BACKUP_PASSWORD
|
|
)
|
|
m = SMS(
|
|
target_path=data_path,
|
|
log=logging,
|
|
module_options={},
|
|
)
|
|
files = list_files(data_path)
|
|
parent_path = Path(data_path).absolute().parent.as_posix()
|
|
m.from_folder(parent_path, files)
|
|
run_module(m)
|
|
assert prompt_mock.call_count == 1
|
|
assert len(m.results) == 1
|
|
|
|
def test_androidqf_sms_encrypted_password_invalid(self, caplog):
|
|
data_path = os.path.join(get_artifact_folder(), "androidqf_encrypted")
|
|
with caplog.at_level(logging.CRITICAL):
|
|
m = SMS(
|
|
target_path=data_path,
|
|
log=logging,
|
|
module_options={"backup_password": "invalid_password"},
|
|
)
|
|
files = list_files(data_path)
|
|
parent_path = Path(data_path).absolute().parent.as_posix()
|
|
m.from_folder(parent_path, files)
|
|
run_module(m)
|
|
assert len(m.results) == 0
|
|
assert "Invalid backup password" in caplog.text
|
|
|
|
def test_androidqf_sms_encrypted_no_interactive(self, caplog):
|
|
data_path = os.path.join(get_artifact_folder(), "androidqf_encrypted")
|
|
with caplog.at_level(logging.CRITICAL):
|
|
m = SMS(
|
|
target_path=data_path,
|
|
log=logging,
|
|
module_options={"interactive": False},
|
|
)
|
|
files = list_files(data_path)
|
|
parent_path = Path(data_path).absolute().parent.as_posix()
|
|
m.from_folder(parent_path, files)
|
|
run_module(m)
|
|
assert len(m.results) == 0
|
|
assert (
|
|
"Cannot decrypt backup because interactivity was disabled and the password was not supplied"
|
|
in caplog.text
|
|
)
|