2012-01-27 243 views
0

我想給一個可執行的jar文件給我的客戶端,我有一段代碼在一段時間後過期。但是,如果客戶端使用反編譯器並讀取類文件,他可以修改並使代碼正常工作。有什麼方法可以阻止這種情況發生。隱藏java代碼

我可以使用deleteOnExit()或其他一些技巧嗎?

+0

您可以在運行時將jar複製到臨時目錄並啓動另一個JVM,然後從那裏刪除原始文件。但實際上不是,所以你可以向我們解釋你實際需要做什麼。 – Viruzzo 2012-01-27 15:00:53

+0

使用[obfuscator](http://en.wikipedia.org/wiki/Obfuscated_code)。 – ikromm 2012-01-27 15:00:48

+0

這會讓它更難,但不能保證客戶端不能逆向工程代碼並破解它。 – Jesper 2012-01-27 15:05:07

回答

1

對不起,目前在任何類型的環境中不可能使用。如果您擔心客戶竊取您的代碼,重新評估您與他的關係可能會很好。

另一方面,你可以爲他提供一個門控的VNC視圖來顯示你的軟件,他可以使用它,但是你仍然可以控制環境。

3

對此的最佳解決方案是PaaS(平臺即服務).. 將您的邏輯放在服務器上作爲server-app,並讓client-app通過web服務或任何其他方式與server-app進行通信。是最好的解決方案..

順便說一句:使用混淆無法保護您的代碼。

7

如果你擔心有人會破解你的軟件,你需要使用某種客戶端/服務器架構,客戶端只能登錄到服務器的網頁。

如果有人真的想要也可以破解任何代碼。當然,大多數時候它不值得。

1

在過去,我使用Zelix KlassMaster來執行混淆。它做得非常好,但是,您必須花時間對其進行配置,使其能夠滿足您的需求。如果你使用反射,那麼你必須確保它不會混淆這些類/方法/屬性名稱等。它的一個強大功能是它也會混淆字符串。

所有的說法,最終的結果是,你的客戶仍然會有你的代碼,alebit在一個非常難以理解的格式。但是,如果他真的有時間和精力,他可以對其進行逆向工程。

很多還取決於你試圖保護的是什麼。如果您試圖保護實際的IP,那麼混淆會幫助您解決問題。如果您試圖保護許可,那麼混淆只會讓人們更難以確定您的授權模塊在哪裏以及如何規避它們。在後一種情況下,我會建議你使用類似AspectJ的東西來編織許多不同類別的許可證檢查,以使它更難以破解。然而,這也不是防錯的。

正如其他人已經說過的,唯一的傻瓜證明系統是不給客戶端的代碼,並改爲SAAS(服務作爲軟件)解決方案。

0

如何使用能夠從加密存儲中加載類的修改過的類加載器呢?因爲你不直接暴露jar和它內部的類可能會有所幫助,但是正如所有其他人所說的 - 它不會防彈。