簡體   English   中英

如何加密.jar文件

[英]How to encrypt a .jar file

我正在一個項目中,我們需要加密.jar文件,所以沒有人可以訪問jar文件中的.class文件....是否有任何java編碼可以幫助我加密.jar文件?

即使您加密jar文件,它也必須在JVM能夠運行之前解密,因此您需要另一個包含在JVM中解密和加載的類的jar文件。

由於這個第二個jar文件本身不能加密,想要查看類文件的惡意用戶可以簡單地查看第二個jar文件中的類,然后解密你的超級機密jar文件並訪問它。

也許您可以使用混淆器來提高代碼的安全性,但它最終會保護(使其更難但不是不可能)您的類文件來自反編譯,而不是被使用。

如果混淆不夠,你可以考慮將你的jar文件編譯為windows的DLL或unix / linux的SO,這將使反編譯變得更加困難,但並不總是能夠正確地做到這一點,而且它通常是PITA。 GCJ能夠以某種方式做到這一點,還有其他商業產品實際上將.class / .jar直接編譯為機器代碼。

但請注意,放入它的安全性並不重要,因為客戶端計算機必須能夠執行它,它必須能夠讀取它,因此無論您的代碼將被暴露,您只能制作它更難。

如果你真的有一個如此秘密的算法你不想透露什么,考慮將其轉換為Web服務,將其托管在你的服務器上,這樣你就不必將實際代碼發送到客戶端機器和通過檢查對其重要部分的訪問權限,還可以更好地防止未經授權的應用程序副本。

我假設您知道任何熟練的Java編碼器都可以對您使用(或編寫)的Java工具進行逆向工程,並仍然可以對應用程序的jar進行解碼? 編寫讀取“加密”代碼的自定義類加載器也可以反編譯,並且可以編寫工具來繞過它。

即使使用模糊處理和字節碼修改以及自定義類加載器,java也是可攻擊/可反編譯的,並且源幾乎總是可以進入某種可讀狀態。

您想要對jar文件進行模糊處理,而不是加密。

在Java中這樣做的一個流行選擇是ProGuard

不。因為你的程序需要能夠運行代碼,所以無論如何都是毫無意義的。

您可以對代碼進行模糊處理,因此反編譯.class文件會導致代碼不太可讀(無意義的變量/類名等)。

據我所知,標准JVM不支持此功能。 但是你可以做到以下幾點。 將您的申請分為兩部分。 首先不會加密。 它將是一個簡單的加載器,它將使用自定義類加載器實例化其余的。 這個類加載器將Classes作為字節數組,解密並加載它們。

如果你在jar中打包 - >只需將其重命名為jarname.ABCD或任何誤導擴展名,甚至取消擴展名,並相應地在你的應用程序中指定jar名稱。

如果您不想提供對jar內部類文件的訪問,為什么要為您的jar提供應用程序? 感覺你的問題在概念上有點錯誤......

如果您需要一些自定義加載類的方法,請考慮使用自定義類加載器。

我更喜歡jCrypt 這是一個簡單的工具,你可以加密類(和資源)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM