2017-06-16 169 views
0

我在我的Android應用程序在某些領域使用的專用API密鑰 - 是有沒有辦法阻止用戶不知何故逆向工程或反編譯了Java看到,關鍵是什麼?將鍵作爲靜態字段放在類中是不安全的嗎?將它作爲strings.xml中的字符串資源更安全嗎?還是其他什麼東西?或者是否無法阻止充分積極的用戶找到它?可以反編譯我的應用程序以顯示字符串常量嗎?

+3

這一個:*它根本不可能阻止充分動機的用戶找到它* ...您仍然可能以某種方式混淆,因此在反編譯後不會立即可用 – Selvin

+1

[混淆代碼中的隱藏字符串] (https://stackoverflow.com/questions/4427238/hiding-strings-in-obfuscated-code)和[看這裏(https://stackoverflow.com/questions/22949801/simple-hiding-obfuscation-of-strings -in-apk)太 –

+1

@Pavneet_Singh:很好找。 –

回答

3

不僅可以它是,它甚至沒有硬。

您可以通過不把它作爲一個字符串在所有更難做,但作爲一系列數字,你轉換爲字符串在運行時(也許混淆它在某種程度上)。

但答案

或者是根本不可能的,以防止有足夠的動機用戶從尋找它?

是:是的,這是根本不可能的。

+0

你能更詳細一點與「一系列的數字」的例子嗎?即使不停止最確定的操作,我也可以添加幾層保護。我寧願不是低垂的果實。 – KaliMa

+0

@KaliMa:那麼這個特定的例子可能會相當低懸。例如,假設你的字符串是「bqzT」'。你可以把它存爲'int a1 = 0x5348e823; int b1 = 0x902b77b2; int c1 = 0xaff50d8b; int d1 = 0x2bf6eacc; int a2 = 0x5348e841; int b2 = 0x902b77c3; int c2 = 0xaff50df1; int d2 = 0x2bf6ea98;'並用'String s = new String(new char [] {(char)(a1^a2),(char)(b1^b2),(char)(c1^c2),( char)(d1^d2)});'同樣:對於某人來說這並不難,但是在你的類文件中字符串不會是明文的。 :-) –

+0

所以你定義'a1'隨意,然後用字符'B'異或它得到'INT a2'? – KaliMa

-1

最好將String作爲常量包含在類文件中,並使用String obfuscation和其他各種使用某些免費或商用混淆器的技術對其進行混淆。這是你能做的最好的事情,你會得到很大的節約。您可以通過反編譯來仔細檢查自己,並嘗試找到密鑰,就好像您不知道密鑰一樣。你會看到你的保護有多好。

+0

你有沒有遇到[Schneier定律](https://www.schneier.com/blog/archives/2011 /04/schneiers_law.html)?不能夠恢復自己的祕密不告訴你其他人是否可以。 –

+0

@AndyTurner: 如果你經歷了明顯的攻擊,看起來絕望,你至少做了一個體面的工作。當然,這是不可能的,以保證沒有人會成功,但一些混淆器是非常聰明的搞亂反編譯輸出和喜歡 – BullyWiiPlaza

+0

最好的希望那些壞人堅持只使用明顯的攻擊! –

相關問題