2011-09-03 44 views
1

我有一個基於Java 1.6的RCP應用程序。我在機器上使用虛擬機唯一ID作爲數字來唯一標識機器,並根據此編號生成許可證密鑰。VMId上Java RCP應用程序的許可證密鑰

我已經完成了基本測試,它似乎工作得很好。我能夠唯一標識每臺機器,並且對於多個會話VMId保持不變(重新啓動,註銷等)。此外,如果我將我的軟件安裝複製到另一臺機器,它不起作用。

我唯一的擔憂是,如果這是爲RCP應用程序構建許可算法的完美方法。它們是否有可能會失敗的邊界邊界?如果有人更新他們的java軟件,我很擔心這會改變VMId。

等待專家的意見,

納文

+0

你是如何計算的VMID?你在使用java.rmi.dgc.VMID嗎? – Favonius

+0

是的,我使用相同的功能。它是否正確 ? – Naveen

回答

1

如果你看到的java.rmi.dgc.VMID

public VMID() 
{ 
    addr = localAddr; 
    uid = new UID(); 
} 

默認構造函數,那麼你會發現,這取決於對IP的hash地址(對於使用localhost127.0.0.1的所有機器都是相同的)。但是(和它的一個但是),它也取決於java.rmi.server.UID

現在,作爲每Javadoc中:

的獨立產生的UID實例是 對於它在只要生成的主機隨時間獨一無二的,因爲主機要求 多於一毫秒重新引導和其系統時鐘從未設置爲 落後。

現在沒有可用的重啓時間不到1毫秒的機器。我見過的最快的是MS-DOS(不知道啓動時間)和Google OS(根據他們的促銷需要3-4秒)。因此,如果它是唯一的因素,我會感到安全,但我仍然會測試這個因素。


如果我必須在多臺機器上使用您的產品,但只支付一臺機器,那麼我會將其安裝在運行VMPlayer或VirtualBox的操作系統上。這樣我可以分發你的工具的多個副本。你有沒有檢查過這種情況。另外,在我的開發機器上,我通常有兩種不同的JDK(最新版本用於玩遊戲,第二款用於客戶特定開發)。衆所周知,VMID和UID類具有多個JVM的問題。選中此項: http://www.velocityreviews.com/forums/t131825-can-we-generate-unique-id-from-java.html

而且,看看這個的javadoc:http://fuseyism.com/classpath/doc/java/rmi/dgc/VMID.html

通常情況下,我所看到的許可策略更多地參與。像(在Windows機器上)創建/使用一些註冊表鍵值,由一些Web服務支持一次性註冊,詢問用戶某些鹽值(如他/她的名字,年齡),然後從中生成許可密鑰。因此,如果您確定您的產品用戶不會使用任何虛擬化技術(如vmplayer等),那麼不存在多個與JVM相關的問題,並且他們可能沒有可用的互聯網一次性激活,然後繼續使用它。

但請記住,對於一個堅定的攻擊者沒有任何軟件是太很難打破,因爲它是從盜版/破解遊戲和在市場上的軟件數量可見一斑。

+0

好的,所以對於連接到相同路由器的多臺機器以及獨立機器,VMId是不同的。在重啓之間它也保持相同。我唯一要測試的就是時間旅行。我不關心MS-DOS,它不是我的客戶端:)。我只是想知道是否有什麼我可能會失蹤之前,實際上推到我的prod軟件 – Naveen

+0

@Naveen:看到我更新的答案。 – Favonius

+0

感謝您的詳細回覆。我將檢查多個VM副本問題。儘管我的用戶在技術上並不幸福,但我不會挑戰他們採取我的許可邏輯。我也在考慮集成許可軟件狗等,儘管沒有解決如何有效地許可它。感謝您的幫助 – Naveen