MVT (Mobile Verification Toolkit) helps with conducting forensics of mobile devices in order to find signs of a potential compromise.
This report presents the forensic synthetic code analysis of mvt-project/mvt, a Python project with 12,980 GitHub stars. SynthScan v2.0 examined 38,801 lines of code across 295 source files, recording 647 pattern matches distributed across 14 syntactic categories. The overall adjusted score of 22.3 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 647 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_check_android_androidqf.py | 27 | def test_log_timestamps_module_is_registered(self): | CODE |
| LOW | tests/test_check_android_androidqf.py | 36 | def test_check_stores_nested_sms_urls(self, tmp_path): | CODE |
| LOW | tests/test_check_android_androidqf.py | 54 | def test_acquisition_context_is_passed_to_bugreport(self, tmp_path, mocker): | CODE |
| LOW | tests/test_check_android_androidqf.py | 85 | def test_acquisition_context_falls_back_to_public_key_file(self, tmp_path): | CODE |
| LOW | tests/test_check_android_androidqf.py | 97 | def test_check_encrypted_backup_prompt_valid(self, mocker): | CODE |
| LOW | tests/test_check_android_androidqf.py | 113 | def test_check_encrypted_backup_cli(self, mocker): | CODE |
| LOW | tests/test_check_android_androidqf.py | 129 | def test_check_encrypted_backup_env(self, mocker): | CODE |
| LOW | tests/test_check_android_androidqf.py | 148 | def test_check_malformed_backup_skips_backup_modules(self, tmp_path, caplog): | CODE |
| LOW | tests/test_check_android_androidqf.py | 163 | def test_intrusion_log_zip_rejects_path_traversal(self, tmp_path, mocker, caplog): | CODE |
| LOW | tests/test_check_android_adb_removed.py | 12 | def test_check_adb_exits_nonzero(self): | CODE |
| LOW | tests/test_cmd_check_sysdiagnose.py | 29 | def _create_sysdiagnose_folder(tmp_path): | CODE |
| LOW | tests/test_cmd_check_sysdiagnose.py | 40 | def _create_sysdiagnose_archive(tmp_path, folder): | CODE |
| LOW | tests/test_cmd_check_sysdiagnose.py | 56 | def test_check_sysdiagnose_from_folder(tmp_path): | CODE |
| LOW | tests/test_cmd_check_sysdiagnose.py | 67 | def test_check_sysdiagnose_from_archive_closes_archive(tmp_path): | CODE |
| LOW | tests/test_cmd_check_sysdiagnose.py | 85 | def test_archive_is_extracted_once_and_unsafe_members_are_skipped(tmp_path): | CODE |
| LOW | tests/test_ios_versions.py | 10 | def test_is_ios_version_outdated(self): | CODE |
| LOW | tests/test_cli_entry_points.py | 80 | def _install_fixture_entry_point(monkeypatch, entry_point_group, command): | STRING |
| LOW | tests/test_cli_entry_points.py | 111 | def test_main_registers_installed_plugins_before_running_the_cli( | CODE |
| LOW | tests/test_cli_entry_points.py | 132 | def test_main_completes_plugin_command_names( | CODE |
| LOW | tests/test_cli_entry_points.py | 155 | def test_main_still_loads_commands_from_a_file( | CODE |
| LOW | tests/test_cli_entry_points.py | 178 | def test_main_loads_commands_from_the_environment_variable( | CODE |
| LOW | tests/test_cli_entry_points.py | 197 | def test_main_ignores_the_entry_point_groups_of_the_other_programs( | CODE |
| LOW | tests/test_cli_entry_points.py | 216 | def test_the_console_script_targets_are_importable(): | CODE |
| LOW | tests/test_cli_entry_points.py | 223 | def test_importing_mvt_does_not_import_a_cli(tmp_path): | CODE |
| LOW | tests/test_cli_entry_points.py | 237 | def test_importing_mvt_does_not_run_installed_plugins(tmp_path): | CODE |
| LOW | tests/test_cli_entry_points.py | 255 | def test_registering_the_plugins_runs_the_entry_point(tmp_path): | CODE |
| LOW | tests/test_check_ios_sysdiagnose.py | 26 | def _create_sysdiagnose_folder(tmp_path): | STRING |
| LOW | tests/test_check_ios_sysdiagnose.py | 33 | def test_check_sysdiagnose_runs_explicitly_scoped_custom_module(tmp_path): | STRING |
| LOW | tests/test_check_ios_sysdiagnose.py | 53 | def test_check_sysdiagnose_requires_an_explicitly_scoped_module(tmp_path): | STRING |
| LOW | tests/plugin_fixtures.py | 26 | def write_cli_plugin_distribution( | CODE |
| LOW | tests/utils.py | 29 | def get_android_backup_folder(): | CODE |
| LOW | tests/utils.py | 41 | def add_backup_manifest_entry(backup_path, file_id, domain, relative_path): | CODE |
| LOW | tests/test_check_ios_backup.py | 22 | def test_check_finds_backup_in_subfolder(self, tmp_path, caplog): | CODE |
| LOW | tests/test_check_ios_backup.py | 31 | def test_check_rejects_non_backup_folder(self, tmp_path, caplog): | CODE |
| LOW | tests/test_cli_startup.py | 19 | def test_importing_a_cli_does_not_import_the_module_machinery(cli_module, tmp_path): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 40 | def test_verbose_before_the_command_name_turns_on_debug(self, program): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 49 | def test_a_run_without_verbose_goes_back_to_info(self, program): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 58 | def test_mvt_verbose_without_a_command_prints_the_help(self): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 67 | def test_ios_command_default_does_not_undo_the_cli_choice(self, tmp_path): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 76 | def test_ios_verbose_after_the_command_name_still_works(self, tmp_path): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 85 | def test_android_command_default_does_not_undo_the_cli_choice(self, tmp_path): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 94 | def test_android_verbose_after_the_command_name_still_works(self, tmp_path): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 103 | def test_the_command_option_says_it_is_kept_for_compatibility(self): | CODE |
| LOW⚡ | tests/test_cli.py | 17 | def test_running_mvt_alone_shows_the_logo_and_the_commands(self): | CODE |
| LOW⚡ | tests/test_cli.py | 26 | def test_help_reminds_where_the_analysis_runs(self): | CODE |
| LOW⚡ | tests/test_cli.py | 33 | def test_version_prints_the_installed_version(self): | CODE |
| LOW⚡ | tests/test_cli.py | 39 | def test_download_iocs_updates_the_indicators(self, monkeypatch): | CODE |
| LOW | tests/test_check_android_backup.py | 20 | def test_check_encrypted_backup_prompt_valid(self, mocker): | CODE |
| LOW | tests/test_check_android_backup.py | 33 | def test_check_encrypted_backup_cli(self, mocker): | CODE |
| LOW | tests/test_check_android_backup.py | 49 | def test_check_encrypted_backup_cli_invalid(self, mocker, caplog): | CODE |
| LOW | tests/test_check_android_backup.py | 62 | def test_check_encrypted_backup_env(self, mocker): | CODE |
| LOW | tests/test_completion.py | 14 | def test_completion_prints_instructions_by_default(self): | CODE |
| LOW | tests/test_completion.py | 23 | def test_completion_bash_script_covers_every_cli(self): | CODE |
| LOW | tests/test_completion.py | 34 | def test_completion_fish_script_covers_every_cli(self): | CODE |
| LOW | tests/test_completion.py | 44 | def test_completion_install_updates_bashrc_once(self, tmp_path, monkeypatch): | CODE |
| LOW | tests/test_completion.py | 66 | def test_completion_install_fish_does_not_update_shell_rc( | CODE |
| LOW | tests/test_completion.py | 85 | def test_completion_install_without_shell_is_a_usage_error(self): | CODE |
| LOW | tests/test_completion.py | 92 | def test_completion_is_not_a_command_of_the_platform_clis(self): | CODE |
| LOW | tests/test_check_android_bugreport.py | 22 | def test_invalid_zip_reports_clean_error(self, tmp_path): | CODE |
| LOW | tests/test_custom_modules.py | 49 | def test_load_module_appears_only_for_supported_cli_command(tmp_path): | STRING |
| 299 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/mvt/cli.py | 32 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/cli.py | 34 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 67 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 69 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 76 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 78 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 82 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 84 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/cli.py | 95 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/cli.py | 97 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 86 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 88 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 116 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 118 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 124 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 126 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 199 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 201 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 243 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 245 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 316 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 318 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 384 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 386 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 457 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 459 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 506 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 508 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 517 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 519 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 79 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 81 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 109 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 111 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 117 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 119 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 129 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 131 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 196 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 198 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 269 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 271 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 353 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 355 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 434 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 436 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 483 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 485 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 494 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 496 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 330 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 332 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 342 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 344 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 389 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 391 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | src/mvt/android/modules/intrusion_logs/base.py | 71 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | src/mvt/android/modules/intrusion_logs/base.py | 73 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | src/mvt/android/modules/intrusion_logs/base.py | 84 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | src/mvt/android/modules/intrusion_logs/base.py | 86 | # ------------------------------------------------------------------ | COMMENT |
| 4 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/mvt/cli.py | 0 | register the external commands and run the mvt-android cli. external commands are registered here rather than when this | STRING |
| HIGH | src/mvt/ios/cli.py | 0 | register the external commands and run the mvt-android cli. external commands are registered here rather than when this | STRING |
| HIGH | src/mvt/android/cli.py | 0 | register the external commands and run the mvt-android cli. external commands are registered here rather than when this | STRING |
| HIGH | src/mvt/ios/modules/fs/webkit_safariviewservice.py | 0 | this module looks extracts records from webkit indexeddb folders, and checks them against any provided list of suspiciou | STRING |
| HIGH | src/mvt/ios/modules/fs/webkit_localstorage.py | 0 | this module looks extracts records from webkit indexeddb folders, and checks them against any provided list of suspiciou | STRING |
| HIGH | src/mvt/ios/modules/fs/webkit_indexeddb.py | 0 | this module looks extracts records from webkit indexeddb folders, and checks them against any provided list of suspiciou | STRING |
| HIGH | src/mvt/android/modules/bugreport/fs_timestamps.py | 0 | this module extracts records from battery daily updates. | STRING |
| HIGH | …mvt/android/modules/bugreport/dumpsys_battery_daily.py | 0 | this module extracts records from battery daily updates. | STRING |
| HIGH | src/mvt/android/modules/bugreport/dumpsys_dbinfo.py | 0 | this module extracts records from battery daily updates. | STRING |
| HIGH | …t/android/modules/bugreport/dumpsys_battery_history.py | 0 | this module extracts records from battery daily updates. | STRING |
| HIGH | src/mvt/android/modules/bugreport/tombstones.py | 0 | this module extracts records from battery daily updates. | STRING |
| HIGH | src/mvt/android/modules/bugreport/dumpsys_packages.py | 0 | this module extracts details on receivers for risky activities. | STRING |
| HIGH | src/mvt/android/modules/bugreport/dumpsys_activities.py | 0 | this module extracts details on receivers for risky activities. | STRING |
| HIGH | src/mvt/android/modules/bugreport/dumpsys_receivers.py | 0 | this module extracts details on receivers for risky activities. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/android_androidqf/test_mounts.py | 50 | except Exception: | CODE |
| LOW | src/mvt/ios/decrypt.py | 126 | except Exception as exc: | CODE |
| LOW | src/mvt/ios/decrypt.py | 176 | except Exception as exc: | CODE |
| LOW | src/mvt/ios/decrypt.py | 232 | except Exception as exc: | CODE |
| LOW | src/mvt/ios/decrypt.py | 263 | except Exception as exc: | CODE |
| LOW | src/mvt/ios/modules/base.py | 140 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/base.py | 194 | except Exception as exc: | CODE |
| MEDIUM | src/mvt/ios/modules/base.py | 29 | def close(self) -> None: | CODE |
| LOW | …c/mvt/ios/modules/mixed/webkit_session_resource_log.py | 154 | except Exception: | CODE |
| LOW | …c/mvt/ios/modules/mixed/webkit_session_resource_log.py | 161 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/mixed/safari_history.py | 80 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/mixed/safari_history.py | 93 | except Exception: | CODE |
| LOW | …t/ios/modules/mixed/webkit_resource_load_statistics.py | 161 | except Exception as exc: | CODE |
| LOW | src/mvt/ios/modules/backup/manifest.py | 116 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/backup/manifest.py | 186 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/backup/configuration_profiles.py | 142 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/fs/filesystem.py | 88 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/fs/filesystem.py | 100 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/fs/shutdownlog.py | 113 | except Exception: | CODE |
| LOW | src/mvt/common/alerts.py | 65 | except Exception: | CODE |
| LOW | src/mvt/common/command.py | 103 | except Exception as exc: | CODE |
| LOW⚡ | src/mvt/common/cmd_plugins.py | 46 | except Exception as exc: | CODE |
| LOW⚡ | src/mvt/common/cmd_plugins.py | 59 | except Exception: | CODE |
| LOW⚡ | src/mvt/common/cmd_plugins.py | 66 | except Exception: | CODE |
| LOW | src/mvt/common/log.py | 64 | except Exception: | CODE |
| LOW | src/mvt/common/updates.py | 79 | except Exception as exc: | CODE |
| LOW | src/mvt/common/updates.py | 95 | except Exception: | CODE |
| LOW | src/mvt/common/updates.py | 133 | except Exception as e: | CODE |
| LOW | src/mvt/common/updates.py | 219 | except Exception as e: | CODE |
| LOW | src/mvt/common/updates.py | 245 | except Exception: | CODE |
| LOW | src/mvt/common/updates.py | 310 | except Exception as e: | CODE |
| LOW | src/mvt/common/updates.py | 423 | except Exception as e: | CODE |
| MEDIUM | src/mvt/common/updates.py | 52 | def check(self) -> str: | CODE |
| LOW | src/mvt/common/indicators.py | 454 | except Exception: | CODE |
| LOW | src/mvt/common/logo.py | 30 | except Exception as e: | CODE |
| LOW | src/mvt/common/logo.py | 70 | except Exception as e: | CODE |
| LOW | src/mvt/common/logo.py | 124 | except Exception as e: | CODE |
| LOW⚡ | src/mvt/common/cli_plugins.py | 211 | except Exception: | CODE |
| LOW⚡ | src/mvt/common/cli_plugins.py | 221 | except Exception as exc: | CODE |
| LOW | src/mvt/common/utils.py | 99 | except Exception: | CODE |
| LOW | src/mvt/common/module.py | 161 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module.py | 249 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module.py | 263 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module.py | 278 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module.py | 289 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module_loader.py | 168 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module_loader.py | 233 | except Exception: | CODE |
| LOW | src/mvt/common/module_loader.py | 261 | except Exception: | CODE |
| LOW | src/mvt/common/module_loader.py | 271 | except Exception: | CODE |
| LOW | src/mvt/common/module_loader.py | 294 | except Exception: | CODE |
| LOW | src/mvt/common/module_loader.py | 315 | except Exception as exc: | CODE |
| MEDIUM | src/mvt/common/module_loader.py | 268 | def _packages_distributions() -> dict[str, list[str]]: | CODE |
| LOW | src/mvt/android/cmd_check_androidqf.py | 206 | except Exception as exc: | CODE |
| LOW | src/mvt/android/cmd_check_intrusion_logs.py | 94 | except Exception as exc: | CODE |
| LOW | src/mvt/android/artifacts/tombstone_crashes.py | 169 | except Exception as e: | CODE |
| LOW | src/mvt/android/artifacts/tombstone_crashes.py | 246 | except Exception as e: | CODE |
| LOW | src/mvt/android/modules/androidqf/mounts.py | 57 | except Exception as exc: | CODE |
| LOW | src/mvt/android/modules/androidqf/mounts.py | 73 | except Exception as exc: | CODE |
| LOW⚡ | src/mvt/android/modules/intrusion_logs/base.py | 380 | except Exception as e: | CODE |
| LOW | src/mvt/android/modules/intrusion_logs/base.py | 220 | except Exception as e: | CODE |
| 2 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mvt/ios/cmd_check_sysdiagnose.py | 75 | CODE | |
| LOW | src/mvt/ios/modules/net_base.py | 184 | CODE | |
| LOW | src/mvt/ios/modules/base.py | 146 | CODE | |
| LOW | src/mvt/ios/modules/base.py | 229 | CODE | |
| LOW | src/mvt/ios/modules/mixed/whatsapp_contacts.py | 201 | CODE | |
| LOW | …c/mvt/ios/modules/mixed/webkit_session_resource_log.py | 69 | CODE | |
| LOW | …c/mvt/ios/modules/mixed/webkit_session_resource_log.py | 185 | CODE | |
| LOW | src/mvt/ios/modules/mixed/safari_history.py | 170 | CODE | |
| LOW | src/mvt/ios/modules/mixed/interactionc.py | 473 | CODE | |
| LOW | src/mvt/ios/modules/mixed/interactionc.py | 502 | CODE | |
| LOW | src/mvt/ios/modules/mixed/calendar.py | 87 | CODE | |
| LOW | src/mvt/ios/modules/mixed/safari_browserstate.py | 67 | CODE | |
| LOW | src/mvt/ios/modules/mixed/safari_browserstate.py | 94 | CODE | |
| LOW | src/mvt/ios/modules/mixed/safari_browserstate.py | 182 | CODE | |
| LOW | …t/ios/modules/mixed/webkit_resource_load_statistics.py | 75 | CODE | |
| LOW | …t/ios/modules/mixed/webkit_resource_load_statistics.py | 147 | CODE | |
| LOW | src/mvt/ios/modules/mixed/tcc.py | 103 | CODE | |
| LOW | src/mvt/ios/modules/fs/analytics.py | 85 | CODE | |
| LOW | src/mvt/ios/modules/fs/shutdownlog.py | 78 | CODE | |
| LOW | src/mvt/common/alerts.py | 40 | CODE | |
| LOW | src/mvt/common/alerts.py | 175 | CODE | |
| LOW | src/mvt/common/command.py | 565 | CODE | |
| LOW | src/mvt/common/log.py | 39 | CODE | |
| LOW | src/mvt/common/indicators.py | 62 | CODE | |
| LOW | src/mvt/common/indicators.py | 118 | CODE | |
| LOW | src/mvt/common/indicators.py | 221 | CODE | |
| LOW | src/mvt/common/utils.py | 205 | CODE | |
| LOW | src/mvt/common/password.py | 115 | CODE | |
| LOW | src/mvt/android/cmd_check_androidqf.py | 305 | CODE | |
| LOW | src/mvt/android/cmd_check_backup.py | 124 | CODE | |
| LOW | src/mvt/android/artifacts/tombstone_crashes.py | 151 | CODE | |
| LOW | src/mvt/android/artifacts/tombstone_crashes.py | 216 | CODE | |
| LOW | src/mvt/android/artifacts/dumpsys_packages.py | 63 | CODE | |
| LOW | src/mvt/android/artifacts/dumpsys_adb.py | 23 | CODE | |
| LOW | src/mvt/android/artifacts/mounts.py | 40 | CODE | |
| LOW | src/mvt/android/artifacts/dumpsys_battery_history.py | 26 | CODE | |
| LOW | src/mvt/android/artifacts/settings.py | 63 | CODE | |
| LOW | src/mvt/android/artifacts/dumpsys_appops.py | 43 | CODE | |
| LOW | src/mvt/android/artifacts/dumpsys_appops.py | 86 | CODE | |
| LOW | src/mvt/android/artifacts/dumpsys_receivers.py | 20 | CODE | |
| LOW | src/mvt/android/parsers/backup.py | 203 | CODE | |
| LOW | src/mvt/android/modules/androidqf/aqf_files.py | 85 | CODE | |
| LOW | src/mvt/android/modules/androidqf/aqf_files.py | 121 | CODE | |
| LOW | src/mvt/android/modules/androidqf/aqf_packages.py | 48 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/connect_event.py | 33 | CODE | |
| LOW | …c/mvt/android/modules/intrusion_logs/security_event.py | 309 | CODE | |
| LOW | …c/mvt/android/modules/intrusion_logs/security_event.py | 477 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/dns_event.py | 33 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/base.py | 123 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/base.py | 141 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/base.py | 161 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/base.py | 251 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mvt/plugin.py | 12 | CODE | |
| LOW | src/mvt/plugin.py | 13 | CODE | |
| LOW | src/mvt/plugin.py | 14 | CODE | |
| LOW | src/mvt/plugin.py | 15 | CODE | |
| LOW | src/mvt/plugin.py | 15 | CODE | |
| LOW | src/mvt/plugin.py | 16 | CODE | |
| LOW | src/mvt/plugin.py | 17 | CODE | |
| LOW | src/mvt/plugin.py | 18 | CODE | |
| LOW | src/mvt/plugin.py | 18 | CODE | |
| LOW | src/mvt/plugin.py | 18 | CODE | |
| LOW | src/mvt/plugin.py | 19 | CODE | |
| LOW | src/mvt/plugin.py | 20 | CODE | |
| LOW | src/mvt/plugin.py | 20 | CODE | |
| LOW | src/mvt/plugin.py | 20 | CODE | |
| LOW | src/mvt/plugin.py | 25 | CODE | |
| LOW | src/mvt/plugin.py | 25 | CODE | |
| LOW | src/mvt/plugin.py | 25 | CODE | |
| LOW | src/mvt/plugin.py | 25 | CODE | |
| LOW | src/mvt/plugin.py | 25 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 40 | CODE | |
| LOW | src/mvt/plugin.py | 41 | CODE | |
| LOW | src/mvt/plugin.py | 42 | CODE | |
| LOW | src/mvt/ios/__init__.py | 6 | CODE | |
| LOW | src/mvt/ios/__init__.py | 6 | CODE | |
| LOW | src/mvt/ios/modules/sysdiagnose/__init__.py | 6 | CODE | |
| LOW | src/mvt/android/__init__.py | 6 | CODE | |
| LOW | src/mvt/android/__init__.py | 6 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | tests/artifacts/android_data/dumpsys_battery.txt | 21 | Discharge screen off time: 9d 21h 51m 40s 100ms (from 2 steps) | COMMENT |
| LOW | tests/artifacts/androidqf/dumpsys.txt | 341 | #0: +2h21m35s4ms to 75 (screen-off, power-save-off) | COMMENT |
| LOW | tests/ios_fs/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | tests/common/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | tests/android/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | tests/ios_backup/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | tests/android_androidqf/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/ios/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/ios/modules/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/ios/modules/sysdiagnose/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/common/version.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/common/module_types.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/common/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/android/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/android/artifacts/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/android/parsers/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/android/modules/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/mvt/ios/decrypt.py | 23 | """This class provides functions to decrypt an encrypted iTunes backup | STRING |
| MEDIUM | src/mvt/ios/modules/net_base.py | 23 | """This class provides a base for DataUsage and NetUsage extraction | STRING |
| MEDIUM | src/mvt/ios/modules/base.py | 39 | """This class provides a base for all iOS filesystem/backup extraction | STRING |
| MEDIUM | src/mvt/ios/modules/fs/webkit_base.py | 14 | """This class is a base for other WebKit-related modules.""" | STRING |
| MEDIUM | src/mvt/common/indicators.py | 44 | """This class is used to parse indicators from a STIX2 file and provide | STRING |
| MEDIUM | src/mvt/common/indicators.py | 418 | # Create an Aho-Corasick automaton from the list of urls | COMMENT |
| MEDIUM | src/mvt/common/cli_plugins.py | 18 | # This module is imported by every CLI at start-up, and by shell completion on | COMMENT |
| MEDIUM | src/mvt/common/module.py | 43 | """This class provides a base for all extraction modules.""" | STRING |
| MEDIUM | src/mvt/android/cmd_check_bugreport.py | 63 | """This method is used to initialize the bug report analysis from an | STRING |
| MEDIUM | src/mvt/android/cmd_check_bugreport.py | 75 | """This method is used to initialize the bug report analysis from a | STRING |
| MEDIUM | src/mvt/android/modules/bugreport/base.py | 17 | """This class provides a base for all Android Bug Report modules.""" | STRING |
| MEDIUM | src/mvt/android/modules/androidqf/base.py | 17 | """This class provides a base for all Android Data analysis modules.""" | STRING |
| MEDIUM | src/mvt/android/modules/backup/base.py | 16 | """This class provides a base for all backup extractios modules""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mvt/ios/versions.py | 45 | # Check if it is a build | COMMENT |
| LOW | src/mvt/ios/modules/mixed/interactionc.py | 353 | # Check if the record has the current timestamp. | COMMENT |
| LOW | src/mvt/ios/modules/mixed/interactionc.py | 357 | # Check if the timestamp was already processed. | COMMENT |
| LOW | src/mvt/common/alerts.py | 61 | # Check if it has a get_slug method (MVT modules have this) | COMMENT |
| LOW | src/mvt/android/artifacts/mounts.py | 93 | # Check if it's a system partition | COMMENT |
| LOW | src/mvt/android/artifacts/mounts.py | 98 | # Check if it's mounted read-write | COMMENT |
| LOW | src/mvt/android/artifacts/mounts.py | 179 | # Check if any mount points match indicators | COMMENT |
| LOW | src/mvt/android/artifacts/settings.py | 67 | # Check if one of the dangerous settings is using an unsafe | COMMENT |
| LOW | src/mvt/android/modules/androidqf/root_binaries.py | 105 | # Check if this matches a known root binary by exact name match | COMMENT |
| LOW | …c/mvt/android/modules/intrusion_logs/security_event.py | 378 | # Check if command contains any suspicious app IDs | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 39 | CODE | |
| LOW | src/mvt/ios/cmd_check_fs.py | 20 | CODE | |
| LOW | src/mvt/ios/cmd_check_sysdiagnose.py | 23 | CODE | |
| LOW | src/mvt/ios/cmd_check_backup.py | 27 | CODE | |
| LOW | src/mvt/common/command.py | 39 | CODE | |
| LOW | src/mvt/common/cmd_check_iocs.py | 19 | CODE | |
| LOW | src/mvt/android/cmd_check_bugreport.py | 23 | CODE | |
| LOW | src/mvt/android/cmd_check_androidqf.py | 42 | CODE | |
| LOW | src/mvt/android/cmd_check_intrusion_logs.py | 26 | CODE | |
| LOW | src/mvt/android/cmd_check_backup.py | 36 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mvt/plugin.py | 44 | __all__ = [ | CODE |
| LOW | src/mvt/common/updates.py | 202 | def set_latest_check(self) -> None: | CODE |
| LOW | src/mvt/common/updates.py | 262 | def set_findings(self, findings: list[dict]) -> None: | CODE |
| LOW | src/mvt/common/updates.py | 486 | def set_latest_check(self) -> None: | CODE |
| LOW | src/mvt/common/updates.py | 506 | def set_latest_update(self) -> None: | CODE |
| LOW | src/mvt/common/indicators.py | 24 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .safety-policy.yml | 4 | # Otherwise, you can use the flag `safety check --policy-file <path-to-this-file>` to specify a custom location and name | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/mvt/ios/modules/fs/analytics_ios_versions.py | 22 | """This module leverages the Analytics module in order to extract | STRING |
| LOW | src/mvt/common/indicators.py | 452 | # If it's not shortened, we just use the original URL object. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/artifacts/generate_stix.py | 18 | emails = ["foobar@example.org"] | CODE |
| LOW | tests/ios_backup/test_calendar.py | 41 | ind.ioc_collections[0]["emails"].append("user@example.org") | CODE |