注册 登录
编程论坛 VB6论坛

注册激活码

zxh48911805 发布于 2023-08-08 10:44, 1257 次点击
  
只有本站会员才能查看附件,请 登录
大神们请指点下,假如想用软件使用者电脑的物理地址或者是序列号做为注册激活码。  应该怎么做,有代码最好感谢感谢。

[此贴子已经被作者于2023-8-8 10:45编辑过]

6 回复
#2
约定的童话2023-08-08 12:39
注册码是按照你这自己的逻辑设计的,获取MAC地址之后进行一定逻辑字符运算,得出新的字符进行注册即可

Public Function GetMacAddress() As String
    Dim objWMIService As Object
    Dim colItems As Object
    Dim objItem As Object
    Dim strMacAddress As String
    strMacAddress = ""
    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
    For Each objItem In colItems
        strMacAddress = objItem.MACAddress
        Exit For
    Next objItem
    Set objWMIService = Nothing
    Set colItems = Nothing
    GetMacAddress = strMacAddress
End Function
#3
zxh489118052023-08-08 14:43
回复 2楼 约定的童话
你知道我的水平不行,给个列子吧
#4
约定的童话2023-08-08 19:55
比如物理地址里面的字符A-Z全部替换成指定字符,得出新的字符串之后,回填到软件里面进行判断,当然你的软件要提前把这种规则写好,这样才能识别出来
#5
风吹过b2023-08-08 20:42
按4楼的方法(恺撒密码)代码网上有很多。
加密后的字符,再自己增加一个固定的字符串, 拼接起来后, MD5 运算(算法也网上有)
MD5 运算出 32个字符,也有一种是16个字符的。如果注册码用不了这么长,那么你也可以在这中间截取一段,如从第3个字符开始截取8个字符。
得到的结果就可以当做 激活码了。

变通1,固定的字符串,使用用户输入的用户名,就是 一机一用户一码 了。
变通2,算法,MD5,说它烂大街了,不想用,自己写一个简单点的。
刚想出一个算法,自己想办法实现。
 1、 生成代码表,如字母不区分大小写,1=1,0=10,A=11,B=12, 符号自己确定要不要,自己再向编号,这个顺序号不要跳。编号 都是2位的。把字符查表转数字。
 2、把数字的数字全部连接起来。这个连接,可以按一定规律连接,并没说一定要按顺序连接。如左右左右的连接。现在我们现在需要 8 位 注册码。连接长度 除以 4 , 取整,得到平均字符数,。
 3、1-3位,按平均字符数取数字,转数值。第4位,取剩下的所有数字。
 4、数字,如果小于N位(位数自己定,不要超过8位),乘一个固定值,建议为1-2位奇数。达到后除以 编号总数,得到商和余数。余数查代码表得到一个字符。商继续除,直到在代码表范围内,也可以在这步继续取余数。这样就得到了2个字符。
 5、所有的字符拼起来,就是一个8位字符了。


#6
风吹过b2023-08-08 21:37
自己想的算法,实现。
程序代码:



Public Type DMBTYPE
    ZF As String * 1
    DM As Byte
End Type

Const dbmc = 37                '代码表总长度
Public dmb(dbmc) As DMBTYPE    '我使用的字符是  0-9+A-Z+空格

Public Function JM8(s As String) As String

If dmb(1).DM = 0 Then       '代码表是否存在,否则生成
    Call generatedmb
End If

Dim s1 As String, s2 As String, s3 As String

Dim i As Long, j As Long

Dim f(4) As Long


s1 = UCase(s)       '转大写字母。如果代码表使用了小写字母,这里就不转

For i = 1 To Len(s1)               '查代码表,拼起来,不在代码表中的字符会返回0
    s2 = s2 & FDMB(Mid(s1, i, 1))
Next i
   
j = Len(s2) / 4          '每节长度

For i = 1 To 3
    f(i) = Mid(s2, 1 + (i - 1) * j, j)       '前三,
Next i
    f(4) = Right(s2, Len(s2) - 3 * j)        '剩下的全给4
   
'拼接顺序 2 + 3 + 1 + 4 ,自己可以乱写
s3 = dfc(f(2)) & dfc(f(3)) & dfc(f(1)) & dfc(f(4))

JM8 = s3
End Function

Private Function dfc(d As Long) As String
'数字转代码
Dim s As String

    Do While d < 999999              '小于指定值,累乘
        d = d * 13
    Loop
   
    s = s & FFDMB(CByte(d Mod dbmc))       '取余,反查表,得到一个字符

    d= d / 53                        '再次随手引入一个变化
    Do While d > dbmc                '大于代码表数,累除
        d = d / dbmc
    Loop
    s = s & FFDMB(CByte(d))        '反查表,得到一个字符

dfc = s
End Function

Private Function FDMB(s As String) As Byte
'查代码表
Dim i As Long

For i = 1 To dbmc
    If dmb(i).ZF = s Then
        FDMB = dmb(i).DM
        Exit For
    End If
Next i
End Function

Private Function FFDMB(s As Byte) As String
'反查代码表
Dim i As Long
For i = 1 To dbmc
    If dmb(i).DM = s Then
        FFDMB = dmb(i).ZF
        Exit For
    End If
Next i
End Function

Private Sub generatedmb()
Dim i As Long
Dim j As Long
'代码段分三段,第一段 A-M,第二段0-9+空格,第三段N-Z,可以自己调整。

For i = 1 To 13
    dmb(i).ZF = Chr(i + 64)     '1+64=65 A
    dmb(i).DM = i
Next i
For i = 14 To 23
    dmb(i).ZF = Chr(i + 34)      '14+34  =0
    dmb(i).DM = i
Next i

 
    dmb(i).ZF = " "              '这时等于上一个循环结束值+1。指定为空格
    dmb(i).DM = i

For i = 25 To dbmc
    dmb(i).ZF = Chr(i + 53)      '64-11 = 53 为中间跳过的字母
    dmb(i).DM = i
Next i
End Sub
#7
zxh489118052023-08-09 11:40
回复 6楼 风吹过b
没看懂
1