典型的產品激活方案如下有關產品激活機制問題
- 一個獨特的序列號。分配給用戶
- 爲用戶機器生成唯一的硬件ID。
在給這個信息給供應商,供應商發出的激活碼。
我想知道如何生成激活代碼,什麼是它的內容。 一旦在用戶pc上的應用程序中輸入了激活碼,就像它被解碼,存儲,下次檢查一樣,一般的方案是什麼?
由於
典型的產品激活方案如下有關產品激活機制問題
在給這個信息給供應商,供應商發出的激活碼。
我想知道如何生成激活代碼,什麼是它的內容。 一旦在用戶pc上的應用程序中輸入了激活碼,就像它被解碼,存儲,下次檢查一樣,一般的方案是什麼?
由於
這樣做的一個非常簡單的方法是將PC相關硬件列表編譯成字符串,然後運行MD5散列它。所以你的字符串會用於例如包含
"Pentium 4 Dual Core 3.8 GHz, HDD1: 320GB"等 幾乎所有語言都有很多免費的MD5散列實現,您可以通過Google進行搜索。
你不說你的目標是什麼平臺,但如果你使用的是Windows,您可以通過查詢WMI或使用Windows API調用獲得PC的硬件配置。例如,在WMI中查看的物理內存類是Win32_PhysicalMemory。
當第一次安裝該軟件,該散列被編譯,然後發送到激活服務器,它發回了相應的代碼,將僅匹配到散列。一個非常簡單/無用的例子 - 假設硬件散列值爲123,並且檢查算法是在添加硬件散列和激活代碼後所有數字應爲9,激活服務器將返回876.該程序將添加2一起編碼並獲得999,然後解鎖以供使用。
定期的程序將重新創建硬件散列,將其添加到激活碼(僅在我的超簡單示例中),並確保它們仍然合計。如果他們不這樣做,產品可能會鎖定自己並堅持重新激活。
但是,我強烈建議你不要使用這種複製保護方法。爲什麼不?
恰恰可以防止用戶我會建議你使用登記的哈希黨的名字或公司名稱,並將其嵌入到程序中,以便程序明顯可以註冊。是的,這在技術上允許他們更容易地複製軟件。底線是 - 如果你的軟件對許多人來說真的很有價值,那麼不管它有多複雜,有人會繞過你的版權保護計劃。使用基於硬件配置的產品激活只會加劇你真正想與之做生意的那一羣人 - 那些基本誠實並想合法使用你的產品的人。不提供有關合法軟件的人員將使用您的激活方案已被破解的版本。
我個人很鄙視購買任何產品,如果我改變我的電腦或公司關閉,我無法保證可以使用它。這有點像最近人們購買喬治奧威爾的1984年的Kindles,然後當有版權爭議時,亞馬遜遠程刪除了人們購買的這本書的所有副本。
只是我的2C。
像邁克爾(託德)評論說,所述方法或方案具有不同的供應商而異。如果它真的是標準的,那麼'黑客'可能更容易,是嗎?
我假定你的最終目的是保護軟件不被非法使用?
這裏有一些相關的SO職位:
How do you protect your software from illegal distribution?
Methods to stop Software Piracy ?
UPDATE:
更直接地回答了OP的問題:
我想知道如何激活碼生成它的內容是什麼?
@:可以是專有散列/加密序列號。用戶/產品/日期信息或幾乎任何其他信息。
還有什麼是總體方案一旦激活代碼輸入到應用程序的用戶的電腦,就像它是如何解碼,存儲,檢查下一次?
@:軟件可能具有內部的一些算法可以使這個代碼的意義有效期至少檢查。可以存儲爲一個文件,在註冊表中,甚至可以嵌入到現有文件等等中。
是的,當然,我只是想知道可以用什麼方法來保護軟件。需要一些想法來開始。 – Omkar 2009-12-09 06:46:25
好的,添加更多信息到我的文章,請參閱上面:) – 2009-12-09 07:08:09
我假設你問過這個問題,因爲你想自己實現類似的東西。
這裏我將概述一個可以用來幫助保護購買軟件的合法性的方案。這有助於保護公司免受盜版,並有助於保持客戶的寶貴採購合法且相對容易註冊。
該方案的工作原理是跟蹤三個獨立的數據元素:一個是自動生成的,一個是用戶輸入的,另一個是由這兩個數據計算出來的。當產品沒有被激活時,它可以使用一組縮減的功能運行,或者完全不運行。
該過程涉及到與網站的通信,但是當網站不可用時,還有其他機制,以便用戶仍然可以使用該軟件,而不會對許可問題感到沮喪。 方法論
該軟件利用三個基本數據元素:
邏輯流程
在僞代碼,該軟件通過以下步驟運行:
begin:
load IC
if not IC: IC = generateIC
load UI
if not UI: UI = promptUser
testHash:
load HASH
if HASH=hash(IC,UI): goto valid
HASH = activateLicense()
if not HASH=hash(IC,UI): goto invalid
valid:
REV = revokeLicense()
if REV: goto invalid
done : run software
invalid:
done : do not run software
generateIC:
IC = some unique identifier
store IC
return IC
promptUser:
UI = get id from user input
store UI
return UI
activateLicense:
HASH = wwwResponse('activationRequest')
store HASH
return HASH
revokeLicense:
REV = wwwResponse('checkIfRevoked')
if REV: erase HASH
return REV
的僞代碼還包括可選的第四元素:
未能連接到網站只會意味着許可證的狀態不會改變。如果軟件無法直接連接到網站,那麼可以通過Web啓用點提供替代程序,用戶將他們的IC和UI輸入到瀏覽器中,然後瀏覽器向他們發送電子郵件給他們手動輸入到軟件的HASH。這隻涉及多一點,但仍然讓用戶自己來做這件事,一個重要的因素是如果他們希望接收將通過電子郵件發送給他們的散列碼,他們必須輸入一個有效的電子郵件。
這不是防黑客或不可戰勝的,但它確實有助於以合理的方式保護雙方,而不會導致挫敗感。涉及的實際機制應該嚴密守護公司機密。
注:
這並不重要,在此方案IC是否是對電腦的硬件散列或者如果它只是一些隨機產生的密鑰。它發生變化時所發生的一切就是軟件將自行重新註冊,如果它所在的機器已連接到互聯網,這可能不會成爲問題,或者如果再次需要用戶交互,可能會帶來一些不便,但如上所述,該部分仍然可以作爲網站上的自助服務功能實施。如果要計算激活次數或跟蹤其他信息,則由軟件公司決定。
「產生激活碼的[H] ow」在每個供應商的情況下可能都不同。而且,也可能是一個嚴密保密的祕密。 – 2009-12-09 06:16:22
確保您不會因使用任何硬件項目的100%完全匹配編碼而產生用戶偏見,但可以進行一些更改。我討厭看到軟件包無法啓動,因爲我升級了第二塊硬盤,或者更換了我的鼠標或視頻卡。 – 2010-01-29 22:33:40