2015-11-02 54 views
-1

我正在研究一個需要祕密密鑰隱藏在Android應用程序某處的項目,以便即使在反編譯後也不能將其取出。 該要求甚至規定,開發人員不應該看到密鑰,這意味着它應該嵌入到一些預編譯的庫中。 我曾嘗試以下的事情:從反編譯和開發人員中將密鑰保存到Android應用程序

  1. 使罐和混淆的罐子,成爲後無法使用。它的無用方法使用字符串(它不加密字符串)。

  2. 製作C庫並使用該庫(NDK)。這些字符串可以使用linux命令輕鬆讀取。例如:'$ strings'。

我想找出可以做到這一點的其他方式。 請幫我這個。如果您有任何想法,請分享。我會承擔更多責任。

謝謝。

+4

根據定義,要求是不可能的。如果應用程序可以執行並可以訪問密鑰,則任何人都可以獲得密鑰。例如,他們可以運行應用程序並使用調試器。或者,他們可以通過應用程序執行的相同步驟來解密密鑰。 – CommonsWare

回答

1

這是一個難題。您正在與您的應用程序進行逆向工程戰鬥。有爲此建立的工具,特別是DexGuard和。 Arxan確實非常聰明,但它的價格遠遠超過像DexGuard這樣的解決方案。

+0

謝謝。對於這個建議。我從過去幾天來看Arxan,它可能會幫助我。 –

+0

Hello @lang_android,你有沒有任何想法在Android與Arxan的根檢測? –

2

任何你的應用程序可以做的事情,也可以通過一個有決心的黑客來反向設計,所以不要指望一些神奇的方法來使這個密鑰永久保護。

如果您的目標是提供一個將被許可給不同開發人員的SDK,那麼簡單的方法是爲每個開發人員分配一個唯一的密鑰,並讓他們負責隱藏黑客。另一方面,如果我從字面上讀取了您的需求,那麼在APK中以純文本顯示密鑰字符串就足夠了。簡單的解決方案是對其進行編碼。你可以像密鑰的base64編碼一樣簡單,或者提供一個C函數來動態計算這個密鑰(所以在strings的輸出中不會出現密鑰的痕跡)。

+0

感謝您的回覆。如果我使用其中一種密鑰編碼,調試器將無法取出並以明文形式顯示密鑰。 –

+1

不,調試器*程序*不會那樣做,但調試器*人*可以相對容易地做到這一點。 –

相關問題