Récupérer le contenu supprimé de la partition userdata?

23

Il s'est donc avéré qu'Amanda a eu un moment blond et a supprimé tous ses fils dans l'application SMS par erreur. Oui, "Supprimer tous les threads" ne devrait probablement pas être aussi facile à invoquer.

Le téléphone est une lame ZTE, avec toutes ses données utilisateur stockées de manière peu pratique sur un système de fichiers YAFFS2.

J'ai une vieille sauvegarde, mais les SMS que je dois récupérer sont depuis. Il y en a probablement sur la carte SIM, j'ai donc commandé un lecteur SIM. Je soupçonne que la vingtaine qu'il contient sont pour la plupart des spams d'opérateurs de réseau, de toute façon.

Donc, je maudis mon plan de sauvegarde inefficace et jure de sauvegarder les SMS sur GMail à l'avenir.

En attendant, je décide de récupérer mmssms.db, ou ce qu'il en reste.

Tout d'abord, je connecte adb et vérifie les supports, puis tente de copier le bloc sur une image sur la carte SD:

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

Pas de chance. Je raisonne que le démontage forcé serait une mauvaise idée et ne fonctionnera probablement en aucun cas.

Donc, je télécharge une copie liée statiquement de busybox sur la carte SD et utilise l'option conv = noerror.

Je me suis retrouvé avec un fichier dont la taille augmentait jusqu'à ce que la carte SD se remplisse.

Qu'est-ce que je fais mal? ClockworkMod prend-il une image dans le vrai sens ou sauvegarde-t-il simplement les fichiers et les intègre-t-il dans une image? Existe-t-il un programme de récupération YAFFS2? (Les deux articles que j'ai lus semblent faisables, mais je n'ai même pas vu de code PoC)

Tous les indices reçus avec reconnaissance /

Modifier: le téléphone est enraciné. Très enraciné :)

Modifier davantage:

La plupart des messages trouvés dans 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

Avec un peu de chance, SMS Backup & Restore permettra une fusion.

Mandy
la source
Votre lame est-elle enracinée?
t0mm13b
@Mandy: Concernant votre autre question: Yaffs2 est un système de fichiers flash qui a une protection contre l'usure pour le stockage flash sous-jacent (il a un modèle de données structuré de journal où les écritures ne sont pas en place mais vont toujours à la fin du "journal" et l'ancien espace inutilisé est récupéré de la tête. Très simplement expliqué). Si vous n'avez pas trop écrit, vous trouverez probablement des instances de fichiers plus anciennes. En ignorant la partie de la queue juste avant la suppression, vous pourriez avoir de la chance. Je n'ai pas encore fait de découpe de fichier pour YAFFS2.
ce4

Réponses:

19

La base de données sms est stockée dans /data/data/com.android.providers.telephony/databases/mmssms.dblaquelle est ce que vous voulez faire.

La meilleure chose à faire est la suivante, ne branchez pas encore le câble USB:

  1. Redémarrez dans ClockWorkmod Recovery.
  2. Allez dans Montures et Stockage
  3. Sélectionner mount /data
  4. Branchez l'USB
  5. Depuis le shell ou le terminal de commande Windows, adb shell
  6. Puisque vous êtes dans ClockworkMod Recovery, vous êtes root par défaut, faites-le maintenant cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/MySmsDatabase.db
  7. quitter le adb shellen tapant ceci:exit
  8. Votre base de données est maintenant copiée sur la carte SD.
  9. Sortez de la récupération ClockworkMod et redémarrez simplement, la récupération sera unmount /datapour vous.

À ce stade, votre base de données est désormais copiée. Et peut être extrait en toute sécurité via quelque chose comme SqliteMan . HTH.

Edit: L'OP était intéressé de savoir comment un vidage peut être fait. - Continuer à lire :)

Lorsque vous invoquez ceci (avec USB branché et dans le 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"

Sachant quelle partition est la clé .. Ainsi , par exemple de ma lame, je vois que userdata est sur la partition mtd6, dans lequel les informations de partition réelle peut être trouvée à l' intérieur de /dev/mtd/mtdXsorte que son une question de le faire en utilisant cat:

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

Et à partir de là, en /sdcard/myuserdata.dumpfonction du système de fichiers utilisé sur cette partition, il peut être monté via un bouclage. Le kilométrage variera et bien sûr, c'est une situation de poulet et d'oeuf, afin de faire tout cela, le combiné doit être enraciné.

t0mm13b
la source
Cela a été très utile, tous (ou au moins la plupart) des SMS supprimés étaient en mmssms.db-wal: Merci beaucoup pour le pointeur utile!
Mandy
Ma question est cependant posée - est-il possible de vider une image si la situation l'exige?
Mandy
Oui, je vais modifier la réponse ... :)
t0mm13b
@ t0mm13b Maintenant, c'est une excellente réponse :) +1
Zuul
1
Vous, monsieur, êtes «# @!% Ing génial. Me donner un coup de pied pour ne pas avoir persisté dans la recherche de nom et de grep, mais la panique vous fait ça. De plus, j'aurais regardé un eejit approprié en train de passer tous mes SMS en chaînes et moins pour les lire, alors merci encore;)
Mandy