
androidqf (Android Quick Forensics) ajuda a reunir rapidamente evidências forenses de dispositivos Android, a fim de identificar possíveis vestígios de comprometimento.
androidqf (Android Quick Forensics) é uma ferramenta portátil para simplificar a aquisição de dados forenses relevantes de dispositivos Android.
androidqf tem como objetivo fornecer um utilitário simples e portátil multiplataforma para adquirir rapidamente dados de dispositivos Android. É semelhante em funcionalidade ao mvt-android. No entanto, ao contrário do MVT, o androidqf foi projetado para ser facilmente usado também por usuários não especializados em tecnologia. Os dados extraídos pelo androidqf podem ser analisados com o MVT.
Este repositório é um fork do androidqf mantido pelo Security Lab da Anistia Internacional. A ferramenta androidqf foi originalmente desenvolvida por Claudio Guarnieri.

Binários executáveis para Linux, Windows e Mac devem estar disponíveis na última versão. Caso você tenha problemas para executar o binário, talvez queira compilá-lo você mesmo.
Este projeto usa o GoReleaser para compilações e lançamentos automatizados. Para compilar localmente:
Instale o GoReleaser:
go install github.com/goreleaser/goreleaser@latest
Execute uma compilação de snapshot (sem publicação):
./build_locally.sh
Isso criará binários para todas as plataformas no diretório dist/, incluindo um binário universal para macOS que funciona tanto em Intel quanto em Apple Silicon.
Você ainda pode usar a abordagem tradicional do Makefile. Você precisará do Go 1.23+ instalado, junto com make, git, unzip e wget. O AndroidQF inclui um collector compilado de forma cruzada que é executado no dispositivo alvo para extrair informações forenses relevantes de forma mais confiável.
Primeiro compile o módulo collector:
make collector
Em seguida, compile o AndroidQF para a plataforma de sua escolha:
make linux
make darwin
make windows
Esses comandos gerarão binários em uma pasta build/.
Pacotes de distribuição podem optar por não incorporar os binários ADB e collector empacotados, compilando com a tag de compilação unbundle:
go build -tags unbundle -o build/
Quando esta tag está ativada, o androidqf espera:
adb esteja disponível no PATH do sistema./usr/lib/androidqf/android-collector/ usando os nomes esperados pelo androidqf, como collector_arm e collector_arm64.Os empacotadores podem remover os ativos binários empacotados de assets/ antes de compilar, mas o diretório do pacote assets/ e seus arquivos fonte Go devem permanecer presentes. A compilação unbundle ainda importa o pacote assets, e a compilação falhará se todo o diretório assets/ for excluído.
A imagem de contêiner da versão é publicada no GitHub Container Registry:
docker pull ghcr.io/mvt-project/androidqf:latest
Para coletar de um dispositivo Android conectado via USB no Linux, passe o barramento USB e monte um diretório de saída:
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
Você também pode compilar a imagem localmente para uma versão lançada:
docker build --build-arg VERSION=1.8.3 -t androidqf .
[!TIP] Consulte Arquivos de aquisição para o formato do arquivo, hashes de integridade, criptografia e manipulação de arquivos grandes. Para um dicionário dos arquivos coletados, consulte o dicionário de saída do AndroidQF do SocialTIC de terceiros.
Antes de iniciar o androidqf, você precisa ter o dispositivo Android alvo conectado ao seu computador via USB e ter ativado a depuração USB. Consulte a documentação oficial sobre como fazer isso, mas lembre-se de que telefones Android de diferentes fabricantes podem exigir etapas de navegação diferentes das padrão.
Uma vez ativada a depuração USB, você pode prosseguir com a inicialização do androidqf. Ele primeiro tentará se conectar ao dispositivo através da ponte USB, o que deve fazer com que o telefone Android solicite que você autorize manualmente as chaves do host. Certifique-se de autorizá-las, idealmente permanentemente, para que a solicitação não apareça novamente.
Agora o androidqf deve estar em execução e criando um arquivo zip de aquisição no seu diretório de trabalho atual, ou no diretório fornecido com -output. Em algum momento da execução, o androidqf solicitará algumas escolhas: essas solicitações pausarão a aquisição até que você faça uma seleção, portanto, preste atenção.
Os seguintes dados podem ser extraídos:
Toda aquisição também contém acquisition.json, command.log quando a saída de log foi produzida, e hashes.csv. A lista de hashes registra o resumo SHA-256 de cada entrada de arquivo simples precedente e não inclui a si mesma. As pulls de dispositivo com falha não são registradas como entradas do arquivo. Consulte Arquivos de aquisição para detalhes.
As seguintes opções são apresentadas ao executar uma coleta do androidqf:
Would you like to take a backup of the device?
...
? Backup:
▸ Only SMS
Everything
No backup
Essas opções referem-se aos dados coletados do dispositivo executando o comando adb backup em segundo plano. Se No backup for selecionado, o comando adb backup não é executado.
| Opção | Explicação |
|---|---|
| Apenas SMS | adb backup com.android.providers.telephony é executado. Apenas dados de são coletados. Isso inclui o banco de dados SMS. |
Would you like to download copies of all apps or only non-system ones?
? Download:
▸ All
Only non-system packages
Do not download any
| Opção | Explicação |
|---|---|
| Todos | Todos os pacotes instalados serão recuperados do telefone |
| Apenas pacotes não-sistema | Não baixar nenhum pacote listado em adb pm list packages -s |
| Não baixar nenhum | Não baixar nenhum pacote |
Would you like to take the Intrusion Logs of the device?
? Intrusion Logs:
▸ Yes
No
| Opção | Explicação |
|---|---|
| Sim | Os Logs de Intrusão serão recuperados do telefone. |
| Não | A aquisição de Logs de Intrusão é ignorada. |
Carregar as aquisições do androidqf em uma unidade não criptografada pode expor você, e ainda mais aqueles de quem você adquiriu dados, a riscos significativos. Por exemplo, você pode ser parado em uma fronteira problemática e sua unidade do androidqf pode ser apreendida. Os dados brutos podem não apenas expor o propósito de sua viagem, mas também provavelmente conter dados muito confidenciais (por exemplo, lista de aplicativos instalados ou até mensagens SMS).
Idealmente, você deve ter a unidade totalmente criptografada, mas isso pode nem sempre ser possível. Você também pode considerar colocar o androidqf dentro de um contêiner VeraCrypt e carregar com ele uma cópia do VeraCrypt para montá-lo. No entanto, contêineres VeraCrypt são tipicamente protegidos apenas por uma senha, que você pode ser forçado a fornecer.
Alternativamente, o androidqf permite criptografar cada aquisição com uma chave pública age fornecida. De preferência, esta chave pública pertence a um par de chaves para o qual o usuário final não possui, ou pelo menos não carrega, a chave privada. Dessa forma, o usuário final não seria capaz de descriptografar os dados adquiridos mesmo sob coação.
O androidqf transmite cada aquisição em um arquivo zip. Se você colocar um arquivo chamado key.txt no diretório de trabalho atual, o androidqf criptografará o fluxo zip com age e escreverá <UUID>.zip.age; caso contrário, ele escreve um <UUID>.zip não criptografado. O androidqf também verifica se há key.txt na mesma pasta do executável; se ambos os arquivos existirem, o diretório de trabalho atual tem precedência.
Aquisições criptografadas não criam um arquivo de aquisição em texto simples. Os arquivos do dispositivo que devem ser validados antes de serem adicionados a um arquivo criptografado são armazenados temporariamente com criptografia autenticada ChaCha20-Poly1305. Consulte Arquivos de aquisição para o fluxo de dados completo e o comportamento de APKs grandes.
Depois de recuperar um arquivo de aquisição criptografado, você pode descriptografá-lo com age da seguinte forma:
$ age --decrypt -i ~/path/to/privatekey.txt -o <UUID>.zip <UUID>.zip.age
Tenha em mente que é sempre possível que pelo menos alguma parte dos dados não criptografados possa ser recuperada através de técnicas forenses avançadas - embora estejamos trabalhando para mitigar isso.
O objetivo do androidqf é facilitar a análise forense consensual de dispositivos daqueles que podem ser alvos de ataques sofisticados de spyware móvel, especialmente membros da sociedade civil e comunidades marginalizadas. Não queremos que o androidqf possibilite violações de privacidade de indivíduos que não consentiram. Portanto, o objetivo desta licença é proibir o uso do androidqf (e de qualquer outro software licenciado da mesma forma) para fins de forense adversarial.
Para alcançar isso, o androidqf é lançado sob a Licença MVT 1.1, uma adaptação da Mozilla Public License v2.0. Esta licença modificada inclui uma nova cláusula 3.0, "Restrição de Uso Consensual" que permite o uso do software licenciado (e qualquer "Trabalho Maior" derivado dele) exclusivamente com o consentimento explícito da(s) pessoa(s) cujos dados estão sendo extraídos e/ou analisados ("Proprietário dos Dados").
| Dado | Opcional? | Caminho(s) de saída |
|---|
| Um backup completo ou backup de mensagens SMS e MMS. | ✅ | backup.ab |
| A saída do comando shell getprop, fornecendo informações de compilação e parâmetros de configuração. | getprop.txt | |
| Todas as configurações do sistema | settings_*.txt | |
| A saída do comando shell ps, fornecendo uma lista de todos os processos em execução. | processes.txt | |
| A lista de serviços do sistema. | services.txt | |
| Uma cópia de todos os logs do sistema. | logs/, logcat.txt | |
| A saída do comando shell dumpsys, fornecendo informações de diagnóstico sobre o dispositivo. | dumpsys.txt | |
| Uma lista de todos os pacotes instalados e arquivos de distribuição relacionados. | packages.json | |
| Cópia de todos os APKs instalados ou apenas daqueles não marcados como aplicativos do sistema. | ✅ | apks/* |
| Logs de registro de intrusão. Contém dados privados, como histórico de navegação. | ✅ | intrusion_logs/* |
| Uma lista de arquivos no sistema. | files.json | |
| Uma cópia dos arquivos disponíveis em pastas temporárias. | tmp/* | |
| Um relatório de bug contendo logs do sistema e específicos de aplicativos, sem dados privados incluídos. | bugreport.zip |
com.android.providers.telephony| Tudo | adb backup -all é executado. Isso solicita backups apenas de aplicativos que permitiram explicitamente backups de seus dados através deste método. Desde o Android 12+, este método não extrai nada para quase todos os aplicativos. |
| Sem backup | adb backup não é executado |