前言
不知不觉,又鸽了这么久,不知道我什么时候才能做完,成为大佬…遥遥无期
这个题和14题是一样的啊,写14题的时候有点饿,偷了个懒,没写注册机,只暴力破了一下,今天来写注册机…
正文
直接用VBdecompiler打开,可以看到伪代码,我选取checkit按钮关联的代码
Private Sub Command1_Click() '403620
Dim var_2C As TextBox
loc_004036BB: var_1C = Text1.Text
loc_004036E8: setnz cl
loc_004036FB: var_eax = %fobj
loc_00403704: If ecx <> 0 Then GoTo loc_00403A24
loc_00403727: var_1C = Text1.Text
loc_0040375A: var_EC = Len(var_1C)
loc_00403770: var_eax = %fobj
# 循环开始
loc_0040377C:
loc_00403787: If var_18 > 0 Then GoTo loc_00403AA4
loc_0040379B: Set var_2C = %fobj
loc_004037AA: var_1C = Text1.Text
loc_004037E5: var_24 = Text1.Text
loc_00403831: var_28 = Mid$(var_24, vbNull, 1) #Mid函数,用于截取指定数量的字符串
loc_00403848: setg bl
loc_00403859: var_20 = Mid$(var_1C, vbNull, 1)
loc_00403868: setl dl
loc_004038AD: If var_2C <> 0 Then GoTo loc_00403A22
loc_004038D3: var_1C = Text1.Text
loc_00403909: var_58 = var_18 xor 0002h
loc_0040391B: var_28 = Str$()
loc_0040393F: var_20 = Mid$(var_1C, vbNull, 1)
loc_0040394B: var_48 = Asc(var_20)
loc_0040395E: var_24 = Str$(Asc(var_20)) # str函数,将数字化为字符串形式
loc_00403997: var_68 = var_28
loc_004039A5: var_80 = Right(var_28, 1)
loc_004039DC: var_eax = %fobj
loc_00403A04: If ((var_24 - 48#) <> var_80) <> 0 Then GoTo loc_00403A22
loc_00403A0E: 00000001h = 00000001h + var_18
loc_00403A1D: GoTo loc_0040377C
#循环结束
loc_00403A22: 'Referenced from: 004038AD
loc_00403A24: 'Referenced from: 00403704
loc_00403A8C: MsgBox("Sorry, try again!", 0, "Wrong serial!", var_60, var_70)
loc_00403AA2: GoTo loc_00403B22
loc_00403AA4: 'Referenced from: 00403787
loc_00403B0C: MsgBox("Good job, tell me how you do that!", 0, "Correct serial!", var_60, var_70)
loc_00403B22: 'Referenced from: 00403AA2
loc_00403B36: GoTo loc_00403B87
loc_00403B86: Exit Sub
loc_00403B87: 'Referenced from: 00403B36
loc_00403B87: Exit Sub
End Sub
主要困扰我的是几个API函数的功能,我特意去微软查了一下,这才搞清楚,
下面是python写的注册机
serial=''
for i in range(1,10):
i=i^2
serial=serial+str(i)[-1]
print(serial)