自定义VB程序加密方案
目錄
第一步,獲取電腦唯一性標志
第二步,編密文
第三步,封裝Dll
第四步,編客戶端和注冊機
注冊
C盤序列號
電腦名
第五步,應用程序引用
?
第一步,獲取電腦標志
? ? 每一臺電腦的標志有哪些?
? ? 1、硬盤序列號
? ? 2、電腦名
? ? 3、IP地址
? ? 想到的就這些了,本案列以C盤序列號和電腦名為電腦的識別依據,以闡述加密算法
? ? 獲取C盤序列號代碼:
? ? Dim DriveID
? ? Set DriveID = CreateObject("Scripting.FileSystemObject")
? ? mySerial = DriveID.GetDrive("C").SerialNumber
? ? 獲取電腦名代碼:
? ? dim?PcName as string? '電腦名
? ??Set a = CreateObject("Wscript.Network")
? ? PcName =? a.ComputerName ??
? ? OK,如果要給另一臺電腦使用權限,限定識別時間,使用期限,加上試用次數
? ? 差不多了。比如:
? ? 信息大概這樣寫:2018/9/6_10_-2070513827_DESKTOP-NS7FOVN_2019/3/9
? ? 解釋下:日期(后續程序可以自定義保留5天)_試用次數_未注冊或者注冊信息錯誤但格式正確,提取該數字每次打開“-1”,? ? ? _C盤序列號_電腦名_到期日期(可設定為固定字段,然后封裝到程序內,即便含義依然很難破解算法【dll封】)
第二步,編密文
第一步的注冊信息基本完備,如上圖,如果就這樣給用戶使用程序,注冊碼隨便編一個也可,辛苦敲定的程序就成了做貢獻了,別吃飯了,但是我們如何讓用戶看不懂注冊碼呢——加密算法??纯磩e個的算法介紹:
https://blog.csdn.net/ddffr/article/details/77153127
看了算法原理介紹以后(其實想多了),個人這幾個渣渣小程序還沒那么大的影響力,稍微秀一下小算法,簡單點你破解依然很困難,除非你知道我的dll里面寫的什么。來吧,我也來介紹下我的算法思路,算法相同,隨便改改參數你都很難破解,而且為了這點成本花這么大力氣破解這么簡單的算法是沒有必要的,我想。
2018/9/6_10_-2070513827_DESKTOP-NS7FOVN_2019/3/9,將每一個字符轉化為2個字符
假定字符x,char(97)=a? ,? ASC(a)=97? , 則ASC(x)=yy 或則 ASC(x)=zzz
大家知道,ascii碼集中在33-126間,那么我減去某個數或則加上某個數那么這群數字就全是yy,或者zzz了
我在逆向算法時按字段長度取出來就是了,正向算法時不足加上某個特定字符就可以了
以下就是編譯之后的注冊碼了,大哥們,誰有興趣為小程序破譯這個算法
1、注冊有時限
2、試用有次數限制
3、指定使用階段,本參數在dll里面,怎么破
4、限定使用時間
5、針對你的C盤序列號和電腦名僅此一份
本程序針對封閉式工程研發小程序,基本不予外網連接,困難點就是輸入注冊碼較多,比較麻煩,但是實現原理簡單
不想麻煩那就用參考鏈接里面的大數因式分解吧,以后研究,我還沒考慮好該如何將這幾個信息變成大數呢,各位歡迎評論
?
第三步,封裝Dll
繼承第二部,我們需要將理論的算法付諸實踐
在該類模塊插入以下代碼,Change1是類Certif20的一個方法(正向編譯成數字),其余程序就可以引用了——封裝為dll。
Public Function Change1(ByVal Str1 As String) As String
? ? Dim Str_B As String
? ? For i = 1 To Len(Str1)
? ? ? ? tt = Mid(Str1, i, 1)
? ? ? ? Str_B = Str_B & (Asc(tt) - 30)
? ? Next
? ? Change1 = Str_B
End Function
逆向編譯段
Public Function Change2(ByVal Str1 As String) As String
? ? Dim State01 As Boolean
? ? State01 = False
? ? For i = 1 To Len(Str1) / 2
? ? ? ? tt = Mid(Str1, i * 2 - 1, 2)
? ? ? ? Str_C = Str_C & Chr(CInt(tt) + 30)
? ? Next
? ? Change2 = Str_C
End Function
以上代碼是兩位的,如果要弄成3位的也可,參數做一下修改
最后生成dll即可。
?
第四步,編客戶端和注冊機
圖一圖二分別是客戶端和注冊機界面,原理大家一看便知,便不多說了,直接上代碼
注冊
Private Sub Command1_Click()
? ? Rem 獲取C盤序列號
? ? Dim C_str, CName, Str1 As String
? ? Dim DriveID
? ? Set DriveID = CreateObject("Scripting.FileSystemObject")
? ? C_str = DriveID.GetDrive("C").SerialNumber
? ? Set a = CreateObject("Wscript.Network")
? ? CName = a.ComputerName
? ??
? ? Dim Cer1 As Certif20
? ? Set Cer1 = New Certif20
? ? Str1 = Cer1.Change2(Text3.Text)
? ? Dim Arr1
? ? Arr1 = Split(Str1, "CQVB")
? ? If UBound(Arr1) <> 2 Then
? ? ? ? MsgBox "注冊信息有誤" & Chr(10) & "聯系郵箱:510265404@qq.com", , "注冊失敗"
? ? ? ? Exit Sub
? ? End If
? ? If Arr1(1) <> CStr(C_str) Then
? ? ? ? MsgBox "序列號不匹配" & Chr(10) & "聯系郵箱:510265404@qq.com", , "注冊失敗"
? ? ElseIf InStr(Arr1(2), CName) <> 1 Then
? ? ? ? MsgBox "電腦名不匹配" & Chr(10) & "聯系郵箱:510265404@qq.com", , "注冊失敗"
? ? Else
? ? ? ? Dim date2 As Date
? ? ? ? date2 = right(Arr1(2), Len(Arr1(2)) - Len(CName))
? ? ? ? MsgBox "恭喜恭喜!" & Chr(10) & "有效期至: " & date2, , "注冊成功"
? ? ? ? Rem 創建記錄 ? ? ? ?*******************************************************
? ? ? ? Rem 判斷有無緩存記錄(txt),無則創建一個空值
? ? ? ? Dim fso As Object, blnExist As Boolean
? ? ? ? Set fso = CreateObject("Scripting.FileSystemObject")
? ? ? ? blnExist = fso.FileExists("D:\MSFus_1.0\Setting\Certif\licence.txt")
? ? ? ? If blnExist = False Then
? ? ? ? Dim sFile As Object
? ? ? ? Set sFile = fso.CreateTextFile("D:\MSFus_1.0\Setting\Certif\licence.txt", True)
? ? ? ? End If
? ? ? ? Rem 讀取TXT
? ? ? ? Const ForWriting = 2
? ? ? ? Set sFile = fso.OpenTextFile("D:\MSFus_1.0\Setting\Certif\licence.txt", 2, TristateFalse)
? ? ? ? sFile.Write Text3.Text
? ? ? ? sFile.Close
? ? ? ? Set fso = Nothing
? ? ? ? Set sFile = Nothing
? ? End If
End Sub
C盤序列號
Private Sub Command2_Click()
? ? Rem 獲取C盤序列號
? ? Dim DriveID
? ? Set DriveID = CreateObject("Scripting.FileSystemObject")
? ? Text1.Text = DriveID.GetDrive("C").SerialNumber
End Sub
電腦名
Private Sub Command3_Click()
? ? Set a = CreateObject("Wscript.Network")
? ? Text2.Text = a.ComputerName
End Sub
第五步,應用程序引用
按上面描述的,實現以下幾個功能
1、注冊有時限
2、試用有次數限制
3、指定使用階段,本參數在dll里面
4、限定使用時間
5、針對你的C盤序列號和電腦名僅此一份
列:2018/9/6_10_-2070513827_DESKTOP-NS7FOVN_2019/3/9
1、逆向解析為上面信息串(使用dll的Change2)
2、獲取生成序列號的日期,與當前日期比較10天內可以注冊,其余時間不予注冊
3、解析與本機不符的,但格式正確,將試用次數(-1),直至次數小于1程序提示不能使用,請注冊
4、注冊成功的,試用次數直接至零,判斷使用末期與注冊日期是否符合指定階段,不是不給運行
5、判斷當前日期是否比使用末期小,否則不予運行
OK了,代碼后續跟上……感謝各位支持。
?
?
參考資源:
https://blog.csdn.net/ddffr/article/details/77153127
https://baike.baidu.com/item/DES/210508?fr=aladdin
總結
以上是生活随笔為你收集整理的自定义VB程序加密方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: h5(html5)+css3+移动端前端
- 下一篇: OpenGL ES glew 下载和使用