VB制作软件注册机

时间:2022-09-04 13:42:30
用vb制作了一个软件,想让制作的软件在别人机器上使用时要输入注册码才行,注册码有我电脑上的某个注册软件生成,应该怎么做呢,请高手指点。对不起,分不多了

12 个解决方案

#1


在数据库中创建一个注册表格,表格里面包含注册信息。首次运行程序时需要输入注册序列号才行。

#2


这样也行?

#3


引用 1 楼 veron_04 的回复:
在数据库中创建一个注册表格,表格里面包含注册信息。首次运行程序时需要输入注册序列号才行。

这个靠普

#4


方法很多,凭自己想像,关键是计算方法和加密方法 让别人怎么难破解怎么来,当然没有破解不了的注册

#5


根据注册机写需要注册的程序?

LZ还是自己写个算法吧..一搜网上一堆源码,改改就好了

#6


引用 3 楼 laotou99 的回复:
引用 1 楼 veron_04 的回复:

在数据库中创建一个注册表格,表格里面包含注册信息。首次运行程序时需要输入注册序列号才行。

这个靠普

天呐!放在数据库里?您还不如直接把注册码告诉别人得了

#7


引用 6 楼 mfkinfo 的回复:
引用 3 楼 laotou99 的回复:
引用 1 楼 veron_04 的回复:

在数据库中创建一个注册表格,表格里面包含注册信息。首次运行程序时需要输入注册序列号才行。

这个靠普

天呐!放在数据库里?您还不如直接把注册码告诉别人得了
你没理解人家的意思。其实不用数据库,用文件就可以。

第一次运行的时候提示输入注册码,用户跟你要过来注册码后输入进去,软件可以进去,同时将这个注册码写入到旁边的一个文件,假设叫reg.txt中。

程序每次运行都首先读取reg.txt内容,读过来自动比较,正确的话进入,不正确的话弹出注册对话框。

#8


引用楼主 zhaoleinefu 的回复:
用vb制作了一个软件,想让制作的软件在别人机器上使用时要输入注册码才行,注册码有我电脑上的某个注册软件生成,应该怎么做呢,请高手指点。对不起,分不多了

你查一下Adoble Photoshop的注册码是怎么保存的.

#9


前面说的差不多了

读他的硬件序列号
将这个写死到代码里
注册后
发给他
这种方法的缺点是: 只能在一台机器上运行

#10


MD5("软件名称和版本号"+"软件合法使用的时间和地点信息"+"软件作者的身份证号"+"软件卖出的价格"+"使用者的身份证号"+"使用者的手机号"+"一个只有软件作者知道的密码")
Option Explicit
Private Declare Function CryptAcquireContext Lib "advapi32.dll" Alias "CryptAcquireContextA" (ByRef phProv As Long, ByVal pszContainer As String, ByVal pszProvider As String, ByVal dwProvType As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptReleaseContext Lib "advapi32.dll" (ByVal hProv As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptCreateHash Lib "advapi32.dll" (ByVal hProv As Long, ByVal Algid As Long, ByVal hKey As Long, ByVal dwFlags As Long, ByRef phHash As Long) As Long
Private Declare Function CryptDestroyHash Lib "advapi32.dll" (ByVal hHash As Long) As Long
Private Declare Function CryptHashData Lib "advapi32.dll" (ByVal hHash As Long, pbData As Any, ByVal dwDataLen As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptGetHashParam Lib "advapi32.dll" (ByVal hHash As Long, ByVal dwParam As Long, pbData As Any, pdwDataLen As Long, ByVal dwFlags As Long) As Long
Private Const HP_HASHVAL = 2
Private Const HP_HASHSIZE = 4
Private Const PROV_RSA_FULL = 1
Private Const CRYPT_NEWKEYSET = &H8
Private Const ALG_CLASS_HASH = 32768
Private Const ALG_TYPE_ANY = 0
Private Const ALG_SID_MD2 = 1
Private Const ALG_SID_MD4 = 2
Private Const ALG_SID_MD5 = 3
Private Const ALG_SID_SHA1 = 4
Enum HashAlgorithm
    MD2 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD2
    MD4 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD4
    MD5 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD5
    SHA1 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA1
End Enum

Public Function HashString(ByVal Str As String, Optional ByVal Algorithm As HashAlgorithm = MD5) As String
    Dim hCtx As Long
    Dim hHash As Long
    Dim lRes As Long
    Dim lLen As Long
    Dim lIdx As Long
    Dim abData() As Byte

   lRes = CryptAcquireContext(hCtx, vbNullString, vbNullString, PROV_RSA_FULL, 0)
   If lRes <> 0 Then
      lRes = CryptCreateHash(hCtx, Algorithm, 0, 0, hHash)
      If lRes <> 0 Then
         lRes = CryptHashData(hHash, ByVal Str, Len(Str), 0)
         If lRes <> 0 Then
            lRes = CryptGetHashParam(hHash, HP_HASHSIZE, lLen, 4, 0)
            If lRes <> 0 Then
                ReDim abData(0 To lLen - 1)
                lRes = CryptGetHashParam(hHash, HP_HASHVAL, abData(0), lLen, 0)
                If lRes <> 0 Then
                    For lIdx = 0 To UBound(abData)
                        HashString = HashString & Right$("0" & Hex$(abData(lIdx)), 2)
                    Next
                End If
            End If
         End If
         CryptDestroyHash hHash
      End If
   End If
   CryptReleaseContext hCtx, 0
   If lRes = 0 Then Err.Raise Err.LastDllError
End Function

使用者如果盗版,凭这个md5密码上法院告他。

#11


引用 4 楼 hsgzr1 的回复:
方法很多,凭自己想像,关键是计算方法和加密方法 让别人怎么难破解怎么来,当然没有破解不了的注册


MD5加密目前有大面积破解的吗?预置信息的不算。

#12


引用 10 楼 zhao4zhong1 的回复:
MD5("软件名称和版本号"+"软件合法使用的时间和地点信息"+"软件作者的身份证号"+"软件卖出的价格"+"使用者的身份证号"+"使用者的手机号"+"一个只有软件作者知道的密码")
VB code
Option Explicit
Private Declare Function CryptAcquireContext Lib "advapi32.dll" Alias "CryptAcqui……


像这种全是if的,写成goto更美观。

#1


在数据库中创建一个注册表格,表格里面包含注册信息。首次运行程序时需要输入注册序列号才行。

#2


这样也行?

#3


引用 1 楼 veron_04 的回复:
在数据库中创建一个注册表格,表格里面包含注册信息。首次运行程序时需要输入注册序列号才行。

这个靠普

#4


方法很多,凭自己想像,关键是计算方法和加密方法 让别人怎么难破解怎么来,当然没有破解不了的注册

#5


根据注册机写需要注册的程序?

LZ还是自己写个算法吧..一搜网上一堆源码,改改就好了

#6


引用 3 楼 laotou99 的回复:
引用 1 楼 veron_04 的回复:

在数据库中创建一个注册表格,表格里面包含注册信息。首次运行程序时需要输入注册序列号才行。

这个靠普

天呐!放在数据库里?您还不如直接把注册码告诉别人得了

#7


引用 6 楼 mfkinfo 的回复:
引用 3 楼 laotou99 的回复:
引用 1 楼 veron_04 的回复:

在数据库中创建一个注册表格,表格里面包含注册信息。首次运行程序时需要输入注册序列号才行。

这个靠普

天呐!放在数据库里?您还不如直接把注册码告诉别人得了
你没理解人家的意思。其实不用数据库,用文件就可以。

第一次运行的时候提示输入注册码,用户跟你要过来注册码后输入进去,软件可以进去,同时将这个注册码写入到旁边的一个文件,假设叫reg.txt中。

程序每次运行都首先读取reg.txt内容,读过来自动比较,正确的话进入,不正确的话弹出注册对话框。

#8


引用楼主 zhaoleinefu 的回复:
用vb制作了一个软件,想让制作的软件在别人机器上使用时要输入注册码才行,注册码有我电脑上的某个注册软件生成,应该怎么做呢,请高手指点。对不起,分不多了

你查一下Adoble Photoshop的注册码是怎么保存的.

#9


前面说的差不多了

读他的硬件序列号
将这个写死到代码里
注册后
发给他
这种方法的缺点是: 只能在一台机器上运行

#10


MD5("软件名称和版本号"+"软件合法使用的时间和地点信息"+"软件作者的身份证号"+"软件卖出的价格"+"使用者的身份证号"+"使用者的手机号"+"一个只有软件作者知道的密码")
Option Explicit
Private Declare Function CryptAcquireContext Lib "advapi32.dll" Alias "CryptAcquireContextA" (ByRef phProv As Long, ByVal pszContainer As String, ByVal pszProvider As String, ByVal dwProvType As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptReleaseContext Lib "advapi32.dll" (ByVal hProv As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptCreateHash Lib "advapi32.dll" (ByVal hProv As Long, ByVal Algid As Long, ByVal hKey As Long, ByVal dwFlags As Long, ByRef phHash As Long) As Long
Private Declare Function CryptDestroyHash Lib "advapi32.dll" (ByVal hHash As Long) As Long
Private Declare Function CryptHashData Lib "advapi32.dll" (ByVal hHash As Long, pbData As Any, ByVal dwDataLen As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptGetHashParam Lib "advapi32.dll" (ByVal hHash As Long, ByVal dwParam As Long, pbData As Any, pdwDataLen As Long, ByVal dwFlags As Long) As Long
Private Const HP_HASHVAL = 2
Private Const HP_HASHSIZE = 4
Private Const PROV_RSA_FULL = 1
Private Const CRYPT_NEWKEYSET = &H8
Private Const ALG_CLASS_HASH = 32768
Private Const ALG_TYPE_ANY = 0
Private Const ALG_SID_MD2 = 1
Private Const ALG_SID_MD4 = 2
Private Const ALG_SID_MD5 = 3
Private Const ALG_SID_SHA1 = 4
Enum HashAlgorithm
    MD2 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD2
    MD4 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD4
    MD5 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD5
    SHA1 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA1
End Enum

Public Function HashString(ByVal Str As String, Optional ByVal Algorithm As HashAlgorithm = MD5) As String
    Dim hCtx As Long
    Dim hHash As Long
    Dim lRes As Long
    Dim lLen As Long
    Dim lIdx As Long
    Dim abData() As Byte

   lRes = CryptAcquireContext(hCtx, vbNullString, vbNullString, PROV_RSA_FULL, 0)
   If lRes <> 0 Then
      lRes = CryptCreateHash(hCtx, Algorithm, 0, 0, hHash)
      If lRes <> 0 Then
         lRes = CryptHashData(hHash, ByVal Str, Len(Str), 0)
         If lRes <> 0 Then
            lRes = CryptGetHashParam(hHash, HP_HASHSIZE, lLen, 4, 0)
            If lRes <> 0 Then
                ReDim abData(0 To lLen - 1)
                lRes = CryptGetHashParam(hHash, HP_HASHVAL, abData(0), lLen, 0)
                If lRes <> 0 Then
                    For lIdx = 0 To UBound(abData)
                        HashString = HashString & Right$("0" & Hex$(abData(lIdx)), 2)
                    Next
                End If
            End If
         End If
         CryptDestroyHash hHash
      End If
   End If
   CryptReleaseContext hCtx, 0
   If lRes = 0 Then Err.Raise Err.LastDllError
End Function

使用者如果盗版,凭这个md5密码上法院告他。

#11


引用 4 楼 hsgzr1 的回复:
方法很多,凭自己想像,关键是计算方法和加密方法 让别人怎么难破解怎么来,当然没有破解不了的注册


MD5加密目前有大面积破解的吗?预置信息的不算。

#12


引用 10 楼 zhao4zhong1 的回复:
MD5("软件名称和版本号"+"软件合法使用的时间和地点信息"+"软件作者的身份证号"+"软件卖出的价格"+"使用者的身份证号"+"使用者的手机号"+"一个只有软件作者知道的密码")
VB code
Option Explicit
Private Declare Function CryptAcquireContext Lib "advapi32.dll" Alias "CryptAcqui……


像这种全是if的,写成goto更美观。