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

Entonces sucedió que Amanda tuvo un momento rubio y borró 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 haya algunos en la tarjeta SIM, así que pedí un lector de SIM. De todos modos, sospecho que la veintena que contiene es en su mayoría spam de operadores de red.

Por lo tanto, maldigo mi plan de copia de seguridad ineficaz y prometo hacer una copia de seguridad de los SMS en GMail en el futuro.

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

Primero, conecto adb y compruebo 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 tal suerte. Razón por la cual desmontar a la fuerza sería una mala idea y probablemente no funcionará en ningún caso.

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

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

¿Qué estoy haciendo mal? ¿ClockworkMod toma una imagen en el verdadero sentido o simplemente hace una copia de seguridad de los archivos y los empaqueta en una imagen? ¿Existe un programa de recuperación de 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 un poco de suerte, SMS Backup & Restore permitirá una fusión.

¿Tu blade está enraizado?
@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 estructurados de registro donde las escrituras no están en su lugar, sino que van siempre al final del "registro" y el antiguo espacio no utilizado se recupera de la cabeza (explicado de forma muy sencilla). Si no escribió demasiado, probablemente pueda encontrar instancias más antiguas de archivos. Si ignora la parte de la cola justo antes de la eliminación, podría tener suerte. No he tallado archivos para YAFFS2 hasta ahora.

Respuestas (1)

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

Lo mejor que puede hacer es esto, no conecte el cable USB todavía:

  1. Reinicie en ClockWorkmod Recovery.
  2. Vaya a Monturas y almacenamiento
  3. Seleccionemount /data
  4. Enchufe el USB
  5. Desde el shell o terminal de comandos de Windows,adb shell
  6. Como estás en ClockworkMod Recovery, eres root por defecto, ahora haz estocp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/MySmsDatabase.db
  7. salga del adb shellescribiendo esto:exit
  8. Ahora su base de datos se copia en la tarjeta SD.
  9. Salga de la recuperación de ClockworkMod y simplemente reinicie, la recuperación lo hará unmount /datapor usted.

En esta etapa, su base de datos ya está copiada. Y se puede extraer de forma segura mediante el uso de algo como SqliteMan . HH.

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

Cuando invoque 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"

Sabiendo 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 real de la partición, por lo que se /dev/mtd/mtdXtrata de hacer esto usando cat:

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

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

Eso fue muy útil, todos (o al menos la mayoría) de los SMS eliminados estaban en mmssms.db-wal: ¡Muchas gracias por el útil indicador!
Sin embargo, mi pregunta sigue en pie: ¿es posible volcar una imagen si la situación lo exige?
Sí, modificaré la respuesta... :)
@ t0mm13b Ahora bien, esta es una gran respuesta :) +1
Usted, señor, está '#@!% genial. Golpeándome por no persistir con find -iname y grep, pero el pánico te hace eso. Además, me hubiera parecido un eejit adecuado canalizando todos mis SMS en cadenas y menos para leerlos, así que gracias de nuevo;)
Ahhh... es un placer ayudar;) Me alegro de que la respuesta te haya ayudado :)
Ahora solo necesita convencer a sqlite de que realmente quiere tomar el archivo WAL y revertir esas declaraciones DELETE FROM a mmssms.db. Si obtengo un gran avance, publicaré el resultado aquí, ya que esto es típicamente lo que buscaría alguien que busca una forma de restaurar los hilos de SMS eliminados.
Mucha suerte con OP, espero que lo recuperes :)
aquí hay una respuesta sobre cómo obtener una partición completa de un dispositivo. Necesita Linux, una recuperación CWM habilitada para adb y conocimiento del diseño de la partición de su dispositivo (es decir, ¿cuál es el dispositivo de la partición /data, /dev/block/?)
@t0mm13b: Yaffs2 no se puede montar utilizando la técnica de bucle invertido. Yaffs2 es un sistema de archivos flash y depende en gran medida de un 'chip MTD'; consulte Wikipedia para obtener más información. (Se debe a algunos bytes adicionales de NAND por área que se usan para nivelar el desgaste y no forman parte de los datos reales). Si lee el dispositivo de bloque, solo obtiene los datos visibles para el usuario, no las banderas adicionales. Si desea montar una imagen YAFFS2, necesita un simulador MTD (el SDK de Android tiene uno incluido, puede especificar un .img adicional para una VM (o sobrescribir el data.img))
¿Esto se ha movido? No puedo encontrar /dev/mtd/*nada, debajo 4.4.4de un s5... en cambio, parece que userdataestá montado desde este dispositivo de bloque:/dev/block/platform/msm_sdcc.1/by-name/userdata