¿Recuperar contenido eliminado de la partición de datos de usuario?

23

Entonces sucedió que Amanda tuvo un momento rubio y eliminó todos sus hilos en la aplicación de SMS por error. Sí, "Eliminar todos los hilos" probablemente no debería ser tan fácil de invocar.

El teléfono es un ZTE Blade, con todos sus datos de usuario almacenados de manera inconveniente en un sistema de archivos YAFFS2.

Tengo una copia de seguridad antigua, pero los SMS que necesito recuperar son de entonces. Probablemente hay algunos en la tarjeta SIM, así que he pedido un lector SIM. Sospecho que, de todos modos, los más de veinte son en su mayoría spam de operadores de red.

Entonces, maldigo mi plan de respaldo ineficaz y prometo hacer una copia de seguridad de SMS en GMail en el futuro.

Mientras tanto, decido recuperar mmssms.db, o lo que queda de él.

Primero, conecto adb y verifico los montajes, luego intento copiar el bloque a una imagen en la tarjeta SD:

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

No hay tanta suerte. Creo que desmontar por la fuerza sería una mala idea, y probablemente no funcionará en ningún caso.

Entonces, subo una copia estáticamente vinculada de busybox a la tarjeta SD y uso la opción conv = noerror.

Lo que terminé con fue un archivo que siguió aumentando de tamaño hasta que la tarjeta SD se llenó.

¿Qué estoy haciendo mal? ¿ClockworkMod toma una imagen en el verdadero sentido o solo hace una copia de seguridad de los archivos y los empaqueta en una imagen? ¿Existe un programa de recuperación YAFFS2? (Los dos documentos que he leído hacen que parezca factible, pero ni siquiera he visto el código PoC)

Cualquier pista recibida con gratitud /

Editar: el teléfono está rooteado. Muy arraigado :)

Edición adicional:

La mayoría de los mensajes encontrados en 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

Con suerte, SMS Backup & Restore permitirá una fusión.

Mandy
fuente
¿Tu espada está enraizada?
t0mm13b
@Mandy: Con respecto a su otra pregunta: Yaffs2 es un sistema de archivos flash que tiene protección de nivelación de desgaste para el almacenamiento flash subyacente (tiene un modelo de datos estructurado de registro donde las escrituras no están en su lugar, sino que siempre van al final del "registro" y el viejo espacio no utilizado se recupera de la cabeza. Muy simple explicado). Si no escribió demasiado, probablemente pueda encontrar instancias antiguas de archivos. Al ignorar la parte de la cola justo antes de la eliminación, podría tener suerte. Aún no he tallado archivos para YAFFS2.
ce4

Respuestas:

19

La base de datos sms se almacena en lo /data/data/com.android.providers.telephony/databases/mmssms.dbque es lo que desea hacer.

Lo mejor es no conectar el cable USB todavía:

  1. Reiniciar en ClockWorkmod Recovery.
  2. Ir a Monturas y Almacenamiento
  3. Seleccionar mount /data
  4. Enchufe el USB
  5. Desde el shell de comandos de Windows o terminal, adb shell
  6. Como estás en ClockworkMod Recovery, eres root de forma predeterminada, ahora haz esto cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/MySmsDatabase.db
  7. salir de la adb shellescribiendo esto:exit
  8. Ahora su base de datos se copia a la tarjeta SD.
  9. Al salir de la recuperación ClockworkMod y simplemente reiniciar, la recuperación lo hará unmount /datapor usted.

En esta etapa, su base de datos ahora se copia. Y se puede extraer de forma segura mediante el uso de algo como SqliteMan . HTH

Editar: El OP estaba interesado en saber cómo se puede hacer un volcado. - Sigue leyendo :)

Cuando invocas esto (con USB conectado y dentro del 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"

Saber qué partición es la clave ... Entonces, por ejemplo, desde mi Blade, puedo ver que los datos de usuario están en la partición mtd6, en la que se puede encontrar la información de la partición real, /dev/mtd/mtdXpor lo que es cuestión de hacer esto usando cat:

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

Y a partir de ahí, tomando /sdcard/myuserdata.dump, dependiendo del sistema de archivos utilizado en esa partición, se puede montar a través de bucle de retorno. El kilometraje variará y, por supuesto, es una situación de gallina y huevo, para hacer todo eso, el teléfono debe estar enraizado.

t0mm13b
fuente
Eso fue de gran ayuda, todos (o al menos la mayoría) de los SMS eliminados estaban en mmssms.db-wal: ¡Muchas gracias por el útil puntero!
Mandy
Sin embargo, mi pregunta se mantiene: ¿es posible volcar una imagen si la situación lo exige?
Mandy
Sí, enmendaré la respuesta ... :)
t0mm13b
@ t0mm13b Ahora esta es una gran respuesta :) +1
Zuul
1
Usted, señor, es asombroso. Pateándome por no persistir con find -iname y grep, pero el pánico te hace eso. Además, me habría parecido un eejit adecuado que canalizara todos mis SMS en cadenas y menos para leerlos, así que gracias de nuevo;)
Mandy