PS_URINE 发表于 2015-6-13 11:19

VB6.0 CrackMe

本帖最后由 PS_URINE 于 2015-6-13 14:32 编辑


老规矩,追码或爆破都可以
这次使用VB6编写(天然屏障一道)
核心算法(注册码判断)

Private Sub Picture1_Click()
    '我也知道这段代码写的很难,But当初VB数组没学好啊....
    Dim code() As Byte
    Dim uecode=1() As Byte
    Dim i As Integer
    uecode=1() = Text2.Text '用户注册码
    code() = Text1.Text 'UNICODE字符流可以直接转,相当于易语言的字节集比较,真注册码,就是机器码
    '这段代码其实是将注册码转为byte数组然后一位一位比较
    '所以下strcat或strcmp之类的断点是无用功的
    '其实这里一步在OD里面可以看出 TextBox1中的内容,细心的人就会记录下来,然后注册码就出来了
    If getlen(code) <> getlen(uecode=1) Then '如果byte位数不等可直接判断为错误注册码
      frm_false.Show '载入假窗口
      Beep '鸣叫喇叭
      Exit Sub
    End If
    For i = 0 To getlen(uecode=1) '这里开始一位一位循环比较
    If i = 0 Then '如果i=0
      If code(i) <> uecode=1(i) Then '这里加个IF虽然有点多余,然而FOR EACH语句耗时最长,且变体变量用多了后果你懂的.
            frm_false.Show
            Beep
            Exit Sub '跳出子程序,不执行真窗口载入
      End If
    ElseIf i > 0 Then
      If code(i - 1) <> uecode=1(i - 1) Then '如果一位不相等
      frm_false.Show '载入假窗口
      Beep
      Exit Sub '跳出子程序,不执行真窗口载入
      End If
    End If
    Next i
    frm_true.Show '载入真窗口
    Beep
    '----------------------------------------
End Sub

Function getlen(ByRef ary() As Byte) As Long '取数组元素个数
    Dim lenth As Long
    lenth = UBound(ary) - LBound(ary) + 1
    getlen = lenth
End Function

PS_URINE 发表于 2015-6-13 11:22

PS_URINE 发表于 2015-6-13 13:36

其实注册码就是机器码{:5_116:}
我说起码回复一个,让我加个HB吧{:5_118:}

赖哥 发表于 2015-6-13 13:38

{:5_116:}听说回帖有HB

阿卡林 发表于 2015-6-13 14:10

00403943      3BC0          cmp eax,eax

004039FE      8A1C30      mov bl,byte ptr ds:

00403A94      8A1C30      mov bl,byte ptr ds:

tony2526 发表于 2015-6-13 14:13

楼主这个有点坑啊,俺就灵机一动,直接把上面的机器码复制下来粘了下,竟然成了{:5_118:}

PS_URINE 发表于 2015-6-13 14:16

tony2526 发表于 2015-6-13 14:13
楼主这个有点坑啊,俺就灵机一动,直接把上面的机器码复制下来粘了下,竟然成了

我已经发了{:5_116:}

tony2526 发表于 2015-6-13 14:19

刚看到了,刚刷新了就发现了{:5_117:}

CracKingMe 发表于 2015-6-13 14:37



利用VB Decompiler 来找关键
OD来调试
段首下段,往下跟出假码,继续跟应该就是机器码了,误导我。。。。。
在往下就是爆破点

Desire 发表于 2015-6-13 19:20

{:5_185:}这么多人玩了那我就来回复一下骗个hb好了
页: [1]
查看完整版本: VB6.0 CrackMe