
androidqf (Android Quick Forensics) помогает быстро собирать криминалистические доказательства с устройств Android, чтобы выявить потенциальные следы компрометации.
androidqf (Android Quick Forensics) — это портативный инструмент, упрощающий сбор соответствующих криминалистических данных с устройств Android.
androidqf предназначен для предоставления простой и портативной кроссплатформенной утилиты для быстрого сбора данных с устройств Android. По функциональности он аналогичен mvt-android. Однако, в отличие от MVT, androidqf также разработан для удобства использования пользователями, не обладающими техническими знаниями. Данные, извлеченные с помощью androidqf, можно проанализировать с помощью MVT.
Этот репозиторий является форком androidqf, поддерживаемым Лабораторией безопасности Amnesty International. Инструмент androidqf был изначально разработан Claudio Guarnieri.

Исполняемые файлы для Linux, Windows и Mac должны быть доступны в последнем релизе. Если у вас возникли проблемы с запуском бинарного файла, вы можете собрать его самостоятельно.
Этот проект использует GoReleaser для автоматической сборки и выпуска. Для локальной сборки:
Установите GoReleaser:
go install github.com/goreleaser/goreleaser@latest
Выполните сборку снимка (без публикации):
./build_locally.sh
Это создаст бинарные файлы для всех платформ в каталоге dist/, включая универсальный бинарный файл для macOS, который работает как на Intel, так и на Apple Silicon.
Вы все еще можете использовать традиционный подход с Makefile. Вам понадобится Go 1.23+ вместе с make, git, unzip и wget. AndroidQF включает кросс-скомпилированный модуль collector, который запускается на целевом устройстве для более надежного извлечения криминалистически значимой информации.
Сначала соберите модуль collector:
make collector
Затем скомпилируйте AndroidQF для выбранной платформы:
make linux
make darwin
make windows
Эти команды создадут бинарные файлы в папке build/.
Дистрибутивы могут отказаться от встраивания встроенных бинарных файлов ADB и collector, выполнив сборку с тегом сборки unbundle:
go build -tags unbundle -o build/
Когда этот тег включен, androidqf ожидает:
adb будет доступен в системном PATH./usr/lib/androidqf/android-collector/ с именами, ожидаемыми
androidqf, такими как collector_arm и collector_arm64.Упаковщики могут удалить встроенные бинарные ресурсы из assets/ перед сборкой,
но каталог пакета assets/ и его исходные файлы Go должны оставаться.
Сборка с unbundle все равно импортирует пакет assets, и сборка завершится ошибкой,
если весь каталог assets/ будет удален.
Образ контейнера релиза публикуется в GitHub Container Registry:
docker pull ghcr.io/mvt-project/androidqf:latest
Для сбора данных с USB-устройства Android на Linux передайте USB-шину и смонтируйте выходной каталог:
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
Вы также можете собрать образ локально для выпущенной версии:
docker build --build-arg VERSION=1.8.3 -t androidqf .
[!TIP] См. Архивы сбора для получения информации о формате архива, контрольных суммах, шифровании и обработке больших файлов. Словарь собранных файлов — см. сторонний Словарь вывода AndroidQF от SocialTIC.
Перед запуском androidqf необходимо подключить целевое устройство Android к компьютеру через USB и включить отладку по USB. Пожалуйста, обратитесь к официальной документации о том, как это сделать, но помните, что телефоны Android разных производителей могут требовать других шагов навигации, отличных от стандартных.
После включения отладки по USB можно запускать androidqf. Сначала он попытается подключиться к устройству через USB-мост, в результате чего на телефоне Android появится запрос на ручную авторизацию ключей хоста. Обязательно авторизуйте их, желательно навсегда, чтобы запрос больше не появлялся.
Теперь androidqf должен выполняться и создавать zip-архив сбора в вашей текущей рабочей папке или в папке, указанной с помощью -output. В какой-то момент выполнения androidqf предложит вам выбор: эти запросы приостановят сбор до тех пор, пока вы не сделаете выбор, так что будьте внимательны.
Могут быть извлечены следующие данные:
Каждый сбор также содержит acquisition.json, command.log (если был создан вывод журнала) и hashes.csv. Список хешей записывает дайджест SHA-256 каждой предыдущей записи архива в виде открытого текста и не включает себя. Неудачные извлечения с устройства не фиксируются как записи архива. Подробнее см. Архивы сбора.
При запуске сбора androidqf предлагаются следующие параметры:
Would you like to take a backup of the device?
...
? Backup:
▸ Only SMS
Everything
No backup
Эти параметры относятся к данным, собранным с устройства с помощью команды adb backup в фоновом режиме. Если выбран No backup, команда adb backup не выполняется.
| Опция |
|---|
Would you like to download copies of all apps or only non-system ones?
? Download:
▸ All
Only non-system packages
Do not download any
| Опция | Пояснение |
|---|---|
| All | Все установленные пакеты будут извлечены с телефона |
| Only non-system packages | Не загружать пакеты, перечисленные в adb pm list packages -s |
| Do not download any | Не загружать никакие пакеты |
Would you like to take the Intrusion Logs of the device?
? Intrusion Logs:
▸ Yes
No
| Опция | Пояснение |
|---|---|
| Yes | Журналы вторжений будут извлечены с телефона. |
| No | Сбор журналов вторжений пропускается. |
Хранение данных сборов androidqf на незашифрованном диске может подвергнуть вас, и тем более тех, у кого вы собирали данные, значительному риску. Например, вас могут остановить на проблемном пограничном контроле, и ваш диск с androidqf может быть изъят. Необработанные данные могут не только раскрыть цель вашей поездки, но и, скорее всего, будут содержать очень конфиденциальные данные (например, список установленных приложений или даже SMS-сообщения).
В идеале диск должен быть полностью зашифрован, но это не всегда возможно. Вы также можете рассмотреть возможность размещения androidqf внутри контейнера VeraCrypt и носить с собой копию VeraCrypt для его монтирования. Однако контейнеры VeraCrypt обычно защищены только паролем, который вы можете быть вынуждены предоставить.
В качестве альтернативы androidqf позволяет зашифровать каждый сбор с помощью предоставленного открытого ключа age. Желательно, чтобы этот открытый ключ принадлежал паре ключей, для которой конечный пользователь не владеет (или, по крайней мере, не носит) закрытым ключом. Таким образом, конечный пользователь не сможет расшифровать собранные данные даже под принуждением.
androidqf передает каждый сбор в zip-архив. Если вы поместите файл с именем key.txt в текущую рабочую папку, androidqf зашифрует поток zip с помощью age и запишет <UUID>.zip.age; в противном случае он записывает незашифрованный <UUID>.zip. androidqf также проверяет наличие key.txt в той же папке, что и исполняемый файл; если оба файла существуют, текущая рабочая папка имеет приоритет.
Зашифрованные сборы не создают архив сбора в открытом виде. Файлы устройства, которые необходимо проверить перед добавлением в зашифрованный архив, временно сохраняются с аутентифицированным шифрованием ChaCha20-Poly1305. См. Архивы сбора для полного потока данных и поведения с большими APK.
После получения зашифрованного файла сбора вы можете расшифровать его с помощью age следующим образом:
$ age --decrypt -i ~/path/to/privatekey.txt -o <UUID>.zip <UUID>.zip.age
Имейте в виду, что всегда существует вероятность восстановления хотя бы части незашифрованных данных с помощью продвинутых методов криминалистики — хотя мы работаем над смягчением этого.
Цель androidqf — облегчить добровольный криминалистический анализ устройств тех, кто может быть целью сложных атак мобильных шпионских программ, особенно членов гражданского общества и маргинализированных сообществ. Мы не хотим, чтобы androidqf способствовал нарушению конфиденциальности лиц, не давших согласия. Поэтому цель этой лицензии — запретить использование androidqf (и любого другого программного обеспечения, лицензированного таким же образом) для целей враждебной криминалистики.
Для достижения этой цели androidqf выпускается под лицензией MVT License 1.1, адаптацией Mozilla Public License v2.0. Эта модифицированная лицензия включает новое положение 3.0, «Ограничение на добровольное использование», которое разрешает использование лицензированного программного обеспечения (и любой «крупной работы», созданной на его основе) исключительно с явного согласия лица/лиц, чьи данные извлекаются и/или анализируются («Владелец данных»).
| Данные | Необязательно? | Путь(и) вывода |
|---|
| Полная резервная копия или резервная копия SMS и MMS-сообщений. | ✅ | backup.ab |
| Вывод команды оболочки getprop, предоставляющий информацию о сборке и параметры конфигурации. | getprop.txt | |
| Все системные настройки | settings_*.txt | |
| Вывод команды оболочки ps, предоставляющий список всех запущенных процессов. | processes.txt | |
| Список системных служб. | services.txt | |
| Копия всех журналов из системы. | logs/, logcat.txt | |
| Вывод команды оболочки dumpsys, предоставляющий диагностическую информацию об устройстве. | dumpsys.txt | |
| Список всех установленных пакетов и связанных файлов распространения. | packages.json | |
| Копия всех установленных APK или только тех, которые не помечены как системные приложения. | ✅ | apks/* |
| Журналы вторжений. Содержат личные данные, такие как история навигации. | ✅ | intrusion_logs/* |
| Список файлов в системе. | files.json | |
| Копия файлов, доступных во временных папках. | tmp/* | |
| Отчет об ошибках, содержащий системные и прикладные журналы без включения личных данных. | bugreport.zip |
| Пояснение |
|---|
| Only SMS | Выполняется adb backup com.android.providers.telephony. Собираются только данные от com.android.providers.telephony. Это включает базу данных SMS. |
| Everything | Выполняется adb backup -all. Запрашивается резервное копирование только тех приложений, которые явно разрешили резервное копирование своих данных этим способом. Начиная с Android 12+, этот метод не извлекает ничего для почти всех приложений. |
| No backup | adb backup не выполняется |