2012-07-11 48 views
0

我開發了一個java庫,我認爲它是一個有價值的知識產權。我想保護它免受未被允許的軟件使用。如何保護Java庫不被其他項目使用?

我應該說我的圖書館有一個乾淨的API,我將把使用它的項目的源代碼(不是庫)分發給我的客戶。

我的意思是我想改變圖書館,它只能在我公司的項目中正常工作,但沒有人不能在其他項目中使用它。

什麼是保護圖書館的最佳解決方案?

我必須補充說我可以混淆庫(但不是客戶的應用程序)。

+0

所以,你不給庫的源代碼,是否正確?那麼你給出的源代碼是什麼? – Wires77 2012-07-11 20:48:55

+0

使用庫的應用程序的來源。 – 2012-07-11 21:45:23

回答

1

兩個可能性:

  • 你想發佈您的應用程序的源代碼,並允許客戶自行編譯和修改源;在這種情況下,保護你的圖書館在技術上是不可能的,不管語言如何。
  • 您只給出源代碼的信息,您不希望它們編譯或修改源代碼。在這種情況下,我看至少2個級別的安全性可以實現:

    1. 您編譯和您的圖書館來源混淆您的應用程序。這樣,所有的公共API都會被混淆,幾乎無法使用(除非有人真的想將其混淆,祝你好運......)。你也可以重新包裝你的類,你的所有類庫都將與應用程序包相同,因此很難知道哪些文件是庫的一部分,以及它正在做什麼。
    2. 您在編譯時實現了一種機制,用於計算應用程序jar的散列,並修改您的庫源代碼以在運行時檢查該應用程序是否真的是您的應用程序。

我相信混淆就足夠了。如果某人成功理解了你的混淆代碼,他將很容易破解解決方案2。

除此之外,你什麼都不能做,沒有這個機制。

用於混淆我強烈建議Proguard

+0

我想到了像第二種解決方案這樣的機制,就像我用yGuard最好的'name-scheme'策略一樣。我沒有找到散列,而是在類路徑中檢查一堆類的存在。 – 2012-07-12 01:25:15

+0

在這兩種情況下,破解都很容易,難的部分是找到由於混淆而導致檢查的位置。這絕對不是阻止某人使用你的庫的機制,但肯定是混淆。 – tibo 2012-07-12 04:40:32

+0

我知道,所以我正在想辦法讓客戶端應用程序無法輕易確定庫是否正常工作。 – 2012-07-12 07:43:48

相關問題