我正在创建一个应用程序,用户在游戏中执行某些操作,并将这些操作记录在SQLite数据库中。在游戏结束时,应用程序通过屏幕显示这些日志,游戏管理员可以读取这些日志(例如,由游戏管理员在看屏幕时进行物理读取)。有没有一些方法让参赛者操纵数据库,如果不是,有什么安全措施阻止他们这样做?是否可以在手机上访问Android应用的SQLite数据库?
回答
数据库存储在/data/data/your.applications.package/databases
。通常情况下,此位置只能由用户访问为应用程序创建的Android操作系统。没有其他用户能够访问这个位置,除非设备是固定的。然后,任何用户都可以访问手机上的任何位置并操作数据。
所以,如果你想防止用户作弊,你需要一些方法来检查数据库中的值是否未触及。也许你可以在服务器上存储某种指纹来检查它。
这也可以在所有官方Google Dev设备上访问。另外,如果用户需要服务器对数据库进行身份验证,为什么不将结果发送到服务器(在更改时)。 – 2011-05-23 14:21:38
即使将指纹存储在数据库本身也不错(依靠互联网连接对用户体验不利)。因为它很容易改变数据库的价值,即使是我15岁的女儿也知道如何改变Android上的数据库值,以便在游戏中作弊。它很难更改并重新编译根设备上的程序代码。 – hamish 2016-12-03 02:57:52
是,用户可以检查,当通过ADB通过USB连接更改数据库:http://developer.android.com/guide/developing/tools/adb.html#shellcommands
更新:
已解锁装置或谷歌官方的开发设备这仅适用于:Why do I get access denied to data folder when using adb?
尽管如此,这将允许用户访问数据库并更改游戏结果。所以你不能依靠数据库不能访问..
即使在没有根的设备上? – Flo 2011-05-23 12:39:19
我不这么认为,并非没有根源,因为每次我尝试发出命令时,我都会拒绝访问。 编辑 - 我只是试过了,不,你不能仅仅通过使用adb shell和usb来更改或检查数据库信息。 – Hades 2011-05-23 12:43:59
啊,是的。它必须是根植的或官方的谷歌开发设备(这是我所拥有的):http://stackoverflow.com/questions/1043322/why-do-i-get-access-denied-to-data-folder-when-使用-adb – 2011-05-23 13:12:26
是的,只要您是开发人员,您可以通过编程方式完成。以下是适用于SQLiteDatabase的Android文档。
下面是与SQLiteDatabases编程工作的一些链接:
在应用程序中的SQLiteDatabase应该是 '沙盒' 特定应用程序,这意味着只要开发人员没有提供任何其他应用程序应该能够获得该数据用ContentProvider访问它。因此,为了回答您的最终问题,不,应该没有办法让参赛者操纵数据库,除非开发人员已经允许。
除非您向用户发放设备,并且您仔细观察他们对它们所做的操作,为了确保不会对任何人造成危险,您需要使用隐藏在强烈混淆的应用程序代码中的机制对数据库中的条目进行数字签名。即使这只会让它更难。
请注意,除非游戏逻辑本身的关键部分在服务器中实现,否则使用服务器无助于此;如果用户知道如何伪造您的签名机制来编写假数据库条目,他们还可以将假报告发送到您的服务器。
- 1. 应用程序是否可以访问智能手机上的所有数据
- 2. 是否可以在Android SQLite数据库上禁用WAL?
- 3. Android - SQLite数据库访问
- 4. 是否可以在Android手机上创建手机应答机程序?
- 5. C/C++库是否可以在Android手机上工作
- 6. 是否可以从Java访问SQLite数据库或(SqLite的Sql浏览器)?
- 7. 如何在Android手机上开发时访问数据库?
- 8. Flex Web应用程序可以访问sqlite数据库吗?
- 9. 在手机上的Android数据库
- 10. 如何存储用于在Android手机上访问的数据
- 11. 如何在无根Android手机上放置sqlite数据库?
- 12. Android在手机上浏览SQLite数据库
- 13. Android的SQLite数据库访问
- 14. 调试android:连接到手机上的sqlite数据库
- 15. 是否可以访问另一部手机上的相机点击事件?
- 16. 是否可以使用Android数据库的iPhone应用程序?
- 17. 您可以通过应用程序访问Android手机上的短信吗?
- 18. 在Android上访问受密码保护的SQLite数据库?
- 19. Android阻止访问SQLite数据库
- 20. 是否可以直接在HTC Evo手机上创建Android应用程序?
- 21. 是否可以在Android中直接访问摄像机的LED?
- 22. 是否可以在Android数据库的文本字段上应用主键
- 23. Xpages:确定用户是否可以访问数据库
- 24. Android eclipse DDMS - 无法访问数据/数据/手机上
- 25. 我可以下载/ sdcard上的SQLite数据库并从我的Android应用程序访问它吗?
- 26. 在android平台上扩展访问sqlite数据库
- 27. 如何在Android手机上手动删除我的应用程序的sqlite数据库
- 28. Android Market应用是否已安装在每部Android手机上
- 29. 是否可以阻止Android手机上的传出短信?
- 30. 从PhoneGap应用程序访问android本身上的本地sqlite数据库
所以你想连接到Android设备,并阅读存储在应用程序'SQLiteDatabase'中的数据? – 2011-05-23 12:28:52
更具体地说:我想阻止应用程序的用户(不是开发人员)操纵数据库。出于所有实际的目的,我们还可以假设手机处于离线状态,直到游戏结束时才与游戏服务器(或游戏官员)进行通信。 – runaros 2011-05-23 12:47:30