Recuperar conteúdo excluído da partição userdata?


23

Então aconteceu que Amanda teve um momento louro e excluiu todos os seus tópicos no aplicativo SMS por engano. Sim, "Excluir todos os tópicos" provavelmente não deve ser tão fácil de chamar.

O telefone é um ZTE Blade, com todos os dados do usuário armazenados de forma inconveniente em um sistema de arquivos YAFFS2.

Eu tenho um backup antigo, mas os SMS que preciso recuperar são desde então. Provavelmente existem alguns no cartão SIM, então pedi um leitor SIM. Suspeito que os vinte mais ou menos possuídos sejam principalmente spam de operadora de rede.

Portanto, amaldiçoo meu plano ineficaz de backup e prometo fazer o backup do SMS no GMail no futuro.

Enquanto isso, resolvo recuperar o mmssms.db, ou o que resta dele.

Primeiro, conecto o adb e verifico as montagens, depois tento copiar o bloco para uma imagem no cartão SD:

dd if=/dev/block/mtdblock6 of=/sdcard/data.img 

Não tenho tanta sorte. Eu raciocino que desmontar à força seria uma péssima idéia e provavelmente não funcionará em nenhum caso.

Portanto, carrego uma cópia do busybox vinculada estaticamente ao cartão SD e uso a opção conv = noerror.

Acabei com um arquivo que continuava aumentando de tamanho até o cartão SD ficar cheio.

O que estou fazendo errado? O ClockworkMod obtém uma imagem no verdadeiro sentido ou apenas faz o backup dos arquivos e os compacta em uma imagem? Existe um programa de recuperação YAFFS2? (Os dois artigos que li fazem com que pareça viável, mas eu não vi nem o código PoC)

Quaisquer pistas recebidas com gratidão /

Editar: o telefone está enraizado. Muito enraizado :)

Edição adicional:

A maioria das mensagens encontradas no mmssms.db-wal:

ls -al /data/data/com.android.providers.telephony/databases
drwxrwx--x    1 radio    radio         2048 Jul 17 20:16 .
drwxr-xr-x    1 radio    radio         2048 Oct 26  2011 ..
-rw-rw----    1 root     root         60416 Jul 17 20:16 mmssms.db
-rw-rw----    1 radio    radio        32768 Jul 17 16:18 mmssms.db-shm
-rw-rw----    1 radio    radio       628832 Jun 30 19:23 mmssms.db-wal
-rw-rw-rw-    1 root     root         60416 Jul 17 20:16 mmssms.db.xxx
-rw-rw----    1 radio    radio       132096 Jun 18 13:25 telephony.db
-rw-rw----    1 radio    radio        32768 Jul 16 22:14 telephony.db-shm
-rw-rw----    1 radio    radio       106928 Jul 16 22:14 telephony.db-wal

Com alguma sorte, o SMS Backup & Restore permitirá uma fusão.


Sua lâmina está enraizada?
t0mm13b

@Mandy: Em relação à sua outra pergunta: o Yaffs2 é um sistema de arquivos flash que possui proteção de nível de desgaste para o armazenamento flash subjacente (possui um modelo de dados com registro de log em que as gravações não estão no lugar, mas sempre segue o final do "log" e o antigo espaço não utilizado é recuperado da cabeça, explicado com muita simplicidade). Se você não escreveu muito, provavelmente poderá encontrar instâncias mais antigas de arquivos. Ignorando a parte da cauda imediatamente antes da exclusão, você pode ter sorte. Até o momento, não fizemos a gravação de arquivos para o YAFFS2.
ce4

Respostas:


19

O banco de dados sms é armazenado /data/data/com.android.providers.telephony/databases/mmssms.dbe é o que você deseja fazer.

A melhor coisa a fazer é isso, ainda não conecte o cabo USB:

  1. Reinicie no ClockWorkmod Recovery.
  2. Vá para Montagens e armazenamento
  3. Selecione mount /data
  4. Conecte o USB
  5. No shell de comando ou terminal do Windows, adb shell
  6. Como você está no ClockworkMod Recovery, você é root por padrão, agora faça isso cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/MySmsDatabase.db
  7. saia do adb shelldigitando isto:exit
  8. Agora seu banco de dados é copiado para o cartão SD.
  9. Retire a recuperação ClockworkMod e apenas reinicie, a recuperação será unmount /datapara você.

Nesse estágio, seu banco de dados agora é copiado. E pode ser extraído com segurança usando algo como SqliteMan . HTH.

Edit: O OP estava interessado em saber como um despejo pode ser feito. - Leia :)

Quando você invoca isso (com o USB conectado e dentro do adb shell)

sh-4.1# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00500000 00020000 "recovery"
mtd1: 00500000 00020000 "boot"
mtd2: 00120000 00020000 "splash"
mtd3: 00080000 00020000 "misc"
mtd4: 02580000 00020000 "cache"
mtd5: 0d700000 00020000 "system"
mtd6: 0cb80000 00020000 "userdata"
mtd7: 00020000 00020000 "oem"
mtd8: 00180000 00020000 "persist"

Conhecendo qual partição é a chave. Então, por exemplo, no meu Blade, posso ver que os dados do usuário estão na partição mtd6, na qual as informações reais da partição podem ser encontradas, /dev/mtd/mtdXportanto é uma questão de fazer isso usando cat:

cat /dev/mtd/mtd6 > /sdcard/myuserdata.dump

E a partir daí, usando o /sdcard/myuserdata.dump, dependendo do sistema de arquivos usado nessa partição, ele pode ser montado via loop-back. A quilometragem varia e, é claro, é uma situação de galinha e ovo, para fazer tudo isso, o aparelho precisa estar enraizado.


Isso foi muito útil, todos (ou pelo menos a maioria) dos SMS excluídos estavam em mmssms.db-wal: Muito obrigado pelo ponteiro útil!
Mandy

Minha pergunta permanece, no entanto - é possível despejar uma imagem se a situação exigir?
Mandy

Sim, vou alterar a resposta ... :)
t0mm13b

@ t0mm13b Agora, esta é uma grande resposta :) +1
Zuul

1
Você, senhor, é incrível. Me chutando por não persistir com find -iname e grep, mas o pânico faz isso com você. Além disso, eu teria olhado uma eejit adequada tubulação todo o meu SMS em cordas e menos para lê-los, por isso obrigado novamente;)
Mandy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.