2011-05-23 48 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

除非您向用戶發放設備,並且您仔細觀察他們對它們所做的操作,爲了確保不會對任何人造成危險,您需要使用隱藏在強烈混淆的應用程序代碼中的機制對數據庫中的條目進行數字簽名。即使這隻會讓它更難。

請注意,除非遊戲邏輯本身的關鍵部分在服務器中實現,否則使用服務器無助於此;如果用戶知道如何僞造您的簽名機制來編寫假數據庫條目,他們還可以將假報告發送到您的服務器。

相關問題