2013-12-19 41 views
1

我正在研究與安全數據通信相關的Android應用程序。我在我的應用程序中使用了一些常量值,並將它們保存在constant.java類中。我不希望這些值被反向設計,但即使我正在使用ProGuard for Android,對於專家而言,它很容易反轉代碼。這些常數是非常安全的。我可以使用屬性文件或res文件夾中的任何文件,但這種方法一點都不安全。安全地保存常數值

任何人都可以告訴我如何進行?是否有任何文件格式可以保存我的常量或防止反向工程的屬性文件。是否有任何選項,如將它保存爲.py python文件格式並從Android代碼中讀取?

回答

3

安全地將祕密常量安全地存儲在設備上根本不可能,因爲黑客可以通過靜態和動態分析對其進行逆向工程。通過混淆這些值,只能使其變得更加困難:

  • 使用一些算法計算它們,而不是逐字地存儲它們。即使是一個簡單的算法也可能增加提取常量所需的時間。
  • 在整個代碼中分配值的組成部分。
  • 使用本機代碼。反向工程通常比較困難,至少如果代碼及其API太大而且複雜。
  • 也許看看白盒密碼術,它試圖在密碼算法的實現中編織常量密鑰,以這種方式不能提取常量密鑰。這仍然是研究和高端商業解決方案的領域。

你可能會得到一些想法,你可以從my presentation自己申請,並從Scott Alexander-Bown's presentation在Droidcon在倫敦。

您還可以使用像ProGuard的擴展版本DexGuard這樣的商用混淆器,通過字符串加密和類加密等技術加強代碼。

如何有效的保護取決於時間和精力,你可以投資,你的產品的價值,在時間和精力,黑客願意花,在他們的專業知識等

類似問題:Best Practice for storing private API keys in Android

(我的ProGuard和DexGuard的開發者)

+0

也許安全設計不好。即使有了您的建議,在代碼中添加一行(例如:Log.v(TAG,secretValue))也很容易,只需執行該應用程序,它將打印該值。存儲在應用程序的代碼/資源中的常量不是祕密。 –