利用磁碟的序列號進行軟體加密 (轉)
利用的序列號進行
用過共享軟體的人都知道,一般的共享軟體(特別是國外的)在使用一段時間後都會提出一些“苛刻”的要求,如讓您輸入註冊號等等。如果您想在軟體中實現該“功能”的話,方法有很多。在這裡我介紹一種我認為性比較高的一種,僅供參考。
大家都知道,當您在命令列中鍵入“dir”指令後,都會讀出一個稱作Serial Number的十六進位制數字。這個數字理論上有上億種可能,而且很難同時找到兩個序列號一樣的。這就是我這種註冊方法的理論依據,透過判斷指定磁碟的序列號決定該機器的註冊號。
要實現該功能,如何獲得指定磁碟的序列號是最關鍵的。在中,有一個GetVolumeInformation的,我們利用這個函式就可以實現。
下面是實現該功能所需要的程式碼:
Private Declare Function GetVolumeInformation& Lib "kernel32" _
Alias "GetVolumeInformationA" (ByVal lpPathName As String, _
ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, _
lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, _
ByVal nFileSystemNameSize As Long)
Private Const MAX_FILENAME_LEN = 256
Public Function DriveSerial(ByVal sDrv As String) As Long
'Usage:
'Dim ds As Long
'ds = DriveSerial("C")
Dim RetVal As Long
Dim str As String * MAX_FILENAME_LEN
Dim str2 As String * MAX_FILENAME_LEN
Dim a As Long
Dim b As Long
GetVolumeInformation sDrv & ":", str, MAX_FILENAME_LEN, RetVal, _
a, b, str2, MAX_FILENAME_LEN
DriveSerial = RetVal
End Function
如果我們需要某個磁碟的序列號的話,只要Serial(該磁碟的磁碟機代號)即可。如DriverASerialNumber=DriverSerial("A")。
下面,我們就可以利用返回的磁碟序列號進行加密,需要用到一些數學知識。在這裡我用了俄羅斯密碼錶的加密演算法對進行了數學變換的序列號進行加密。下面是註冊碼驗證部分的程式碼:
Public Function IsValidate(ByVal SRC As Long, ByVal Value As String) As Boolean
Dim String As String
Dim NewSRC As Long
For i = 0 To 30
If (SRC And 2 ^ i) = 2 ^ i Then
SourceString = SourceString + "1"
Else
SourceString = SourceString + "0"
End If
Next i
If SRC < 0 Then
SourceString = SourceString + "1"
Else
SourceString = SourceString + "0"
End If
Dim Table As String
Dim TableIndex As Integer
'================================================================================
'這是密碼錶,根據你的要求換成別的,不過長度要一致
'================================================================================
'注意:這裡的密碼錶變動後,對應的註冊號生成器的密碼錶也要完全一致才能生成正確的註冊號
Table = "JSDJFKLUWRUOISDH;KSADJKLWQ;ABCDEFHIHL;KLADSHKJAGFWIHERQOWRLQH"
'================================================================================
Dim Result As String
Dim Mid As String
Dim MidWordValue As Byte
Dim ResultValue As Byte
For t = 1 To 1
For i = 1 To Len(SourceString)
MidWord = Mid(SourceString, i, 1)
MidWordValue = Asc(MidWord)
TableIndex = TableIndex + 1
If TableIndex > Len(Table) Then TableIndex = 1
ResultValue = Asc(Mid(Table, TableIndex, 1)) Mod MidWordValue
Result = Result + Hex(ResultValue)
Next i
SourceString = Result
Next t
Dim BitTORool As Integer
For t = 1 To Len(CStr(SRC))
BitTORool = SRC And 2 ^ t
For i = 1 To BitTORool
SourceString = Right(SourceString, 1) _
+ Left(SourceString, Len(SourceString) - 1)
Next i
Next t
If SourceString = Value Then IsValidate = True
End Function
由於程式碼較長,還有一些部分的程式碼在此省略,您可以去我的網站()源研究一下。
最後,我們就可以利用這些子程式進行加密了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990080/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用磁碟的序列號進行軟體加密 (3千字)加密
- 軟體序列號查詢軟體:Serial Box for MacMac
- 利用符號進行的型別轉換,轉換成數字型別 ~~符號型別
- 軟體加密方法的思考 (轉)加密
- 如何利用 KLEE 符號執行引擎挖掘軟體漏洞符號
- 利用數學軟體Mathematica的三維影像進行建模
- Serial Box for mac(Mac軟體序列號大全)Mac
- Mac軟體序列號大全:Serial Box for macMac
- 如何利用隨身碟給軟體加密加密
- mac軟體序列號機器人:KCNScrew for MacMac機器人
- 利用橢圓曲線進行加密通訊加密
- 利用 Redis 生成序列號的功能實現編號自增Redis
- 網路安全中如何對加密軟體進行安全防護?加密
- 如何利用PPPOE進行ASDL撥號連線?
- Android利用廣播進行IP撥號Android
- Windows序列號集(轉)Windows
- Vice Society 勒索軟體正在利用PrintNightmare漏洞進行攻擊
- 軟體 system menachinc 的它用(附:序列號破解) (1千字)
- 利用PHAR協議進行PHP反序列化攻擊協議PHP
- 使用GnuPG對檔案進行加密(轉)加密
- 取得網路卡序列號 (轉)
- 警惕:利用防毒軟體 更狡猾的木馬(轉)防毒
- 利用電話線進行WindowsNT RAS(轉)Windows
- 自媒體多平臺管理軟體,管理多個賬號進行釋出
- 每月更新的Mac軟體序列號查詢小機器人KCNScrew PackMac機器人
- mac軟體序列號查詢工具:KCNcrew Pack for mac 最新啟用Mac
- 蘋果電腦軟體序列號查詢必備工具:Serialbox蘋果
- 條碼列印軟體中如何批次製作可變序列號
- 時間序列知識圖譜-《利用Python進行資料分析》Python
- 如何利用API介面進行高效的商品變體管理?API
- 在雲中利用開源軟體進行開發以提高創新能力
- 利用LINUX進行遠端辦公(轉)Linux
- 序列號查詢工具KCNScrew解決多個軟體的註冊問題
- 對軟體專案中產生的需求進行分級管理 (轉)
- 利用X.509證書對XML進行加密和簽名XML加密
- 利用classfinal-maven-plugin對jar進行加密,防止反編譯MavenPluginJAR加密編譯
- Joel on Software 祖爾談軟體:行進中開火 (轉)
- 時間序列分析專題——利用SPSS專家建模器進行建模SPSS