1、无壳,VB编写
2、VB Decompiler反编译
13个按钮事件,4个周期事件。
重点在周期事件。都是类似的代码
loc_00406068: For var_24 = 1 To Len(var_44) Step 1
loc_0040606E:
loc_00406070: If var_24 = 0 Then GoTo loc_0040619F
loc_0040608A: var_50 = CStr(Left(var_44, 4))
loc_004060DC: var_388 = Asc(Mid$(CStr(var_44), CLng(var_24), 1))
loc_0040611E: var_8C = Hex$((var_390 + var_CC))
loc_0040614B: var_34 = 0 & Hex$((var_390 + var_CC))
loc_00406194: Next var_24
loc_0040619A: GoTo loc_0040606E
loc_0040619F: 'Referenced from: 00406070
loc_004061C7: If (var_34 = "0817E747D7AFFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C") = 0 Then GoTo loc_00406215
loc_004061DA: Set var_54 = Me
loc_004061EE: Label3.Caption = "REGISTRIERT"
loc_0040620F: var_eax = %fobj
loc_00406215: 'Referenced from: 004061C7
大致意思是:
var_44 = 输入的字符
var_CC = var_44[:n]
var_388 = Asc(var_44[i])
var_34 = var_34 + str(hex(var_388 + var_CC))
var_34是要比较的字串;
if(var_34 == “0817E747D7AFFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C”)
提示已注册
被比较的字串中有R、K等不是十六进制的字符,说明是混淆项。
右击搜索Unicode。
中文搜索引擎, 条目 38
地址=004065E4
反汇编=mov dword ptr ss:[ebp-0xAC],Andréna.00402390
文本字符串=0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C
004065E4处的都是十六进制字符。最开始的0是直接加上的,除去0,每两个字符为一个字节。
VB Decompiler中定位到 Timer1 的 loc_004064C4 处
loc_004064C4: var_50 = CStr(Left(var_44, 2)) //取左边2个字符,即var_CC的值
先根据81确定前两个字符。
>>> for i in range(0x81):
if chr(0x81-i) == str(i)[0]:
print(i)
break
74
>>>
得出前两个字符为74,即var_CC = 74;
3、还原
“817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C”
>>> s = '817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C'
>>> for i in range(len(s)):
if i%2 == 1:
print(chr(int(s[i-1:i+1], 16)-74), end='')
74*3032589#**0541238#7412
正确的Serial:74*3032589#**0541238#7412
REGISTRIERT!