Recuperar mensagens apagadas do WhatsApp

 

Recuperar mensagens apagadas do WhatsApp usando o incremento Msgstore

Recentemente, ao analisar um smartphone Android , foi necessĂĄrio recuperar mensagens apagadas pertencentes a um chat excluĂ­do do aplicativo WhatsApp . AtĂŠ recentemente, mesmo realizando uma anĂĄlise usando softwares profissionais como Cellebrite UFED, Oxygen Forensic Detective e Magnet Axiom, nĂŁo era possĂ­vel recuperar esse chat porque ele foi excluĂ­do antes de ser inserido no backup periĂłdico local clĂĄssico do banco de dados “msgstore.db” e, portanto, nĂŁo era visĂ­vel com mĂŠtodos padrĂŁo de recuperação de dados.

Recentemente, foi adicionada aos softwares de perícia forense móvel a funcionalidade de recuperar chats não presentes em backups periódicos, mas acreditamos ser útil ilustrar em detalhes como era possível, mesmo antes da adição, – e ainda é – proceder manualmente à inspeção dos arquivos relacionados ao aplicativo WhatsApp e recuperar chats excluídos.

Especificamente, ilustraremos como recuperar uma parte do chat – nĂŁo presente no BD ou em backups tradicionais – graças Ă  anĂĄlise de outro arquivo de backup, incremental e nĂŁo completo: o “ msgstore-increment.db â€œ.

O que ĂŠ msgstore-increment.db e para que ele ĂŠ usado?

O aplicativo WhatsApp, quando instalado em dispositivos Android, faz backups periĂłdicos do banco de dados principal “msgstore.db” , que contĂŠm todas as informaçþes relacionadas Ă  conta do WhatsApp, incluindo mensagens.

Infelizmente, criar backups e gerenciĂĄ-los, em alguns casos, pode ser difĂ­cil para o aplicativo, especialmente em situaçþes em que os dados gerenciados tĂŞm centenas de MB, se nĂŁo GB. Por isso, para minimizar a perda de dados e otimizar o gerenciamento de memĂłria do aparelho, o WhatsApp realiza backups incrementais entre cada backup completo, nos quais sĂŁo salvas apenas as alteraçþes ocorridas no aplicativo : por exemplo, se cem mensagens forem enviadas no dia seguinte ao backup completo, elas serĂŁo incluĂ­das no backup incremental realizado naquele dia.

Isso significa que se cem mensagens forem enviadas após o backup completo ter sido criado e depois excluídas, elas poderão ser recuperadas do backup incremental, desde que não tenham sido excluídas antes de sua criação.

Atualmente, softwares profissionais como o Cellebrite UFED ou o Oxygen Forensics oferecem suporte Ă  anĂĄlise do backup incremental msgstore-increment, mas atĂŠ alguns meses atrĂĄs esse provavelmente era um recurso em andamento, pois apareceu recentemente. Consequentemente, antigamente, para tentar recuperar mensagens apagadas, era necessĂĄrio entender a lĂłgica por trĂĄs desse tipo de dado e criar um script capaz de automatizar a extração de quaisquer mensagens apagadas, mas ainda presentes no incremento , enquanto hoje, quem tem um software profissional disponĂ­vel pode realizar a recuperação diretamente pelas funçþes internas.

Como funciona e como extraio dados do arquivo msgstore-increment.db ?

O primeiro passo foi nos aprofundar em como o backup incremental funciona, tendo primeiro replicado um cenĂĄrio em que esse recurso gerava incrementos. Ao analisar os dados gerados pelo aplicativo WhatsApp, foram identificados e analisados ​​diversos arquivos denominados “msgstore-increment.db.crypt14”, que sĂŁo arquivos compactados e criptografados. Esses arquivos foram descriptografados utilizando a ferramenta “wa-crypt-tools” ( https://github.com/ElDavoo/wa-crypt-tools ) e, posteriormente, descompactados, obtendo-se arquivos estruturados em formato JSON e um arquivo binĂĄrio denominado “messages.bin”.

arquivo-descriptografado-incremento

ConteĂşdo do arquivo msgstore-increment.db.crypt14, backup incremental

Entre os arquivos JSON, há um chamado “header.json” que contém informações úteis relacionadas aos outros arquivos na pasta, incluindo “messages.bin”. Além disso, a partir da análise realizada no arquivo binário, foi possível determinar o formato utilizado para codificação dos dados, ou seja, o protocolo protobuf.

Protobuf Ê um formato de serialização de dados desenvolvido pelo Google e Ê frequentemente usado na transmissão de informaçþes entre aplicativos ou para armazenar dados em formato binårio porque Ê mais leve e tem melhor desempenho que JSON ou XML.

O funcionamento é relativamente simples, é necessário definir a estrutura dos dados criando um arquivo “.proto” e utilizar um compilador para criar um script capaz de codificar os dados com base no protocolo definido. Abaixo está um exemplo de uma definição de protocolo:

Exemplo de definição para protobuf

Exemplo de definição para protobuf

Neste caso, um script baseado nesta definição será capaz de criar um arquivo binário contendo os dados de “nome” e “idade” informados no arquivo protobuf.

O mesmo acontece no aplicativo WhatsApp: o arquivo binário “messages.bin” é criado a partir de um trecho de código contido no aplicativo e tem como base um arquivo “proto” dentro do qual é definida a estrutura das mensagens e conversas.

AlĂŠm disso, o arquivo binĂĄrio “messages.bin” ĂŠ estruturado com uma ou mais porçþes de dados binĂĄrios codificados em protobuf, tais porçþes tambĂŠm sĂŁo chamadas de segmentos ou “delimitados por comprimento” ( https://protobuf.dev/programming-guides/encoding/#length-types ). Portanto, para ler o conteĂşdo do arquivo ĂŠ necessĂĄrio primeiro separar os vĂĄrios segmentos e depois prosseguir com a leitura.

Representação de segmentos contidos no arquivo messages.bin

Representação de segmentos contidos no arquivo messages.bin

Para separar cada segmento individual presente no arquivo “messages.bin” criamos um script python, que disponibilizamos em nosso repositĂłrio GitHub ( https://github.com/Forenser-lab/wa-increment-decoder/blob/main/splitter.py ), capaz de ler o arquivo “messages.bin” e criar diferentes arquivos binĂĄrios, cada um contendo os dados protobuf (segmento) a serem lidos.

Em seguida, para ler cada arquivo individual, usamos a ferramenta “protobuf inspector” ( https://github.com/mildsunrise/protobuf-inspector ), um script capaz de ler um arquivo binĂĄrio codificado com protobuf:

SaĂ­da da ferramenta protobuf_inspector

SaĂ­da da ferramenta protobuf_inspector

Embora tenha sido possível extrair as diversas mensagens contidas nos segmentos, elas acabaram sendo uma agregação de dados “anônimos”. Embora alguns dos dados obtidos na extração do bate-papo contivessem campos com significado intuitivo, como o texto da mensagem ou o registro de data e hora, outros eram desconhecidos, dificultando a determinação de seu significado real. Isso acontece porque não temos a definição do protocolo “proto” utilizado pelo Meta e capaz de ler corretamente os dados contidos no arquivo binário.

No entanto, existem vĂĄrios projetos de engenharia reversa online que visam definir o protocolo usado no WhatsApp, incluindo o do repositĂłrio Wa-Proto GitHub ( https://github.com/wppconnect-team/wa-proto ) realizado na versĂŁo web do software. Posteriormente, tentando adaptar sua definição ao nosso propĂłsito, conseguimos decodificar corretamente todo o conteĂşdo do arquivo binĂĄrio “messages.bin” obtendo todos os dados em texto simples com seu significado relativo.

Neste ponto, era simples criar um script que pudesse gerar um arquivo CSV contendo todas as mensagens no binĂĄrio , indicando se uma mensagem havia sido excluĂ­da. Observe que foram realizados alguns testes que tambĂŠm consideraram mĂ­dias (imagens, vĂ­deos, etc.) e em alguns casos na pasta descriptografada e descompactada relacionada ao incremento hĂĄ a pasta “messages.bin” contendo miniaturas de imagens excluĂ­das (as atualizaçþes subsequentes terĂŁo como objetivo verificar atĂŠ que ponto ĂŠ possĂ­vel recuperar mĂ­dias ou vestĂ­gios delas).

Prova de conceito de descriptografia e anĂĄlise de msgstore-increment.db

Primeiro, o cenário foi reproduzido: inicializamos um novo chat, o utilizamos por alguns dias e então finalmente o excluímos, evitando que ele ficasse armazenado no backup “msgstore.db”. Graças a essa reprodução, embora as mensagens de bate-papo não tenham sido incluídas no backup semanal, elas ainda foram incluídas no backup incremental diário.

A imagem a seguir mostra uma ilustração do cenårio reproduzido. Especificamente, você pode ver como o backup principal Ê criado às 02:00 da manhã do dia 01/10 e, às 01:35 da tarde do mesmo dia, uma conversa com o ID 123 Ê criada, a qual serå incluída no backup incremental às 02:00 da manhã do dia 01/11. Por fim, às 16:00 do dia 01/11 o chat com ID 123 Ê deletado (mas ainda estå presente no backup incremental criado anteriormente):

Cronograma do cenĂĄrio de referĂŞncia

Cronograma do cenĂĄrio de referĂŞncia

Posteriormente, os backups incrementais foram extraídos do dispositivo Android, geralmente contidos no diretório “/data/media/0/Android/media/com.whatsapp/WhatsApp/Databases/” e devidamente descriptografados utilizando a chave de criptografia apropriada, obtendo-se assim os seguintes arquivos:

  • msgstore-incremento-1-2025-01-16.1.db;
  • msgstore-incremento-2-2025-01-16.1.db;
  • msgstore-incremento-3-2025-01-16.1.db;
  • msgstore-incremento-4-2025-01-16.1.db.

Os vĂĄrios backups foram todos inseridos na mesma pasta e entĂŁo o script que criamos para recuperar as mensagens foi executado, o que gerou um arquivo CSV contendo a lista de todas as mensagens extraĂ­das:

Gerar arquivo CSV contendo mensagens recuperadas

Gerar arquivo CSV contendo mensagens recuperadas

ConclusĂľes

Graças a uma anĂĄlise aprofundada do gerenciamento de backup no aplicativo WhatsApp para dispositivos Android, conseguimos entender como eles sĂŁo estruturados por meio do conceito de backups incrementais . A anĂĄlise nos levou a criar uma pequena ferramenta, escrita em python, capaz de extrair mensagens do backup incremental â€œ msgstore-increment.db â€ de forma estruturada e eficiente, com detalhes relevantes como o timestamp e sem a necessidade de utilizar outras ferramentas.

O recurso de backup incremental permite a recuperação de mensagens excluídas entre a criação de um backup local completo, “msgstore.db.crypt14” e outro, portanto não recuperáveis ​​por meio de técnicas tradicionais de análise forense e não excluídas do banco de dados sqlite ou de backups.

Para quem quiser experimentar ou tentar a extração dessas mensagens, deixamos abaixo o link do script para download no nosso repositĂłrio no GitHub ( https://github.com/Forenser-lab/wa-increment-decoder ).


Para informaçþes ou orçamentos, entre em contato com o Studio Forenser Srl atravĂŠs da pĂĄgina de contato ou preenchendo o formulĂĄrio abaixo.

    Nome ou Nome da Empresa *

    E-mail *

    Telefone

    Mensagem *

    Li as informaçþes sobre o processamento de dados *
    Dou o meu consentimento para o processamento de dados *


    ComentĂĄrios

    Ebook

    Postagens mais visitadas