1. 程式人生 > >C# 獲取硬碟序列號 Volume Serial Number

C# 獲取硬碟序列號 Volume Serial Number

在做軟體註冊時,通常用硬碟號(建議用雜湊後的硬碟號)作為本地電腦特徵碼,加上使用者名稱以及公司名等其他資訊,通過一定的演算法,得到軟體序列號。這樣做的好處的顯而易見的。它可以防止一個序列號N多人用的現象。現在有些軟體就是一個註冊碼,在網上公開,全世界人都在用。但是也有相應的缺陷。客戶只能在一臺電腦上用你寫的軟體。下面的方法通過Windows API獲得硬碟號。 using System.Runtime.InteropServices;
[DllImport(
"kernel32.dll")]
        
privatestaticexternint GetVolumeInformation( 
            
string lpRootPathName, 
            
string lpVolumeNameBuffer, 
            
int nVolumeNameSize, 
            
refint lpVolumeSerialNumber, 
            
int lpMaximumComponentLength, 
            
int lpFileSystemFlags, 
            
string lpFileSystemNameBuffer, 
            
int nFileSystemNameSize 
            ); 

        
privatestring GetVolOf(string drvID)
            
constint MAX_FILENAME_LEN =256
            
int retVal =0
            
int a =0
            
int b =0
            
string str1 =null
            
string str2 =null
            
int i = GetVolumeInformation( 
                drvID 
+@":"
                str1, 
                MAX_FILENAME_LEN, 
                
ref retVal, 
                a, 
                b, 
                str2, 
                MAX_FILENAME_LEN 
                ); 

            
return retVal.ToString("x"); 
        }

 呼叫方法:例如C盤:GetVolOf("C");

不過無論你的註冊演算法如何精妙,始終會被破解。因為你的演算法始終在軟體客戶端,cracker總是有機會找到你的註冊演算法,做出註冊機來。看看網上流傳的五花八門的註冊機就知道了。個人覺得如果做依賴Web的程式,最好還是把註冊演算法寫在Web Service裡面,這樣cracker就沒法從本地破解註冊演算法了,這樣就大大增加了安全性。