Android 应用程序无法打开粘贴的 SQLite 数据库

逆向工程 安卓
2021-07-04 21:47:17

所以我在我的 Android 手机上安装了一个应用程序,它将一些数据存储在 /data/data//databases/ 文件夹中受密码保护的 SQLite 数据库中。我使用 adb shell 将数据库移动到我的 PC 并解锁它,修改了一些数据,然后将其移回原来的位置。但是,当我运行该应用程序时,它不断崩溃并抛出 SQLiteExceptions“无法打开数据库”。

如果我删除修改后的数据库并重新启动应用程序,一切正常,并且会按预期创建一个新的空数据库。但是如果我将该数据库移动到另一个位置,然后将其移回应用程序崩溃并再次给出相同的异常,即使数据库没有被修改。

为什么我不能在不使应用程序无法读取的情况下移动数据库?我真的很感激这里的一些帮助!

1个回答

我设法解决了它,我会写在这里,希望它能帮助更多面临同样问题的人。问题的更详细描述:在我的 root 用户 Galaxy S5 上,我安装了一个应用程序,该应用程序在 /data/data//database/ 文件夹中有一个加密的 SQLite 数据库。如果我将数据库移到 /data/ 之外,然后将其粘贴回原来的位置,应用程序会在启动时立即崩溃,但我仍然不知道为什么(我没有更改文件本身的任何内容,我恢复了原始文件权限和所有权,因为它们在移动过程中已自动(?)被更改)但应用程序仍然会崩溃。

解决方案(我真的不知道它为什么起作用)是使用 dd 命令制作数据库的副本,使用 adb 将该副本拉到我的电脑上,使用 DB Browser for SQLite 编辑它,然后推送它操作复制回 /data/data//database 并最后使用 dd 将操作数据库的内容复制到原始数据库中。

一步步:

dd if=database of=database_copy
adb pull /data/data/<package-name>/database/database_copy
[Edit and then save the database_copy]
adb push database_copy /data/data/<package-name>/database/
dd if=database_copy of=database

而已!这次应用程序启动良好,并使用我自己的值读取数据库!