我正在研究必須保護數據(顯示代碼不是主要問題)文件的項目。我們正在使用Java + Netbeans。是否有任何工具會以加密格式創建jar?我們也使用sqlite的數據庫 - 所以把文本文件加密格式也不適合我們。如何創建加密的Jar文件?
回答
創建加密的JAR是不可能的,因爲正在執行的JavaVM必須以某種方式能夠讀取它想要執行的數據。 與VM相似,任何擁有合適工具和專有技術的人都可以從JAR中提取所有數據。
如果可以對JAR進行加密,那麼您還必須向想要執行JAR的客戶端提供一些解密密鑰或工具,這完全破壞了加密的目的。
你可以得到的最好是混淆,但這對雄心勃勃的攻擊者來說並不是真正的安全或障礙。
另一種選擇是製作一個自定義JVM,用於即時解密JAR。但是同樣的問題仍然存在:在某些時候,JAR Java類必須被解密才能被JVM運行,並且在那時它們可以被捕獲和解編譯。
更不用說,擁有自定義JVM的用戶也需要下載該JVM。
您可以使用CipherOutputStream和CipherInputStream以加密格式將Java對象序列化到磁盤。這可能會打開一個選項來保存數據。
Kosi2801是非常正確的。我能想到的唯一可以做的就是以下,但它很醜。
- 發送一個小的標準JAR和一個加密的數據文件。
- 當JAR運行時,它會將(某些)加密數據文件解密到內存中(如數據在JAR中的目錄,基本上是指針/長度對的簡單內存中文件系統)
- Set你自己的類加載器,調用它時,從JAR得到正確的加密字節(使用#2中描述的僞FS表),對密碼進行解密,然後加載從那裏
這類數據讓你加載類。你可以做同樣的事情(沒有類加載器)加載其他資源。
雖然好玩實現(對於那些誰喜歡挑戰),有幾個問題是:
- 你需要能夠解密的東西,所以用戶要麼必須進入每次都有密碼或類似的東西。如果JAR知道足以解密它自己,那麼任何人都可以查看它並找出如何解密事物。這可以通過聯繫Internet上的已知好的服務器來請求解密密鑰(只要您確保該過程安全)就可以緩解。當然,這需要有人希望運行該程序時有效的「網絡連接」。
- 一切都結束在內存。如果沒有自定義的JVM來處理加密字節碼的小部分(正如Cameron McKay所述),這些類最終會在某個時刻在主內存中解密。除非你依靠操作系統來阻止其他人閱讀那些記憶,否則你已經失去了對任何有點時間的人的戰鬥。您嘗試從某些加密存儲中讀取的資源(例如圖像/字體/等)的相同問題。
因此,您可以給人們帶來周旋,讓事情變得更加艱難,但在您給予的所有情況下,您可以做的就是儘量讓其他人不必投資。
軟件保護很困難,特別是在像Java這樣可以很容易地反編譯並且不能像C/Assembly那樣改變它自己的代碼的情況下。有一個原因是,一些最昂貴的軟件需要硬件加密鎖,或者鎖定到特定的CPU或其他硬件。
通常,如果您希望應用程序及其數據是自包含的,則無法以安全的方式執行此操作。但是,您可以對文件進行加密,並使用隱藏在代碼中的密鑰對它們進行標記。一個堅定的黑客可以得到它,但如果這不是你所擔心的,那麼很好。如果你這樣做,記住加密的數據不能被壓縮,所以先壓縮,然後加密。
如果您真的需要數據是安全的(例如,機密數據),您需要使用密鑰對數據進行加密,並使用我的一些外部手段將該密鑰提供給應用程序,例如將其放在拇指驅動器上,通過一位安全的快遞員將其交給用戶。
另一種可能性是通過SSL提供數據(或密鑰),並使用良好的身份驗證方法來驗證您的用戶是誰。
一般來說 - 任何系統都不可能完全安全,但它也不是無用的。一個系統只需要有足夠的安全性來阻止你認爲會攻擊的攻擊者。
我同意Kosi2801。類文件加密只是模仿安全性(請參閱http://www.excelsior-usa.com/articles/java-obfuscators.html) 使用自定義ClassLoader可能會破壞應用程序,例如,在應用服務器中。
還有更好的方法:在類文件中使用字符串常量的加密。大多數商用混淆器都具有此功能,例如Allatori,Stringer Java Obfuscation Toolkit,Zelix KlassMaster,Smokescreen,DashO(超級昂貴)。 Stringer Java混淆器具有調用上下文檢查和完整性控制功能,這使得保護真的很難破解。
最安全的方法是在像JavaCard這樣的外部設備上存儲和執行部分字節碼。
N.B.我是Licel LLC的首席執行官。 Stringer Java混淆器的開發者。
- 1. 如何加密.jar文件
- 2. 如何在創建jar文件時添加輸入文件
- 3. 創建jar文件
- 4. 如何使用外部java jar文件創建jar文件
- 5. .Jar to .EXE(加密文件)
- 6. 如何使用JarOutputStream創建JAR文件?
- 7. 如何創建一個.jar文件?
- 8. 如何使用cmd創建jar文件?
- 9. 如何在Netbeans中創建Jar文件
- 10. 使用調用.jar文件的文件創建.jar文件
- 11. 創建.JAR文件失敗
- 12. 創建jar文件目錄?
- 13. 爲SlidingMenu創建jar文件
- 14. 創建jar文件目錄
- 15. 創建一個.jar文件
- 16. 如何從Windows中的文件夾創建一個jar文件?
- 17. 如何在android中創建.Gzip文件並加密並解密該文件?
- 18. 如何使用Ant使用外部jar文件創建jar
- 19. 無法找到由jar文件創建的密鑰庫
- 20. 如何創建加密密鑰
- 21. 何時首次創建JAR文件?
- 22. 從java文件創建jar文件
- 23. Jar文件不會創建Excel文件
- 24. 從JAR文件的輸入創建BAT-和JAR文件
- 25. BouncyCastle創建PKCS 7加密文件? C#
- 26. 如何在創建jar文件時包含庫文件
- 27. 如何使用netbeans創建可執行文件.jar文件
- 28. 如何從.scala文件創建(或運行).jar文件?
- 29. 如何從jar文件創建tar文件,Netbeans,ant
- 30. 如何從com.trueaccord.scalapb生成源文件創建jar文件
您的設計有缺陷;將敏感數據與代碼一起運輸並不是一個聰明的想法。 – Rob 2009-02-11 16:55:48
這是桌面應用程序。 Java用於跨平臺兼容性。 – 2009-02-11 19:07:16