首页
社区
课程
招聘
算法已经搞清,但不知如何写注册机。求一份VB的注册机源码
发表于: 2011-11-23 17:47 4661

算法已经搞清,但不知如何写注册机。求一份VB的注册机源码

2011-11-23 17:47
4661
某软件算法如下:
0084842ACA01  //机器码
3307075DFD34  //算法1:机器码变换,每一位数分别与3相加,加数与和小于A(41),的直接得出数值,加数大于A(41)的,为0;加数大于等于A(41)的,直接得出数值。
337070D5DF43  //算法2:机器码变换后移位。每两位前后交换一下位置。
337070353543  //算法3:变换移位后机器码的每位数的ASCII小于A(41)不参与计算,直接为注册码位;ASCII值大于A(41)小于K(4B)的减去11,值转换成16进制数为注册码位;大于K(4B)小于U(55)的减去1B,值转换成16进制数为注册码位;ASCII值大于等于U(55)的减去25,值转换成16进制数为注册码位。
求VB注册机源码,并注释。

PS:算法2已找到解决办法,试了很久,就是算法1和3不知如何解决。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
解释的没有,自己揣摩:

Private Sub Command1_Click()
Dim ID As String, n As Integer, i As Integer
Dim tmp As Integer, BytStr() As Byte

ID = Text1
If Len(ID) \ 2 <> Len(ID) / 2 Then Exit Sub
BytStr = StrConv(ID, vbFromUnicode)
n = UBound(BytStr)
For i = 0 To n
If BytStr(i) < 56 Then
BytStr(i) = BytStr(i) + 3
ElseIf BytStr(i) >= 56 And BytStr(i) < 58 Then
BytStr(i) = 48
ElseIf BytStr(i) > 64 Then
BytStr(i) = BytStr(i) + 3
End If
Next
For i = 0 To (n - 1) / 2
BytStr(2 * i) = BytStr(2 * i) Xor BytStr(2 * i + 1)
BytStr(2 * i + 1) = BytStr(2 * i) Xor BytStr(2 * i + 1)
BytStr(2 * i) = BytStr(2 * i) Xor BytStr(2 * i + 1)
Next
For i = 0 To n
If BytStr(i) > 64 And BytStr(i) < 75 Then
BytStr(i) = BytStr(i) - 17
ElseIf BytStr(i) >= 75 And BytStr(i) < 85 Then
BytStr(i) = BytStr(i) - 27
End If
Next
Text2 = StrConv(BytStr, vbUnicode)
End Sub
2011-11-23 21:10
0
雪    币: 146
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
谢谢!我试一下。

兄弟,你的VB太棒了,赞一个!

PS,在其他的机器上测试后,发现两处错误,一处溢出BUG,不知是我没说清楚,还是理解错了,经调试现修改如下:
Private Sub Command1_Click()
Dim a As String, ID As String, n As Integer, i As Integer
Dim tmp As Integer, BytStr() As Byte
Text2 = "请正确填写软件号!"
ID = Text1
a = Len(ID)
If a <> 12 Then GoTo a:
If Len(ID) \ 2 <> Len(ID) / 2 Then Exit Sub
BytStr = StrConv(ID, vbFromUnicode)
n = UBound(BytStr)
For i = 0 To n
If BytStr(i) < 55 Then
BytStr(i) = BytStr(i) + 3
ElseIf BytStr(i) >= 55 And BytStr(i) < 57 Then
BytStr(i) = 48
ElseIf BytStr(i) > 64 Then
BytStr(i) = BytStr(i) + 3
End If

Next
For i = 0 To (n - 1) / 2
BytStr(2 * i) = BytStr(2 * i) Xor BytStr(2 * i + 1)
BytStr(2 * i + 1) = BytStr(2 * i) Xor BytStr(2 * i + 1)
BytStr(2 * i) = BytStr(2 * i) Xor BytStr(2 * i + 1)

Next
For i = 0 To n
If BytStr(i) > 65 And BytStr(i) < 75 Then
BytStr(i) = BytStr(i) - 17
ElseIf BytStr(i) >= 75 And BytStr(i) < 85 Then
BytStr(i) = BytStr(i) - 27
ElseIf BytStr(i) >= 85 Then
BytStr(i) = BytStr(i) - 37

End If
Next
Text2 = StrConv(BytStr, vbUnicode)
a:
End Sub

Private Sub Command2_Click()
MsgBox "感谢看雪学院的BlueT童鞋!", 0, "致 谢"
End Sub
2011-11-23 21:12
0
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
Private Sub Command1_Click()
Dim ID As String, n As Integer, i As Integer
Dim tmp As Integer, BytStr() As Byte

ID = Text1
If Len(ID) <> 12 Then Exit Sub
BytStr = StrConv(ID, vbFromUnicode)
n = UBound(BytStr)
For i = 0 To n
Select Case BytStr(i)
Case Is < 56: BytStr(i) = BytStr(i) + 3
Case 56 To 57: BytStr(i) = 48
Case Is > 64: BytStr(i) = BytStr(i) + 3
End Select
Select Case BytStr(i)
Case 65 To 74: BytStr(i) = BytStr(i) - 17
Case 75 To 84: BytStr(i) = BytStr(i) - 27
Case Is > 84: BytStr(i) = BytStr(i) - 37
End Select
Next
For i = 0 To (n - 1) / 2
BytStr(2 * i) = BytStr(2 * i) Xor BytStr(2 * i + 1)
BytStr(2 * i + 1) = BytStr(2 * i) Xor BytStr(2 * i + 1)
BytStr(2 * i) = BytStr(2 * i) Xor BytStr(2 * i + 1)
Next
Text2 = StrConv(BytStr, vbUnicode)
End Sub


2011-11-24 22:56
0
雪    币: 146
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
这次的代码更精练,又学了一种方法。条条道路通罗马 继续赞~~~
2011-11-24 23:25
0
游客
登录 | 注册 方可回帖
返回
//