VC 中利用磁碟序列號識別正版軟體

2021-04-27 12:57:29 字數 2226 閱讀 8830

vc++中利用磁碟序列號識別正版軟體

2023年06月23日 星期六 上午 11:37

摘要:本文講述了獲取磁碟序列號的方法,並利用所讀取的磁碟序列號來作為甄別正版

關鍵字:磁碟序列號、正版軟體、識別

一、 引言

作為程式設計師,不希望看到自己辛辛苦苦編制的軟體被盜版,雖然國家為了打擊盜版和保護智財權出台了一系列的相關法律法規,但仍有眾多的地下盜版商在利益的驅使下置國法於不顧,對眾多的軟體進行非法複製、傳播,所以身為程式設計師有必要加強自我保護意識、利用自身在程式設計方面的優勢對自己編寫的軟體進行保護,防止或儘量減少被盜版的可能性。本文就針對這個問題提出了一種簡便易行的對正版軟體進行甄別的方法。

二、 設計思路與實現原理word

nvolumenamesize,

lpdword lpvolumeserialnumber,

lpdword lpmaximumcomponentlength,

lpdword lpfilesystemflags,

lptstr lpfilesystemnamebuffer,

dword nfilesystemnamesize );

在這裡只需通過lprootpathname來設定我們需要檢測的磁碟驅動器號,執行後結果儲存在lpvolumeserialnumber中,其他引數我們不關心,均設為空(null)。

我們必須在程式開始執行時馬上進行檢測工作,驗證為正版的才可以繼續執行,否則就終止程式的執行使盜版無法使用,從而達到保護正版軟體的目的。我們允許將同乙份正版軟體安裝到有限的多台計算機中,將識別用的唯一識別符號用軟盤的磁碟序列號來表示,這張軟盤就作為該套軟體的鑰匙盤,首先檢測在硬碟中是否有認證檔案,如果沒有就把鑰匙盤插入到軟碟機,在驗證序列號正確的前提下把c盤的序列號儲存到認證檔案中,下次執行程式就會檢測到認證檔案,通過對認證檔案內容和c盤序列號的動態比較來識別是否是正版,如果不能匹配,需要再插入鑰匙盤再做乙個認證檔案。所以整個驗證系統只需該套軟體在某台計算機上首次執行程式時需要使用一次鑰匙盤,或是在認證檔案發生損壞後需要使用鑰匙盤對其進行恢復,其餘時間均由認證檔案對正版進行保證。下面的流程圖展示了程式對正版的唯一識別符號進行驗證的全部過程:

三、 程式的具體實現

在程式正式編寫之前,需要預先獲取到作為鑰匙盤的軟盤的磁碟序列號,使之作為我們判斷軟體是否為正版的依據。可用前面提到的api函式getvolumeinformation()來實現:

dword dwserialnum;

雙字型變數dwserialnum內儲存有鑰匙盤的序列號。並把該值在正式程式中用#define巨集定義為乙個常量,作為正版的標識。由於需要在程式正式執行前對程式的正版與否進行識別所以需要在程式的入口函式,應用程式類的initinstance()函式中對其進行程式設計,並且應該在識別完畢之前用m_pmainwnd->showwindow(sw_hide);函式隱藏程式主介面,直至判定為正版之後方可改變其引數為"sw_show"將主介面正常顯示。下面是對認證檔案進行判別的主要**:

……

if(file.open("logo.ini",cfile::modereadwrite)==false)

else

else

m_bcanrun=true;}……

if(m_bcanrun==true)

else

postquitmessage(0);

跟據設計的流程圖,當沒有發現認證檔案(首次執行程式)時或是認證檔案內容與c盤的序列號不匹配(認證檔案出錯)時就要利用鑰匙盤建立/恢復認證檔案,下面是實現該功能的makekey函式的部分關鍵**: ……

getvolumeinformation("a://",null,null,&dwserialnum,null,null,null,null);

if(dwserialnum==serialnum)//serialnum就是我們預先獲取的作為正版標識的序列號

else

四、 小結

本文介紹的只是此類軟體中的一種實現方法,在理解本文程式設計思想的基礎下也可以採用其他類似的方法對軟體進行保護,比如也可以用網絡卡的標識號作為認證的標識等等。

getvolumeinformation("a://",null,null,&dwserialnum,null,null,null,null);

利用磁碟的序列號進行軟體加密

用過共享軟體的人都知道,一般的共享軟體 特別是國外的 在使用一段時間後都會提出一些 苛刻 的要求,如讓您輸入註冊號等等。如果您想在軟體中實現該 功能 的話,方法有很多。在這裡我介紹一種我認為安全性比較高的一種,僅供參考。大家都知道,當您在命令列中鍵入 dir 指令後,系統都會讀出乙個稱作serial...

獲取硬碟序列號(VC)

說明 經過上百臺計算機測試,ide和sata硬碟可以獲取序列號 scsi硬碟沒有測試環境,無法測試成功與否。請有條件的朋友幫忙測試下,給個訊息,謝謝。虛擬機器上測試不了,不用測試了。ide測試出來全部是0000等數字。網路流傳的版本不少,下下來測試修改了下。include include inclu...

VC獲取硬碟物理序列號

以下完整內容 最近才做完了這個獲取 ide 硬碟物理序列號的程式。宣告一下,這個程式是我根據 lynn mcguire 的那個 diskid32 的源 做了些自以為是的改動得到的,只能在 nt 平台下獲得第一塊 ide 硬碟的物理序列號。同時,這個程式用到了不少未公開的 windows 的結構和常量...