是否可以在手机上访问Android-app的SQLite数据库?

时间:2011-05-23 12:24:53

标签: android database sqlite

我正在创建一个应用程序,用户在游戏中执行某​​些操作,并将这些操作记录在SQLite数据库中。在游戏结束时,应用程序通过屏幕显示这些日志,这些屏幕由游戏管理员读取(例如,由观看屏幕的游戏管理员物理读取)。是否有一些方法可以让参赛者操纵数据库,如果没有,哪些安全措施会阻止他们这样做?

5 个答案:

答案 0 :(得分:8)

数据库存储在/data/data/your.applications.package/databases下。通常,此位置只能由用户访问为该应用创建的Android OS。除非设备已植根,否则其他用户无法访问此位置。然后,任何用户都可以访问手机上的任何位置并操纵数据。

因此,如果您想阻止用户作弊,您需要一些方法来检查数据库中的值是否未被触及。也许您可以在服务器上存储某种指纹来检查这一点。

答案 1 :(得分:2)

是的,用户可以通过ADB通过USB连接检查和更改数据库:http://developer.android.com/guide/developing/tools/adb.html#shellcommands

更新

这仅适用于有根设备或官方Google Dev设备:Why do I get access denied to data folder when using adb?

但是,这将允许用户访问数据库并更改游戏结果。所以你不能依赖数据库不可访问..

答案 2 :(得分:2)

是的,只要您是开发人员,就可以以编程方式执行。以下是SQLiteDatabase的Android文档。

以下是一些以编程方式使用SQLiteDatabases的链接:

  1. From Android docs
  2. From a blog
  3. From another blog
  4. 应用程序中的SQLiteDatabase应该“沙箱化”到该特定应用程序,这意味着只要开发人员不通过ContentProvider提供对该数据的访问,其他任何应用程序都无法获取该数据。所以回答你的最后一个问题,不,除了开发者已经允许的方式之外,参赛者不应该有操纵数据库的方法。

答案 3 :(得分:0)

除非您向用户发布设备并仔细观察他们对这些设备的操作,否则为了确保对任何人的安全,您需要使用隐藏在强混淆的应用程序代码中的机制对数据库中的条目进行数字签名。甚至那只会让事情变得更难。

请注意,除非在服务器中实现游戏逻辑本身的关键部分,否则使用服务器无济于事;如果用户知道如何伪造您的签名机制来编写虚假数据库条目,他们也可以向您的服务器发送虚假报告。

答案 4 :(得分:-1)

您可以使用Proguard来混淆代码。

还要根据具有某种服务器回调的设备ID使数据库与特定id唯一,以验证数据库。