2011-05-23 89 views
3

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

+0

所以你想连接到Android设备,并阅读存储在应用程序'SQLiteDatabase'中的数据? – 2011-05-23 12:28:52

+0

更具体地说:我想阻止应用程序的用户(不是开发人员)操纵数据库。出于所有实际的目的,我们还可以假设手机处于离线状态,直到游戏结束时才与游戏服务器(或游戏官员)进行通信。 – runaros 2011-05-23 12:47:30

回答

6

数据库存储在/data/data/your.applications.package/databases。通常情况下,此位置只能由用户访问为应用程序创建的Android操作系统。没有其他用户能够访问这个位置,除非设备是固定的。然后,任何用户都可以访问手机上的任何位置并操作数据。

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

+0

这也可以在所有官方Google Dev设备上访问。另外,如果用户需要服务器对数据库进行身份验证,为什么不将结果发送到服务器(在更改时)。 – 2011-05-23 14:21:38

+1

即使将指纹存储在数据库本身也不错(依靠互联网连接对用户体验不利)。因为它很容易改变数据库的价值,即使是我15岁的女儿也知道如何改变Android上的数据库值,以便在游戏中作弊。它很难更改并重新编译根设备上的程序代码。 – hamish 2016-12-03 02:57:52

2

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

更新:

已解锁装置或谷歌官方的开发设备这仅适用于:Why do I get access denied to data folder when using adb?

尽管如此,这将允许用户访问数据库并更改游戏结果。所以你不能依靠数据库不能访问..

+0

即使在没有根的设备上? – Flo 2011-05-23 12:39:19

+0

我不这么认为,并非没有根源,因为每次我尝试发出命令时,我都会拒绝访问。 编辑 - 我只是试过了,不,你不能仅仅通过使用adb shell和usb来更改或检查数据库信息。 – Hades 2011-05-23 12:43:59

+1

啊,是的。它必须是根植的或官方的谷歌开发设备(这是我所拥有的):http://stackoverflow.com/questions/1043322/why-do-i-get-access-denied-to-data-folder-when-使用-adb – 2011-05-23 13:12:26

2

是的,只要您是开发人员,您可以通过编程方式完成。以下是适用于SQLiteDatabase的Android文档。

下面是与SQLiteDatabases编程工作的一些链接:

  1. From Android docs
  2. From a blog
  3. From another blog

在应用程序中的SQLiteDatabase应该是 '沙盒' 特定应用程序,这意味着只要开发人员没有提供任何其他应用程序应该能够获得该数据用ContentProvider访问它。因此,为了回答您的最终问题,不,应该没有办法让参赛者操纵数据库,除非开发人员已经允许。

-1

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

也有数据库是唯一的与特定的ID根据设备ID与某种服务器回调,以验证数据库。

+1

以何种方式可以模糊代码,防止用户操纵数据库? – runaros 2011-05-23 12:49:01

+1

不是直接的,它有助于黑客不会通过逆向工程代码就知道数据库名称或列。但我想有更好的方法。 – Hades 2011-05-23 13:01:07

0

除非您向用户发放设备,并且您仔细观察他们对它们所做的操作,为了确保不会对任何人造成危险,您需要使用隐藏在强烈混淆的应用程序代码中的机制对数据库中的条目进行数字签名。即使这只会让它更难。

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

相关问题