
androidqf (Android Quick Forensics) hilft schnell forensische Beweise von Android-Geräten zu sammeln, um potenzielle Spuren von Kompromittierung zu identifizieren.
androidqf (Android Quick Forensics) ist ein tragbares Tool, das die Erfassung relevanter forensischer Daten von Android-Geräten vereinfacht.
androidqf soll ein einfaches und portables plattformübergreifendes Dienstprogramm sein, um schnell Daten von Android-Geräten zu erfassen. Es ist in seiner Funktionalität mvt-android ähnlich. Im Gegensatz zu MVT ist androidqf jedoch so konzipiert, dass es auch von technisch nicht versierten Benutzern einfach ausgeführt werden kann. Die mit androidqf extrahierten Daten können mit MVT analysiert werden.
Dieses Repository ist ein Fork von androidqf, der vom Sicherheitslabor von Amnesty International gewartet wird. Das Tool androidqf wurde ursprünglich von Claudio Guarnieri entwickelt.

Ausführbare Binärdateien für Linux, Windows und Mac sollten im aktuellen Release verfügbar sein. Falls Probleme beim Ausführen der Binärdatei auftreten, kann es hilfreich sein, sie selbst zu bauen.
Dieses Projekt verwendet GoReleaser für automatisierte Builds und Releases. So bauen Sie lokal:
GoReleaser installieren:
go install github.com/goreleaser/goreleaser@latest
Einen Snapshot-Build ausführen (ohne Veröffentlichung):
./build_locally.sh
Dies erstellt Binärdateien für alle Plattformen im dist/-Verzeichnis, einschließlich einer universellen Binärdatei für macOS, die sowohl auf Intel als auch auf Apple Silicon funktioniert.
Der traditionelle Makefile-Ansatz kann weiterhin verwendet werden. Dazu müssen Go 1.23+ sowie make, git, unzip und wget installiert sein. AndroidQF enthält ein cross-kompiliertes collector-Modul, das auf dem Zielgerät läuft, um forensisch relevante Informationen zuverlässiger zu extrahieren.
Zuerst das collector-Modul bauen:
make collector
Dann AndroidQF für die gewünschte Plattform kompilieren:
make linux
make darwin
make windows
Diese Befehle erzeugen Binärdateien in einem build/-Ordner.
Distributionspakete können auf die Einbettung der gebündelten ADB- und Collector-Binärdateien verzichten, indem sie mit dem unbundle-Build-Tag gebaut werden:
go build -tags unbundle -o build/
Wenn dieses Tag aktiviert ist, erwartet androidqf:
adb muss über den System-PATH verfügbar sein./usr/lib/androidqf/android-collector/ mit den von androidqf erwarteten Namen installiert sein, z. B. collector_arm und collector_arm64.Paketierer können die gebündelten Binärdatei-Assets aus assets/ entfernen, bevor sie bauen, aber das assets/-Paketverzeichnis und seine Go-Quelldateien müssen erhalten bleiben. Der unbundle-Build importiert immer noch das assets-Paket, und der Build schlägt fehl, wenn das gesamte assets/-Verzeichnis gelöscht wird.
Das Release-Container-Image wird in der GitHub Container Registry veröffentlicht:
docker pull ghcr.io/mvt-project/androidqf:latest
Um von einem über USB verbundenen Android-Gerät unter Linux zu sammeln, den USB-Bus durchreichen und ein Ausgabeverzeichnis mounten:
docker run --rm -it --privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v "$(pwd)/output:/output" \
ghcr.io/mvt-project/androidqf:latest -fast -output /output
Sie können das Image auch lokal für eine veröffentlichte Version bauen:
docker build --build-arg VERSION=1.8.3 -t androidqf .
[!TIP] Siehe Acquisition archives für das Archivformat, Integritäts-Hashes, Verschlüsselung und die Handhabung großer Dateien. Für ein Wörterbuch der gesammelten Dateien siehe das Drittanbieter- SocialTIC AndroidQF Output File Dictionary.
Stellen Sie vor dem Start von androidqf sicher, dass das Ziel-Android-Gerät über USB mit Ihrem Computer verbunden ist und USB-Debugging aktiviert ist. Die offizielle Dokumentation erklärt, wie das geht. Beachten Sie jedoch, dass Android-Telefone verschiedener Hersteller möglicherweise andere Navigationsschritte erfordern.
Sobald USB-Debugging aktiviert ist, können Sie androidqf starten. Es wird zunächst versuchen, sich über die USB-Brücke mit dem Gerät zu verbinden. Das Android-Telefon sollte dann auffordern, die Host-Schlüssel manuell zu autorisieren. Bestätigen Sie diese, idealerweise dauerhaft, damit die Aufforderung nicht erneut erscheint.
Nun sollte androidqf ausgeführt werden und ein Akquisitions-Zip-Archiv im aktuellen Arbeitsverzeichnis (oder im mit -output angegebenen Verzeichnis) erstellen. Während der Ausführung wird androidqf einige Auswahlmöglichkeiten anbieten: Diese Eingabeaufforderungen pausieren die Akquisition, bis Sie eine Auswahl treffen. Achten Sie darauf.
Die folgenden Daten können extrahiert werden:
Jede Akquisition enthält auch acquisition.json, command.log, wenn Protokollausgabe erzeugt wurde, und hashes.csv. Die Hash-Liste zeichnet den SHA-256-Digest jedes vorhergehenden Klartext-Archiveintrags auf und enthält sich selbst nicht. Fehlgeschlagene Geräte-Pulls werden nicht als Archiveinträge übernommen. Einzelheiten finden Sie unter Acquisition archives.
Bei der Ausführung einer androidqf-Sammlung werden die folgenden Optionen angeboten:
Möchten Sie ein Backup des Geräts erstellen?
...
? Backup:
▸ Nur SMS
Alles
Kein Backup
Diese Optionen beziehen sich auf Daten, die vom Gerät durch Ausführen des adb backup-Befehls im Hintergrund gesammelt werden. Wenn Kein Backup ausgewählt wird, wird der adb backup-Befehl nicht ausgeführt.
| Option | Erklärung |
|---|---|
| Nur SMS | adb backup com.android.providers.telephony wird ausgeführt. Es werden nur Daten von gesammelt. Dies umfasst die SMS-Datenbank. |
Möchten Sie Kopien aller Apps oder nur der Nicht-System-Apps herunterladen?
? Download:
▸ Alle
Nur Nicht-System-Pakete
Keine herunterladen
| Option | Erklärung |
|---|---|
| Alle | Alle installierten Pakete werden vom Telefon abgerufen |
| Nur Nicht-System-Pakete | Keine Pakete herunterladen, die unter adb pm list packages -s aufgeführt sind |
| Keine herunterladen | Keine Pakete herunterladen |
Möchten Sie die Intrusion Logs des Geräts nehmen?
? Intrusion Logs:
▸ Ja
Nein
| Option | Erklärung |
|---|---|
| Ja | Intrusion Logs werden vom Telefon abgerufen. |
| Nein | Die Erfassung der Intrusion Logs wird übersprungen. |
Das Mitführen der androidqf-Erfassungen auf einem unverschlüsselten Laufwerk kann Sie und insbesondere die Personen, von denen Sie Daten erfasst haben, einem erheblichen Risiko aussetzen. Zum Beispiel könnten Sie an einer problematischen Grenze angehalten und Ihr androidqf-Laufwerk beschlagnahmt werden. Die Rohdaten könnten nicht nur den Zweck Ihrer Reise preisgeben, sondern enthalten mit hoher Wahrscheinlichkeit auch sehr sensible Daten (z. B. eine Liste installierter Apps oder sogar SMS-Nachrichten).
Idealerweise sollte das Laufwerk vollständig verschlüsselt sein, aber das ist nicht immer möglich. Sie könnten auch erwägen, androidqf in einen VeraCrypt-Container zu legen und eine Kopie von VeraCrypt mitzuführen, um ihn zu mounten. VeraCrypt-Container sind jedoch in der Regel nur durch ein Passwort geschützt, das Sie möglicherweise preisgeben müssen.
Alternativ ermöglicht androidqf, jede Erfassung mit einem bereitgestellten age-Public-Key zu verschlüsseln. Idealerweise gehört dieser Public-Key zu einem Schlüsselpaar, dessen privaten Schlüssel der Endbenutzer nicht besitzt oder zumindest nicht mit sich führt. Auf diese Weise könnte der Endbenutzer die erfassten Daten selbst unter Zwang nicht entschlüsseln.
androidqf streamt jede Erfassung in ein Zip-Archiv. Wenn Sie eine Datei namens key.txt im aktuellen Arbeitsverzeichnis ablegen, verschlüsselt androidqf den Zip-Stream mit age und schreibt <UUID>.zip.age; andernfalls wird ein unverschlüsseltes <UUID>.zip geschrieben. androidqf prüft auch auf key.txt im selben Ordner wie die ausführbare Datei; wenn beide Dateien existieren, hat das aktuelle Arbeitsverzeichnis Vorrang.
Verschlüsselte Erfassungen erstellen kein Klartext-Akquisitionsarchiv. Gerätedateien, die vor dem Hinzufügen zu einem verschlüsselten Archiv validiert werden müssen, werden vorübergehend mit authentifizierter ChaCha20-Poly1305-Verschlüsselung zwischengespeichert. Siehe Acquisition archives für den vollständigen Datenfluss und das Verhalten bei großen APKs.
Sobald Sie eine verschlüsselte Erfassungsdatei erhalten haben, können Sie sie mit age wie folgt entschlüsseln:
$ age --decrypt -i ~/path/to/privatekey.txt -o <UUID>.zip <UUID>.zip.age
Beachten Sie, dass es immer möglich ist, dass zumindest ein Teil der unverschlüsselten Daten durch fortgeschrittene forensische Techniken wiederhergestellt werden kann – auch wenn wir daran arbeiten, dies zu verhindern.
Der Zweck von androidqf ist es, die konsensuale forensische Analyse von Geräten derjenigen zu erleichtern, die möglicherweise Ziele fortschrittlicher mobiler Spyware-Angriffe sind, insbesondere Mitglieder der Zivilgesellschaft und marginalisierter Gemeinschaften. Wir möchten nicht, dass androidqf Datenschutzverletzungen von nicht zustimmenden Personen ermöglicht. Daher ist das Ziel dieser Lizenz, die Verwendung von androidqf (und jeder anderen gleich lizenzierten Software) zum Zweck der adversarialen Forensik zu verbieten.
Um dies zu erreichen, wird androidqf unter der MVT-Lizenz 1.1 veröffentlicht, einer Anpassung der Mozilla Public License v2.0. Diese modifizierte Lizenz enthält eine neue Klausel 3.0, "Consensual Use Restriction", die die Nutzung der lizenzierten Software (und jedes daraus abgeleiteten "Larger Work") ausschließlich mit der ausdrücklichen Zustimmung der Person(en) erlaubt, deren Daten extrahiert und/oder analysiert werden ("Dateninhaber").
| Daten | Optional? | Ausgabepfad(e) |
|---|
| Ein vollständiges Backup oder ein Backup von SMS- und MMS-Nachrichten. | ✅ | backup.ab |
| Die Ausgabe des getprop-Shell-Befehls mit Build-Informationen und Konfigurationsparametern. | getprop.txt | |
| Alle Systemeinstellungen | settings_*.txt | |
| Die Ausgabe des ps-Shell-Befehls mit einer Liste aller laufenden Prozesse. | processes.txt | |
| Die Liste der Systemdienste. | services.txt | |
| Eine Kopie aller Systemprotokolle. | logs/, logcat.txt | |
| Die Ausgabe des dumpsys-Shell-Befehls mit Diagnoseinformationen über das Gerät. | dumpsys.txt | |
| Eine Liste aller installierten Pakete und zugehörigen Verteilungsdateien. | packages.json | |
| Kopie aller installierten APKs oder nur derer, die nicht als System-Apps markiert sind. | ✅ | apks/* |
| Intrusion-Logging-Protokolle. Enthalten private Daten wie den Navigationsverlauf. | ✅ | intrusion_logs/* |
| Eine Liste der Dateien auf dem System. | files.json | |
| Eine Kopie der in Temp-Ordnern verfügbaren Dateien. | tmp/* | |
| Ein Bugreport mit System- und App-spezifischen Protokollen, ohne private Daten. | bugreport.zip |
com.android.providers.telephony| Alles | adb backup -all wird ausgeführt. Es werden nur Backups von Apps angefordert, die explizit Backups ihrer Daten über diese Methode erlauben. Ab Android 12+ extrahiert diese Methode für fast alle Apps nichts. |
| Kein Backup | adb backup wird nicht ausgeführt |