una online msgstore desencriptar data crypt12 carpeta archivo aplicaciĆ³n acceder abrir android adb root

android - online - msgstore.db.crypt12 abrir sin key



Acceso de Android ADB a bases de datos de aplicaciones sin root (5)

¿Alguien puede decirme si es posible usar el ADB para extraer y enviar una base de datos desde una aplicación, sin privilegios de root en el teléfono?

Por ejemplo, sé que la ubicación de mi magia arraigada y el sueño es:

/data/data/com.xxxx.xxxx/databases/xxxx

Sé que puede usar ADB sin root, pero cuando intenta usar el shell, no puede ver esa ubicación sin privilegios de root. ¿Pero me han dicho que puede usar el método de empujar y tirar si conoce el archivo que desea?

Básicamente, quiero extraer una base de datos de MI aplicación en un teléfono no rooteado, modificarla y volver a presionarla.

El único problema que tengo es que los dos teléfonos que tengo son ambos root y no tengo acceso a uno que no sea de root para probarlo.


Configuramos los permisos de archivos para que sean legibles para todos los usuarios desde dentro de la aplicación.

if (BuildConfig.DEBUG) { new File(mDB.getPath()).setReadable(true, false); }

Entonces simplemente desconecta el .db con adb normalmente.

adb -d pull //data/data/xxxxx/databases/xxxxx.db .

NOTA: He descubierto que esto debe hacerse cada vez que se abre el archivo de base de datos, por ejemplo, en onCreate y en el constructor de su contenedor SQLiteOpenHelper (cuando su base de datos no es nula) o tal vez en Open. Si solo está en onCreate, la próxima vez que ejecute su aplicación y el .db ya exista, por alguna razón los permisos se han cambiado. Esto podría tener algo que ver con la forma en que Android administra sus datos.


En OxygenOS (basado en Android 5.2) he mezclado las dos soluciones proporcionadas por Pilot_51 .

Primero utilicé run-as para obtener acceso en /data/data/package.name/databases desde aquí no pude copiar directamente en /sdcard/ por lo tanto cambié el permiso del archivo. Después de eso, salí del modo run-as y usé cp para copiar el archivo en /sdcard/ storage. Eventualmente pude usar adb pull

$ adb -s <DEVICE_ID> shell $ run-as package.name $ chmod 666 databases/dbname.db $ exit $ cp /data/data/package.name/databases/dbname.db /sdcard/dbname.db $ exit $ adb pull /sdcard/dbname.db ./dbname.db


Si bien la respuesta de Nilhcem no funcionó para mí, me condujo en la dirección correcta (por eso voté a favor) y ahora tengo una solución de trabajo.

Respuesta anterior que puede no funcionar con las versiones más recientes de Android:

#Transfer file from app databases directory to PC adb shell $ run-as package.name $ cd ./databases/ $ ls -l #Find the current permissions - r=4, w=2, x=1 $ chmod 666 ./dbname.db $ exit $ exit adb pull /data/data/package.name/databases/dbname.db ~/Desktop/ #Transfer file from PC to app databases directory (requires the above permission change) adb push ~/Desktop/dbname.db /data/data/package.name/databases/dbname.db adb shell $ run-as package.name $ chmod 660 ./databases/dbname.db #Restore original permissions $ exit $ exit

Método alternativo usando almacenamiento externo (confirmado para trabajar con 6.0.1):

#Transfer file from app databases directory to external storage adb shell $ run-as package.name $ cp ./databases/dbname.db /sdcard/ $ exit $ exit #Transfer file from external storage to app databases directory adb shell $ run-as package.name $ cp /sdcard/dbname.db ./databases/ $ exit $ exit


Una solución rápida es usar el comando run-as para copiar la base de datos en una carpeta donde puede tener acceso, como /sdcard y luego, hacer un adb pull normal de adb pull

adb shell $ run-as package.name cp /data/data/package.name/dbname.db /sdcard/ $ exit adb pull /sdcard/dbname.db

Más información sobre el comando run-as here

Tenga en cuenta que el comando run-as está disponible desde API nivel 8 (Android 2.2) y solo se puede usar si la aplicación es debbugable .


si desea insertar un archivo db en la aplicación

en primer lugar, coloque "file.db" en "/ storage / emulated / 0 /" debido a un problema de permiso. entonces debes fingir como aplicación para acceder a la carpeta de datos.

adb shell $ run-as com.package.name :/data/data/com.package.name $ cp /storage/emulated/0/file.db /data/data/com.package.name/databases/

copia el archivo.db que está en la carpeta principal a las bases de datos.