我在我的Android應用程序在某些領域使用的專用API密鑰 - 是有沒有辦法阻止用戶不知何故逆向工程或反編譯了Java看到,關鍵是什麼?將鍵作爲靜態字段放在類中是不安全的嗎?將它作爲strings.xml中的字符串資源更安全嗎?還是其他什麼東西?或者是否無法阻止充分積極的用戶找到它?可以反編譯我的應用程序以顯示字符串常量嗎?
回答
不僅可以它是,它甚至沒有硬。
您可以通過不把它作爲一個字符串在所有更難做,但作爲一系列數字,你轉換爲字符串在運行時(也許混淆它在某種程度上)。
但答案
或者是根本不可能的,以防止有足夠的動機用戶從尋找它?
是:是的,這是根本不可能的。
你能更詳細一點與「一系列的數字」的例子嗎?即使不停止最確定的操作,我也可以添加幾層保護。我寧願不是低垂的果實。 – KaliMa
@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)});'同樣:對於某人來說這並不難,但是在你的類文件中字符串不會是明文的。 :-) –
所以你定義'a1'隨意,然後用字符'B'異或它得到'INT a2'? – KaliMa
最好將String
作爲常量包含在類文件中,並使用String obfuscation
和其他各種使用某些免費或商用混淆器的技術對其進行混淆。這是你能做的最好的事情,你會得到很大的節約。您可以通過反編譯來仔細檢查自己,並嘗試找到密鑰,就好像您不知道密鑰一樣。你會看到你的保護有多好。
你有沒有遇到[Schneier定律](https://www.schneier.com/blog/archives/2011 /04/schneiers_law.html)?不能夠恢復自己的祕密不告訴你其他人是否可以。 –
@AndyTurner: 如果你經歷了明顯的攻擊,看起來絕望,你至少做了一個體面的工作。當然,這是不可能的,以保證沒有人會成功,但一些混淆器是非常聰明的搞亂反編譯輸出和喜歡 – BullyWiiPlaza
最好的希望那些壞人堅持只使用明顯的攻擊! –
- 1. 我可以使用字符串作爲條件編譯常量
- 2. 我可以預編譯我的ASP.NET MVC應用程序嗎?
- 3. 我可以反編譯簽名和安裝的android應用程序嗎?
- 4. 使用Unicode字符集編譯的Windows應用程序可以使用編譯爲多字節的DLL嗎?
- 5. 我可以將編譯常量傳遞給項目引用嗎?
- 6. Android應用程序 - 可以修改Constants.java中的字符串嗎?
- 7. 我可以在protobuf中定義一個常量字符串嗎?
- 8. 我可以使用UIDocumentationInteractionController顯示應用程序擴展嗎?
- 9. 應用程序是否可以反編譯?
- 10. MVC Razor RC 1:@section可以用字符串常量定義嗎?
- 11. 我可以將我的Silverlight 4應用程序編譯爲WPF嗎?
- 12. ReSharper反編譯器 - 我可以將它用於獨立程序集嗎?
- 13. 我可以通過我的應用程序以編程方式啓用GPS嗎?
- 14. 我們可以在web應用程序中使用靜態字符串嗎?
- 15. 應用程序可以編譯並創建另一個應用程序嗎?
- 16. 你可以靜態編譯一個cygwin應用程序嗎?
- 17. Can Rust宏可以創建編譯時字符串嗎?
- 18. 我可以使用字符串作爲#define的常量部分嗎?
- 19. 我可以使用變量字符串來引用列表嗎?
- 20. 可以發現已編譯的Obj-C應用程序中的「祕密」字符串嗎?
- 21. 我可以動態應用Dart的字符串插值嗎?
- 22. 我們可以設置字符串嗎?
- 23. 我可以調試編譯的程序集嗎?
- 24. 報告編譯時字符串常量
- 25. 我可以使用變量傳遞json字符串嗎?
- 26. 顯示快速消息的Iphone應用程序,可以嗎?
- 27. 2個應用程序2個時區,我可以編程嗎?
- 28. Java:我可以使用常量字符串作爲枚舉鍵值嗎?
- 29. 用C++編寫的Mozilla/GoogleChrome插件可以反編譯嗎?
- 30. 我可以在我的Qt應用程序中顯示qDebug()輸出嗎?
這一個:*它根本不可能阻止充分動機的用戶找到它* ...您仍然可能以某種方式混淆,因此在反編譯後不會立即可用 – Selvin
[混淆代碼中的隱藏字符串] (https://stackoverflow.com/questions/4427238/hiding-strings-in-obfuscated-code)和[看這裏(https://stackoverflow.com/questions/22949801/simple-hiding-obfuscation-of-strings -in-apk)太 –
@Pavneet_Singh:很好找。 –