我在發牌過程中產生一點點的硬件鎖。安裝前會生成(希望)唯一硬件ID,並將其編碼爲我的許可證文件的一部分。每當我的應用程序啓動時,硬件密鑰就會重新生成並與已註冊的密鑰進行比較。C#創建一個強大的硬件串口/硬件ID
其實,硬件密鑰是指第一CPU,BIOS和主板的相關信息基礎上the solution by Alex Sutu。
到目前爲止好 - 這樣的CPU的變化順序 - 目前,該系統在新的CPU都處於動態鏈接虛擬環境中運行。使用失效的密鑰,軟件不再運行 - 正如我所期望的那樣,而不是我的客戶。所以我必須改變這個過程。據我所知,Windows 7(甚至以前的版本)在其激活/註冊ID內具有某種穩健性 - 較小的硬件更改並未使激活/許可證失效 - 這正是我想要模仿的內容我的許可背景。
我發現了一個小的解釋here - 這讓我覺得一般來說有以下過程:
,登記要求:
- 生成使用不同的設置(CPU,主板,BIOS X不同的硬件ID,無論)
- 許可文件
內註冊這些ID當啓動應用程序:
- 使用不同的設置(CPU,主板,BIOS,無論)生成X個不同的硬件ID(WMI訪問是否足夠快?替代品?)
- 如果超過百分之X(95?)的新生成的有等於從許可文件登記的,一切都很好,並在應用程序啓動
實際上,生成硬件使用WMI查詢的ID需要相當長的時間(4到8秒之間)。
static string identifier(string wmiClass, string wmProperty)
{
string result = "";
var mc = new ManagementClass(wmiClass);
var moc = mc.GetInstances();
foreach (var mo in moc)
{
if (result == "")
{
try
{
result = mo[wmProperty].ToString();
//Only get the first one
break;
}
catch
{
}
}
}
return result;
}
調用示例:
string retVal = identifier("Win32_Processor", "UniqueId");
所以我不幹一個有點不確定,是否考慮多個標識,考慮是正確的選擇。
因此最後一個問題: 這是建立一個強大的硬件許可還是我失去了一個點的可行辦法?其次,如果這是「最先進的」,我的WMI方法是正確的還是有更好的方法?
非常感謝!
嗨,羅伯特,非常感謝 - 我已經想過更新標識符存儲,但是我發現這樣一個挑戰:我的許可證是用私鑰生成的,應用程序只知道公共的許可證。存儲所有ID的許可證文件都是加密的,因此我可以發佈我的私鑰(我猜想沒有好主意)或存儲不安全的ID。我想我會留在最後一種方法,但有一點規則增強。許可證只有有效,而以前的ID至少有百分之一和原始ID有效。異步方式也是我會檢查的一種方式。 – Monga
當然,你可以存儲不安全的ID。通過「安全」我的意思是「毫無問題」,這麼簡單的哈希就可以做到。只需確保刪除或替換ID由應用程序檢查。 –
好的,謝謝你指出方向! – Monga