Usamos muitas técnicas para ajudar as pessoas a recuperar seus dados com nossos produtos, e boa parte da engenhosidade que desenvolvemos ao longo da última década fica sob a superfície. Hoje vamos mergulhar em uma das abordagens que usamos para recuperar mensagens apagadas: a recuperação forense de dados SQLite.
Afinal, como os iPhones armazenam dados?
Em poucas palavras, muitos apps guardam seus dados em bancos de dados, e a maioria usa o formato SQLite. O SQLite é um formato de banco de dados pequeno e enxuto, sem servidor, que atende bem ao que a Apple e os fornecedores de apps precisam. Como o SQLite funciona sem um servidor de banco de dados separado, ele difere de outros bancos de dados em alguns pontos. Em especial, para que o acesso seja rápido, ele não pode se manter com regularidade enquanto está em uso. Ninguém quer que um app fique lento enquanto o banco de dados faz uma manutenção de rotina, como limpar índices, por exemplo.
É possível que essas operações de limpeza ou otimização aconteçam no SQLite, mas elas tendem a ser executadas com pouca frequência. Para os usuários, esse é o equilíbrio certo: o iPhone fica razoavelmente rápido e os dados ficam robustos. E, se for preciso, você terá chances acima da média de recuperar os dados apagados do iOS, justamente por esse processo de manutenção ser pouco frequente.
Sem entrar em detalhes técnicos demais, o processo é bem simples. Pense nesses bancos de dados como grandes arquivos de pastas suspensas:
- Quando é hora de adicionar informações, você coloca uma pasta com uma etiqueta bem legível explicando o que há nela, e é assim que o seu telefone funciona.
- Mas, quando você remove dados, em vez de tirar a pasta do arquivo, o telefone simplesmente arranca a etiqueta. Assim, os dados antigos não são removidos, apenas ficam sem etiqueta (ou “órfãos”, como poderíamos dizer tecnicamente). Isso significa que, ao apagar dados, o telefone não precisa passar por um processo relativamente lento de liberar espaço no arquivo. Ele só diz “hum, esquece isso” e segue em frente.
- Na hora de adicionar mais dados, se houver espaço, o telefone acrescenta novas pastas. Se não houver espaço, ele procura as pastas sem etiqueta que ficaram por ali e, se encontrar alguma, descarta as partes delas de que precisar para abrir espaço.
O que você pode concluir disso é que apagar dados no telefone é rápido, e adicioná-los também é bastante rápido, desde que haja espaço. E, ao contrário do que se imagina, é o processo de adicionar dados mais novos que leva à remoção das informações mais antigas.
Recuperando informações apagadas do SQLite no iOS
Digamos que você use o telefone há alguns meses. Os bancos de dados nele são como os arquivos de pastas que descrevemos antes. Eles contêm vários registros e, onde você apagou dados, esses registros continuam lá, com duas ressalvas: podem ter sido parcial ou totalmente sobrescritos e estarão sem etiqueta.
A técnica de recuperação, então, é basicamente o que você imagina: encontrar esses registros órfãos, completos ou não, tentar descobrir onde eles se encaixam e se restam dados suficientes para fazerem sentido. Como seria de esperar, é tudo meio trabalhoso, e há várias outras questões técnicas que podem surgir e complicar as coisas. Em particular, bancos de dados com mais de alguns megabytes e bancos de dados que contêm dados binários podem tornar o processo bem mais difícil.
Dito isso, não é muito difícil recuperar alguns dados, e é por isso que há tantas ferramentas no mercado que afirmam conseguir fazer isso. Em geral, é possível dividir essas ferramentas em três categorias:
- As boas. Usam muitas técnicas diferentes, criadas e testadas com milhares de exemplos diferentes de exclusão ou corrupção.
- As ruins. Só recuperam o conteúdo restante que está perfeitamente íntegro e traz várias pistas sobre onde ele se encaixa.
- As feias. Elas varrem o conteúdo órfão e apontam qualquer lixo antigo que pareça se encaixar no contexto, se você olhar de olhos semicerrados. “NSMutableArray”: será que esse é o nome do registro de contato que sumiu? Hmmm.
Recuperação de dados SQLite apagados do iOS no mundo real
Agora que falamos um pouco sobre como isso funciona, vamos ver como é eficaz no mundo real. Afinal, queremos que usuários comuns recuperem seus dados sem precisar ser especialistas. Será que conseguimos? Vamos comparar as quatro principais ferramentas de recuperação de SQLite com o iPhone Backup Extractor. No momento em que escrevemos, as versões mais recentes dessas ferramentas são:
| Nome | Versão e data de lançamento | Plataformas | Preço |
|---|---|---|---|
| Reincubate iPhone Backup Extractor | 7.6.1.2201, maio de 2018 | Windows e macOS | $34.95 |
| SQLite Doctor, da SQLabs | 1.3.0, ago. de 2013 | Windows e macOS | $49 |
| Sqlite Database Recovery, da SysTools | 1.2, sem data de lançamento informada | Somente Windows | $149 |
| Stellar Phoenic Repair For Sqlite, da Stellar Data Recovery 1.0, sem data de lançamento informada | Somente Windows | $599 | |
| Forensic Explorer (FEX), da GetData | 4.3.5.7364, maio de 2018 | Somente Windows | $1,695 |
| Sqlite Forensics Explorer, da Acquire Forensics | 2.0, sem data de lançamento informada | Somente Windows | $149 |
Para montar este teste, vamos usar um banco de dados bem grande, cheio de dados do mundo real. Neste caso, é um banco de dados de “Mensagens” de 169 MB, extraído de um iPhone com iOS 11. Vamos dar uma olhada: os comandos a seguir mostram o tamanho do arquivo e o resultado de uma consulta que conta quantas mensagens ele contém.
$ ls -l sms.db
-rw------- 1 afitzpatrick 177565696 Oct 2 2017 sms.db
$ sqlite3 sms.db
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
sqlite> SELECT COUNT(*) FROM message;
220261
Ou seja, há mais de 220.000 mensagens. São as que não foram apagadas. Mas quantas das mensagens apagadas as ferramentas de recuperação conseguem encontrar?
Recuperação de dados SQLite do iOS: os resultados chegaram
Executamos todas as ferramentas acima no mesmo arquivo e anotamos os resultados na tabela abaixo. Gostaríamos de ter usado um Mac, mas, como nem todas as ferramentas oferecem suporte ao macOS, usamos um PC com 16 GB de RAM e Windows 10 Pro (versão 1803, build 17134.48).
| Reincubate | Acquire Forensics | SQLabs | SysTools | Stellar Data Recovery | GetData | |
|---|---|---|---|---|---|---|
| Quantidade recuperada | 342 | 56 (mas a maioria é lixo) | 0 | 0 (depois de uma varredura demorada, encontrou 220.261, que é o mesmo número de registros válidos que já existiam!) | 0 (a cada execução, contou até 37 mensagens apagadas, mas travou com o erro 0x40000015 antes de terminar o processo. Não foi possível exportar nem salvar nenhuma.) | 0 (We reached out multiple times to purchase a license, but never heard back.) |
| Recuperou “lixo”? | Nenhum; todas parecem ser mensagens válidas restauradas. Emojis, datas, horários e números de remetente/destinatário foram todos recuperados. | A maior parte do que foi recuperado é lixo | Precisamos inserir manualmente valores máximos de ROWID algumas vezes para testar parâmetros diferentes. Nenhuma mensagem foi recuperada em momento algum. | Só encontrou mensagens já existentes. | Travou todas as vezes, então não deu para saber. | Wasn’t possible to get it running. |
| Custo efetivo por mensagem recuperada (neste exemplo) | $0.10 | $2.66 | >$49 | >$149 | >$599 | >$1,695 |
Certo. Foi uma surpresa, porque esperávamos que todas recuperassem pelo menos alguns dados. Acontece que a nossa humilde ferramenta lidera o mercado em recuperação de dados SQLite, mesmo não sendo uma ferramenta dedicada a isso. (Se você já se perguntou, é por isso que também licenciamos a nossa tecnologia para outras empresas. Isso é difícil.)
Recuperação de dados SQLite em diferentes versões do iOS
A cada nova versão do iOS, a Apple tem a oportunidade de mudar a maneira como o sistema operacional trata os bancos de dados SQLite. Isso inclui otimizações na frequência com que a limpeza e outras operações de manutenção acontecem e em quais situações são acionadas.
À medida que os dispositivos ficam mais potentes, essas operações podem ser usadas com mais liberdade, pois seu impacto na experiência do usuário diminui. Por isso, a cada nova geração, um banco de dados SQLite tende a ser limpo com mais frequência, o que o torna mais rápido nas operações normais. Isso está alinhado ao objetivo da Apple de aumentar a proteção e a privacidade dos dados do usuário, já que nenhum dado indesejado permanece no dispositivo. Em compensação, isso inviabiliza a recuperação de dados pelo método SQLite.
No iOS 11, começamos a ver um aumento da atividade de limpeza do banco de dados de SMS e iMessages. A recuperação ainda é possível, e mais provável para mensagens mais recentes que foram apagadas depois, mas não é garantida.
No iOS 12, houve um grande aumento na frequência de limpeza do banco de dados de SMS e iMessages. Como essa versão foi apresentada como tendo um foco forte em manutenção e melhorias de velocidade, a mudança faz sentido, pois deve levar a um desempenho mais fluido nas operações mais comuns.
O que preciso fazer para aproveitar isso ao recuperar dados do iOS?
Talvez essa seja a melhor parte: essa tecnologia está integrada ao Reincubate iPhone Backup Extractor desde os primeiros dias. Ao usar o app, ela é aplicada na visualização ou exportação das suas mensagens e de vários outros tipos de dados. Dependendo dos dados que você está vendo e da forma como os está vendo, o app indica quais informações foram recuperadas e quais não foram. Está tudo incluído.






