2011-01-05 60 views
4

我正在爲自己編寫的軟件寫我自己的序列號驗證/保護。嵌入程序中的C#序列號

假設序列號驗證者正在使用模式匹配...一旦序列號被驗證,我如何更改程序本身,以便它不再向用戶詢問序列號?

我真的不想創建一個單獨的許可證文件。有沒有在程序中嵌入它的方法?或者是註冊表唯一的其他選項(除了在線驗證等)

回答

6

你不應該真的試圖編輯程序本身 - 它會破壞簽名/強命名,exe/dll文件幾乎肯定會被鎖定,即使您進行了影子複製:許多用戶將不會有權限在程序文件(或點擊一次)中對其進行編輯。

許可證文件或註冊表設置等外部合適的東西似乎是合適的(除非您希望在每個客戶端的服務器上構建應用程序)。

0

您可以將輸入的序列號保存到文件或註冊表中,只要用戶啓動應用程序就對其進行身份驗證。

2

有沒有一種方法將其嵌入程序本身?

如果您暗示要修改程序集,那麼可能*,您需要有兩個程序集 - 一個當前正在執行,另一個正在修改 - 因爲正在執行的程序集將被鎖定文件系統。而且您需要預留足夠的空間來存儲您打算注入的任何新值。

* 爲了證明這一點,我創建了一個小型可執行文件,它只是寫入一個字符串的值,並使用十六進制編輯器來更改字符串的值。

但是,您需要非常聰明地瞭解您所做的更改,否則註冊軟件,然後將修改後的二進制文件複製到其他機器將會繞過您的註冊過程。

將註冊詳細信息存儲在註冊表中可能是一種更簡單的解決方案。

2

就我個人而言,我總是從機器硬件生成一個唯一的密鑰,並將其存儲在註冊表中。

下面是一個唯一密鑰的簡單示例,但如果您希望對不同版本的軟件使用不同的密鑰,則可能需要對其進行擴展。

http://www.vcskicks.com/hardware_id.php

+0

只是再次讀取OP和意識到我已經回答了所有的錯誤,我仍然會超過嵌入註冊表設置去。 – nik0lias 2011-01-05 10:14:59