首页
社区
课程
招聘
注册码我已经找到。但是想找出算法,写注册机。高手帮忙指点
发表于: 2004-6-6 05:33 4597

注册码我已经找到。但是想找出算法,写注册机。高手帮忙指点

2004-6-6 05:33
4597
经高人指点,我终于找到WinZip8.0的注册码。用户名为"shmily",注册码为"553D068A"。第一次学会破解,很激动。都说它的算法简单,所以偶想找出算法,写注册机。(我会C,VB)望高手指点一二......下面我贴出关键代码。
......
0167:00407F6D CALL [USER32!GetDlgItemTextA]
0167:00407F73 PUSH EDI             ←- 程序停留在这里,EDI指向“shmily”
0167:00407F74 CALL 0043F89A
0167:00407F79 PUSH EDI
0167:00407F7A CALL 0043F8C3
0167:00407F7F POP ECX
0167:00407F80 MOV ESI, 0048CDA4
0167:00407F85 POP ECX
0167:00407F86 PUSH 0B
0167:00407F88 PUSH ESI
0167:00407F89 PUSH 00000C81
0167:00407F8E PUSH EBX
0167:00407F8F CALL [USER32!GetDlgItemTextA]
0167:00407F95 PUSH ESI             ←- ESI指向“12345678”
0167:00407F96 CALL 0043F89A
0167:00407F9B PUSH ESI
0167:00407F9C CALL 0043F8C3
0167:00407FA1 CMP BYTE PTR [0048CD78],00   ←- [0048CD78]指向“shmily”
0167:00407FA8 POP ECX
0167:00407FA9 POP ECX
0167:00407FAA JZ 00408005
0167:00407FAC CMP BYTE PTR [0048CDA4],00   ←- [0048CDA4]指向“12345678”
0167:00407FB3 JZ 00408005
0167:00407FB5 CALL 00407905------F8进入
0167:00407FBA TEST EAX,EAX
0167:00407FC3 JZ 00408005
......

F10一步一步走,来到下面这里
......
0167:00407A91 LEA EAX,[EBP-0140]     ←- 程序停留在这里
0167:00407A97 PUSH EAX
0167:00407A98 PUSH EDI          ←- EDI指向输入的名字“shmily”
0167:00407A99 CALL 00407B47        ←- 计算注册码
0167:00407A9E MOV ESI,0048CDA4
0167:00407AA3 LEA EAX,[EBP-0140]
0167:00407AA9 PUSH ESI          ←- ESI指向输入的注册码“12345678”
0167:00407AAA PUSH EAX          ←- EAX指向正确的注册码“553D068A”
0167:00407AAB CALL 004692D0
下面还有一段程序记载着另一个注册码。第一次不知道,所以忘记记了。高人告诉我的。555555......
高手来帮我看一下,怎么看它的算法而写出注册机?应该是进入"0167:00407A99 CALL 00407B47"这句里面仔细研究是吗?

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

收藏
免费 5
支持
分享
最新回复 (1)
雪    币: 215
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
VB:点击下载:附件!

Public Function GenerateKey(ByVal Name As String) As String
    Dim lPart1 As Long
    Dim lPart2 As Long
    Dim ch As Long
    Dim i As Long
    Dim n As Long
    Name = Trim$(Name)
    Name = Mid$(Name, 1, 40)

    If Len(Name) = 0 Then
        Exit Function
    End If
    For i = 1 To Len(Name)
        ch = Asc(Mid$(Name, i, 1)) * &H100
        For n = 1 To 8
            If (((ch Xor lPart1) Mod &H10000) And &H8000&) = 0 Then
                lPart1 = lPart1 And &HFFFFFFF
                lPart1 = lPart1 * 2
            Else
                lPart1 = lPart1 And &HFFFFFFF
                lPart1 = lPart1 * 2
                lPart1 = lPart1 Xor &H1021&
            End If
            ch = ch * 2
        Next n
    Next i
    lPart1 = lPart1 + &H63&
    lPart1 = lPart1 Mod &H10000
    For i = 1 To Len(Name)
        lPart2 = lPart2 + (Asc(Mid$(Name, i, 1)) * (i - 1))
    Next i
    GenerateKey = String$(4 - Len(CStr(Hex(lPart1))), "0") _
    & CStr(Hex(lPart1)) _
    & String$(4 - Len(CStr(Hex(lPart2))), "0") _
    & CStr(Hex(lPart2))
End Function

Private Sub Text1_Change()
Text2.Text = GenerateKey(Text1)
End Sub
2004-6-6 07:16
0
游客
登录 | 注册 方可回帖
返回
//