Serial
VB 的程序先用 VB Decompiler 跑一下试试,结果就什么都出来了
点击按钮时检查注册码,注册码在选择 CrackMe 1.0 时产生
注册码生成部分,与日期相关,生成的注册码存在 var_1D0 中
最简单的办法就是直接复制到 Excel 里运行一下,注册码就出来了
Sub test()
var_88 = CLng((((Day(Now) * Day(23)) + (Month(Now) * Month(2))) + (Year(Now) * Year(3))))
var_1D0 = CStr((((var_88 + var_88) + CLng((Day(14) * Year(2020)))) + CLng((Day(14) * Year(2020)))))
Sheet1.Cells(1, 1) = var_1D0
End Sub
Name Serial
同样得到了反编译出的代码
有了刚才的经验,直接把代码扔进 Excel 运行一下
看着没啥问题,竟然不对,在 OD 里研究研究
OD 里 p-code 编码的程序感觉一团乱,看来有空还得研究一下 p-code
所以并没研究出来为什么不对。偷窥一下大神的帖子,发现代码中的
If ((var_A8 + 1) >= 39) Then
需要修改成
var_A8 = var_A8 + 1
If (var_A8 >= 39) Then
这样才能注册成功,然而并没有找到这样修改的原因
在网上找了好多相关文章也没有详细解释这里的
扔进 Excel 运行的完整代码:
Sub test()
Dim var_90 As Long
Dim var_1CC As Variant
If (Len(Sheet1.Cells(1, 1)) < 5) Then
Sheet1.Cells(2, 1) = "At least 5 characters!"
Exit Sub
End If
var_94 = "0110617121214051216101106141404110614140411091211100810101608040610121608100416"
var_98 = Sheet1.Cells(1, 1)
var_A8 = 1 'Variant
For var_108 = 4 To CVar(Len(var_98)): var_C8 = var_108 'Variant
var_90 = CLng((CDbl(var_90) + (CDbl(Asc(Mid$(var_98, CLng(var_C8), 1))) * Val(Mid$(var_94, CLng((var_A8 * 3)), 3)))))
var_A8 = var_A8 + 1
If (var_A8 >= 39) Then
'If ((var_A8 + 1) >= 39) Then
var_A8 = 0 'Variant
End If
Next var_108 'Variant
var_A8 = 1 'Variant
For var_168 = 4 To CVar(Len(var_98)): var_C8 = var_168 'Variant
var_1CC = CVar((CDbl((Asc(Mid$(var_98, CLng(var_C8), 1)) * Asc(Mid$(var_98, CLng((var_C8 - 1)), 1)))) * Val(Mid$(var_94, CLng((var_A8 * 2)), 2)))) 'Double
var_178 = (var_178 + var_1CC) 'Variant
var_A8 = var_A8 + 1
If (var_A8 >= 39) Then
'If ((var_A8 + 1) >= 39) Then
var_A8 = 0 'Variant
End If
Next var_168 'Variant
Sheet1.Cells(3, 1) = LTrim$(Str$(var_90)) & "-" & LTrim$(Str$(var_178))
End Sub