算法难度:⭐
爆破难度:⭐
信息收集
运行情况:
输入用户名,序列号,点OK进行验证
查壳与脱壳:
无壳,程序由VB5.0编写
调试分析
这个程序以前做CM的时候分析过,以x86dbg+IDA进行逆向分析的,详情见参考资料[1]
这次就直接拖VBDec里用专门的VB反编译软件进行分析
这个程序有用的代码就一个OK按钮的点击事件,总共就这么几行:
很神奇一点就是,这点之前没发现,这里藏了一个文本框,我就说代码里咋三个文本框呢,这个是用来保存数据的
算法分析
有几行看不懂啥意思,直接x86dbg动态跟踪看看效果,整体注释:
Private Sub OK_Click() '402310
loc_004023D3: call var_8004 = var_C4(Me, Me, 0, 0, 0) // 获取用户名输入
loc_00402415: var_8008 = Len(var_C4(Me, Me, 0, 0, 0).MousePointer) // 计算用户名长度
loc_0040242D: var_800C = Asc(CrackMe.Text1.Text) // 取用户名首字符的ASCII码
loc_0040243F: call var_8010 = global_004040E0(var_8008*97531+var_800C) // 97531*用户名长度+首字符的ASCII码,结果转换成字符串
loc_00402458: CrackMe.RegSerial.Text = var_8010 // 设置这个文本框的值
loc_004024DE: call var_8014 = var_C0(Me)
loc_0040258B: If (CrackMe.Serial.Text = "AKA-" & var_C0(Me).MousePointer) + 1 Then // 判断输入的序列号是否为AKA-拼接刚刚计算的值
loc_004025C4: var_8028 = MsgBox("You Get It" & vbCrLf & "KeyGen It Now", 0, var_4C, var_5C, var_6C)
loc_004025E5: Else
loc_0040261C: var_8034 = MsgBox("You Get Wrong" & vbCrLf & "Try Again", 0, var_4C, var_5C, var_6C)
loc_0040263B: End If
loc_00402652: GoTo loc_0040269E
loc_0040269D: Exit Sub
loc_0040269E: ' Referenced from: 00402652
End Sub
总结
依然是很简单的一次VB逆向