MVT: Command-line forensics for spyware traces on Android and iOS
A command-line tool for investigators to inspect Android/iOS acquisitions for spyware traces using IOCs.
GitHub mvt-project/mvt Updated 2026-09-22 Branch main Stars 14.1K Forks 1.4K
Python Mobile forensics Android/iOS Command-line tool

🧭 Decision Guide

Try it if you

  • You need mvt-ios or mvt-android to analyze Android or iOS device acquisitions.
    The Usage section says these two commands analyze acquisitions from their respective platforms.
  • You are investigating known spyware campaigns and have public IOCs from Amnesty International or other research groups.
    The Indicators of Compromise section says MVT supports public IOCs, including those published by Amnesty International.
  • Your team needs a Python CLI and plugins to extend forensic modules.
    The Usage section says plugin packages extend check-* modules and top-level commands for mvt, mvt-ios, and mvt-android.

Skip it if you

  • You want ordinary end users to determine whether a phone is safe by themselves.
    The README Note explicitly says MVT is not intended for end-user self-assessment and requires digital-forensics and command-line knowledge.
  • You need public IOCs alone to prove that a device was not infected by a particular spyware tool.
    The Indicators of Compromise warning says public IOCs can miss recent forensic traces and create a false sense of security.
  • Your existing scripts depend strictly on legacy MVT output and cannot handle the v3 changes.
    The top-level IMPORTANT notice says the v3 merge introduced breaking changes and may break scripts relying on MVT output.

Requirements

  • A Python environment and the dependencies described in the Installation section are required; the README does not specify a Python version.
  • It can be installed from PyPI with the command pip3 install mvt.
  • MVT requires understanding digital forensics and using command-line tools.
  • With uv, install uv first, then install MVT with uv tool install mvt.

First step (verbatim from README)

pip3 install mvt

Watch out

  • Put --verbose before the command name for debug output, for example mvt-ios --verbose check-backup ... .
    The Usage section says all three commands support --verbose in that position.
  • The --verbose option after check-* is compatibility-only and will be removed in a future release.
    The Usage section explicitly says this usage is kept only for compatibility.
  • mvt completion prints setup instructions by default and writes configuration only with --install.
    The Shell completion section says completion files or shell configuration are written only when --install is passed.
  • MVT uses its own license and is intended for consensual forensic analysis.
    The License section says the project is released under its own license and emphasizes consensual forensic analysis.

Not stated in the README

  • The README does not specify a supported Python version.
  • The README does not provide Android or iOS versions or a device compatibility matrix.
  • The README does not provide storage requirements, runtime measurements, or performance figures for different acquisitions.
  • The README does not state the coverage, update frequency, or false-positive rate of public IOCs.
  • Project metadata labels the license as Other, while the provided README material does not include the full license terms.
  • The README does not describe the exact v3 output changes, migration steps, or affected-script list.

💡 Deep Analysis

6
No I support Android and iOS users who may be targets in cases resembling the Pegasus Project, but my team lacks strong digital forensics and command-line experience; can I give MVT to them as a self-service security checker?
For: A security support person serving investigative journalists or human-rights organizations whose Android or iOS devices may be targeted by advanced spyware such as Pegasus, but who may lack digital forensics experience

No, MVT should not be handed directly to ordinary users as a self-service checker, because the README explicitly excludes end-user self-assessment and requires forensic and command-line knowledge.

  • The project describes MVT as a forensic research tool for technologists and investigators, not for end users.
  • Public IOCs cover only known and publicly researched spyware campaigns. The README warns that no match cannot establish that a device is clean and may create a false sense of security.
  • Reliable and comprehensive triage requires non-public IOCs, research, and threat intelligence; the README points to assistance from Amnesty International’s Security Lab and Access Now’s Digital Security Helpline.
  • MVT can therefore be used by a qualified analyst as part of an investigation, but its output should not be converted directly into an “uninfected” or personal-security conclusion.
  • README, “Note”: This is not intended for end-user self-assessment
  • README, “Indicators of Compromise”: Public indicators of compromise are insufficient to determine that a device is clean
  • README, “Indicators of Compromise”: reliable and comprehensive digital forensic support requires non-public indicators
Not stated in the README:The README does not define a minimum safe procedure for non-specialist support staff;It does not specify concrete escalation criteria for contacting Amnesty or Access Now in different cases
No I use Python scripts to parse existing MVT output and have integrated `mvt-ios` and `mvt-android` into an automation pipeline; can I directly replace the installed version with v3?
For: A security engineer maintaining a Python-based forensic automation pipeline whose scripts parse MVT output and who plans to upgrade to the version with the merged v3 branch

No, you should not replace the installed version directly, because the README explicitly says that v3 introduced breaking changes and that scripts relying on MVT output may have broken.

  • The warning at the top of the README states that merging the v3 branch introduced breaking changes, particularly for users relying on MVT output in other scripts.
  • This directly affects Python automation parsing mvt-ios, mvt-android, or mvt output; the project does not promise compatibility with the old output format.
  • The README also says that --verbose after a check-* command still works only for compatibility and will be removed, indicating ongoing CLI migration.
  • The upgrade decision requires reviewing issue #757, checking the fields consumed by current scripts, and validating plugins and downstream commands; the README does not provide an automatic migration tool.
  • README top warning: We recently merged the “v3” branch. This introduced breaking changes
  • README top warning: If you relied on mvt output in other scripts They might have broken
  • README, “Usage”: the `--verbose` option the `check-*` commands accept after their name ... will be removed
pip3 install mvt
Not stated in the README:The README does not list the complete output-schema differences or migration checklist from v2 to v3;It does not state which code changes existing Python parsers, plugins, and custom commands require
No I plan to integrate the Python-based MVT into a commercial mobile forensics platform and may redistribute a customized version with plugins; can I adopt it directly without reviewing the license?
For: A security product owner planning to integrate MVT into a commercial forensic platform or redistribute it internally, who needs to verify permission for commercial integration and customization

No, not before reviewing the license, because the project explicitly uses its own license rather than a conventional permissive open-source license.

  • The README’s License section says that MVT is released under its own license, with the purpose of facilitating consensual forensic analysis and avoiding privacy violations against non-consenting individuals.
  • This makes the license purpose and usage boundaries relevant beyond the technical implementation; commercial platforms, customized versions, and redistribution require review of the exact terms.
  • The README does not grant commercial-integration, redistribution, plugin-bundling, or modified-licensing rights, nor does it describe exceptions for those scenarios.
  • The code and documentation can be studied before approval, but Python, PyPI availability, or the label “open source” should not be treated as proof of unrestricted commercial use.
  • README, “License”: MVT is released under its own license
  • README, “License”: purpose is to facilitate consensual forensic analysis
  • Project data: license is Other
Not stated in the README:The README does not include the full proprietary-license text or specific conditions for commercial integration, redistribution, modification, and plugins;It does not describe commercial support, indemnification, trademark, or supply-chain compliance requirements
Yes I switch between Bash, Zsh, and Fish, need to run `mvt-ios`, `mvt-android`, and `download-iocs`, and want to reduce command-entry errors; does MVT support my CLI workflow?
For: An investigative analyst using Bash, Zsh, or Fish for mobile forensics who wants to integrate MVT commands into a scripted command-line workflow

Yes, because MVT provides platform commands, IOC downloading, verbose output, and completion for Bash, Zsh, and Fish, matching a command-line investigation workflow.

  • The README states that mvt-ios and mvt-android analyze acquisitions from their respective platforms, while mvt hosts shared commands such as download-iocs.
  • All three commands accept --verbose before the command name; the README gives mvt-ios --verbose check-backup ... as an example for debug output.
  • mvt completion prints setup instructions, and mvt completion bash generates Bash completion directly. The README explicitly covers Bash, Zsh, and Fish.
  • Completion improves CLI use but does not replace forensic interpretation of backups, acquisitions, or IOC results.
  • README, “Usage”: MVT provides three commands: `mvt-ios`, `mvt-android`, and `mvt`
  • README, “Usage”: Pass `--verbose` ... (`mvt-ios --verbose check-backup ...`)
  • README, “Shell completion”: completion script for Bash, Zsh, and Fish
mvt completion
Not stated in the README:The README does not specify how completely shell completion covers commands added by plugins;It does not specify the update frequency, version pinning, or offline behavior of `download-iocs` data sources
Yes I have digital forensics and command-line experience, need to analyze both Android and iOS device acquisitions or backups, and want to check public IOCs for known spyware traces; should I include MVT in my investigation workflow?
For: A command-line digital forensics analyst handling Android and iOS acquisitions or backups, rather than performing direct end-user device checks

Yes, because MVT is explicitly a cross-platform command-line forensics tool for technologists and investigators, although it is an analysis component rather than a complete examination platform.

  • The README defines mvt-ios and mvt-android for analyzing acquisitions from the respective platforms, while mvt provides shared functions such as version, plugins, and download-iocs.
  • It supports scanning for potential traces associated with known spyware campaigns using public IOCs, which fits an existing forensic workflow.
  • The tool depends on already obtained device data or backups; the README does not promise to acquire all data when permissions, keys, or complete inputs are unavailable.
  • A lack of public IOC matches does not prove that a device is clean. Comprehensive assessment still requires non-public indicators, threat intelligence, and expert interpretation.
  • README, “Usage”: `mvt-ios` and `mvt-android` analyse acquisitions from devices of that platform
  • README, “Indicators of Compromise”: supports using public IOCs to scan mobile devices
  • README, “Note”: intended for technologists and investigators; requires understanding digital forensics and command-line tools
pip3 install mvt
Not stated in the README:The README does not provide a complete compatibility matrix for every Android or iOS version, backup format, or device model;It does not specify the coverage of each check module when fields are missing from a particular acquisition
Yes I develop forensic plugins in Python and want both to extend `check-*` modules and register custom top-level commands for `mvt-ios` or `mvt-android`; is MVT suitable as an extension base?
For: A security researcher developing Python plugins for changing mobile threat activity who needs to add forensic modules to MVT `check-*` commands and register top-level CLI commands

Yes, because the README explicitly supports plugin packages that extend check-* forensic modules and register top-level commands on mvt, mvt-ios, and mvt-android.

  • Plugin modules run inside check-* commands, making them suitable for packaging new forensic checks as loadable components.
  • The README links to development documentation and custom CLI command documentation, and explains that packages register commands through entry points.
  • This is better suited to continuously adding new research findings than modifying the core repository directly, while remaining consistent with the project’s Python implementation.
  • However, the README does not provide the plugin API, version-compatibility policy, or testing contract in the main text; those interfaces must be confirmed in the development documentation before integration.
  • README, “Plugin packages”: extend MVT with additional forensic modules, which run inside the `check-*` commands
  • README, “Plugin packages”: top-level commands on `mvt`, `mvt-ios` and `mvt-android`
  • Project data: main_language is Python
pip3 install mvt
Not stated in the README:The main README does not specify the full entry-point names, signatures, or lifecycle for plugins;It does not state whether the plugin API is compatibility-stable after the v3 breaking changes

✨ Highlights

  • Supports mvt-ios and mvt-android for mobile acquisition analysis
  • Uses public IOCs to scan for known spyware traces
  • Provides plugins for extending forensic modules and top-level commands
  • The v3 merge introduced breaking changes to MVT output

🔧 Engineering

  • mvt-ios and mvt-android analyze acquisitions from their respective platforms
  • mvt download-iocs downloads IOCs and check-* commands run scans
  • mvt completion supports Bash, Zsh, and Fish completion

⚠️ Risks

  • The README states that public IOCs cannot prove a device is clean
  • v3 may break scripts that rely on MVT output
  • MVT requires knowledge of digital forensics and command-line tools

👥 For who?

  • For mobile-forensics technologists using a Python CLI
  • For researchers investigating mobile spyware such as Pegasus
  • For investigators analyzing Android and iOS device acquisitions