新手破解练习Crackme160之138 - Sortof

VB的程序直接上VB Decompiler, 按钮事件源码:

Private Sub Command1_Click() '41AAF4
  'Data Table: 401D40
  Dim var_194 As String
  Dim var_B4 As Variant
  Dim var_1EC As Variant
  loc_41A54C: On Error Goto loc_41AABF
  loc_41A559: If Not((X = 1)) Then
  loc_41A55C:   GoTo loc_41AABF
  loc_41A55F: End If
  loc_41A564: var_94 = vbNullString 'Variant
  loc_41A578: var_C4 = Chr(&H32) 'Variant
  loc_41A58C: var_D4 = Chr(&H33) 'Variant
  loc_41A5A0: var_E4 = Chr(&H34) 'Variant
  loc_41A5B4: var_F4 = Chr(&H35) 'Variant
  loc_41A5C8: var_104 = Chr(&H36) 'Variant
  loc_41A5DC: var_114 = Chr(&H37) 'Variant
  loc_41A5E5: var_124 = 0 'Variant
  loc_41A6C3: var_194 = Me.Text1.Text & Me.Text1.Text & Me.Text1.Text & Me.Text1.Text & Me.Text1.Text & Me.Text1.Text & Me.Text1.Text & Me.Text1.Text & Me.Text1.Text
  loc_41A711: var_1BC = CVar(var_194 & Me.Text1.Text & Me.Text1.Text & Me.Text1.Text) 'Variant
  loc_41A75F: ' Referenced from: 41A9C5
  loc_41A7AF: var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
  loc_41A811: var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
  loc_41A873: var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
  loc_41A87D: var_B4 = var_94 & (var_C4 + CVar(Asc(CStr(Left(var_1BC, 1))))) & (var_D4 + CVar(Asc(CStr(Left(var_1BC, 1))))) & (var_E4 + CVar(Asc(CStr(Left(var_1BC, 1))))) 
  loc_41A8D5: var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
  loc_41A937: var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
  loc_41A999: var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
  loc_41A9A3: var_B4 = var_B4 & (var_F4 + CVar(Asc(CStr(Left(var_1BC, 1))))) & (var_104 + CVar(Asc(CStr(Left(var_1BC, 1))))) & (var_114 + CVar(Asc(CStr(Left(var_1BC, 1))))) 
  loc_41A9A7: var_94 = var_B4 'Variant
  loc_41A9B6: If (var_124 = 1) Then
  loc_41A9B9:   GoTo loc_41A9DC
  loc_41A9BC: End If
  loc_41A9C1: var_124 = 1 'Variant
  loc_41A9C5: GoTo loc_41A75F
  loc_41A9D8: var_200 = CVar(Me.Left) 'Variant
  loc_41A9DC: ' Referenced from: 41A9FE
  loc_41A9DC: ' Referenced from: 41A9B9
  loc_41A9EB: If (Len(var_94) < 12) Then
  loc_41A9FA:   var_94 = "0" & var_94 'Variant
  loc_41A9FE:   GoTo loc_41A9DC
  loc_41AA01: End If
  loc_41AA1B: var_210 = "1012041024412" 'Variant
  loc_41AA22: var_94 = var_94 'Variant
  loc_41AA35: If (Len(var_94) > 12) Then
  loc_41AA4B:   var_94 = Left(var_94, &HC) 'Variant
  loc_41AA4F: End If
  loc_41AA58: If (X = 1) Then
  loc_41AA7B:   var_1EC = Not (CVar(Me.Text2.Text) = var_94)
  loc_41AA87:   If CBool(var_1EC) Then
  loc_41AA8A:     GoTo loc_41AABF
  loc_41AA8D:   End If
  loc_41AA8D: End If
  loc_41AAAE: MsgBox("Well I'll be damned!!  nice job", 0, "correct", var_1EC, var_260)
  loc_41AABE: Exit Sub
  loc_41AABF: ' Referenced from: 41AA8A
  loc_41AABF: ' Referenced from: 41A55C
  loc_41AABF: ' Referenced from: 41A54C
  loc_41AAE0: MsgBox("sorry! try again", 0, "try again", var_1EC, var_260)
  loc_41AAF0: Exit Sub
End Sub

直接翻译到VBS中: keygen.vbs

call main()
sub main()
  name = inputbox("输入用户名")
  var_94 = vbNullString 'Variant
  var_C4 = Chr(&H32) 'Variant
  var_D4 = Chr(&H33) 'Variant
  var_E4 = Chr(&H34) 'Variant
  var_F4 = Chr(&H35) 'Variant
  var_104 = Chr(&H36) 'Variant
  var_114 = Chr(&H37) 'Variant
  var_124 = 0 'Variant
  var_1BC = name & name & name & name & name & name & name & name & name & name & name & name
  do
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    var_B4 = var_94 & (var_C4 + (Asc(CStr(Left(var_1BC, 1))))) & (var_D4 + (Asc(CStr(Left(var_1BC, 1))))) & (var_E4 + (Asc(CStr(Left(var_1BC, 1))))) 
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    var_B4 = var_B4 & (var_F4 + (Asc(CStr(Left(var_1BC, 1))))) & (var_104 + (Asc(CStr(Left(var_1BC, 1))))) & (var_114 + (Asc(CStr(Left(var_1BC, 1))))) 
    var_94 = var_B4 'Variant
    If (var_124 = 1) Then
      Exit do
    End If
    var_124 = 1 'Variant
  loop while(true)
  while (Len(var_94) < 12)
    var_94 = "0" & var_94 'Variant
  wend
  If (Len(var_94) > 12) Then
    var_94 = Left(var_94, &HC) 'Variant
  End If
  MsgBox "用户名: "&name&chr(13)&chr(10)&"系列号: "&var_94, 0, "注册机"
  Exit Sub
End Sub

经测试2位以上的叠数都可以, 其它非叠数却不行, 如:
用户名: 11 (2个以上的1都可以)
系列号: 515253545556
这个测试通过~

用户名: 12
系列号: 525354545556
这个则无法通过~

偷偷瞧了一下solly大佬的代码, 哈哈~ 原来是反编译器有点问题, 正确代码如下, 大家可以对比一下:

call main()
sub main()
  name = inputbox("输入用户名")
  var_94 = vbNullString 'Variant
  var_C4 = Chr(&H32) 'Variant
  var_D4 = Chr(&H33) 'Variant
  var_E4 = Chr(&H34) 'Variant
  var_F4 = Chr(&H35) 'Variant
  var_104 = Chr(&H36) 'Variant
  var_114 = Chr(&H37) 'Variant
  var_124 = 0 'Variant
  var_1BC = name & name & name & name & name & name & name & name & name & name & name & name
  do
    var_B4 = var_94 & (var_C4 + (Asc(CStr(Left(var_1BC, 1)))))
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    var_B4 = var_B4 & (var_D4 + (Asc(CStr(Left(var_1BC, 1)))))
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    var_B4 = var_B4 & (var_E4 + (Asc(CStr(Left(var_1BC, 1))))) 
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    
    var_B4 = var_B4 & (var_F4 + (Asc(CStr(Left(var_1BC, 1)))))
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    var_B4 = var_B4 & (var_104 + (Asc(CStr(Left(var_1BC, 1)))))
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    var_B4 = var_B4 & (var_114 + (Asc(CStr(Left(var_1BC, 1))))) 
    var_1BC = Right(var_1BC, CLng((Len(var_1BC) - 1))) 'Variant
    
    var_94 = var_B4 'Variant
    If (var_124 = 1) Then
      Exit do
    End If
    var_124 = 1 'Variant
  loop while(true)
  while (Len(var_94) < 12)
    var_94 = "0" & var_94 'Variant
  wend
  If (Len(var_94) > 12) Then
    var_94 = Left(var_94, &HC) 'Variant
  End If
  MsgBox "用户名: "&name&chr(13)&chr(10)&"系列号: "&var_94, 0, "注册机"
  Exit Sub
End Sub

运行示例:
用户名: 12
系列号: 515353555557

代码继续简化一下:

name = inputbox("输入用户名")
var_94 = vbNullString 'Variant
str = "234567"
while len(name) < 6 
  name = name & name
wend
for i=1 to 6
  var_94 = var_94 & (cint(mid(str, i, 1)) + asc(mid(name, i, 1)))
next
while (Len(var_94) < 12)
  var_94 = "0" & var_94 'Variant
wend
If (Len(var_94) > 12) Then
  var_94 = Left(var_94, &HC) 'Variant
End If
MsgBox "用户名: "&name&chr(13)&chr(10)&"系列号: "&var_94, 0, "注册机"

 
 
 
这是160个软件part1
这是160个软件part2

1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载

新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~

下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~
OD界面布局

posted @ 2024-08-05 11:34  hankerstudio  阅读(8)  评论(0)    收藏  举报