crackme练习上双!!!
其实Andrénalin这一系列还是比较有代表性的,这次做的虽然标明是difficult难度但其实做下来感觉还好,下面开始分析咯
0X00 首先还是打开程序进行简单查看,并初步分析。
打开界面是这样的,随便输入一些东西弹窗。
那么这是一个单一注册码的验证程序,想想大概可能和第一个情况很像,直接验证key是否为验证码。然后判断是否验证成功
但是,defficult的难度大概提醒了我们这种情况可能性比较小。那么还是开始分析吧
0X01 按照我们之前的思路大概还是拖到OD当中进行分析,然后找到关键位置绕过爆破。
但是前两天围观大佬发现一个神奇的程序VB Decompiler
拖到VB Decompiler中进行反编译
就可以看到反编译之后的VB代码。那么我们逐行开始分析,这是我做的一些批注
Private Sub Command1_Click() '401E20
loc_00401EC2: var_58 = Text1.Text ;var_58=name
loc_00401EFA: var_44 = var_58 ;var_44=name
loc_00401F56: For var_24 = 1 To Len(var_44) Step 1 ;var_24=1->len(name)
loc_00401F68:
loc_00401F6A: If var_104 = 0 Then GoTo loc_0040202B
loc_00401FA3: var_58 = CStr(Mid(var_44, CLng(var_24), 1)) ;取出name中每一个字符
loc_00401FB0: Asc(var_58) = Asc(var_58) + 000Ah ;将字符的ASCII码+0X0A
loc_00401FC4: var_84 = Chr$(Asc(var_58))
loc_00401FED: var_34 = var_34 & Chr$(Asc(var_58)) ;存到新的字符串当中
loc_00402020: Next var_24
loc_00402026: GoTo loc_00401F68
loc_0040202B: 'Referenced from: 00401F6A
loc_00402053: If (var_34 = "kXy^rO|*yXo*m\kMuOn*+") = 0 Then GoTo loc_00402119 ;比较和指定字符串是否相同
loc_00402059: Beep
loc_00402090: var_B4 = "RiCHTiG !" ;回答正确!!
loc_004020AF: var_A4 = " RiCHTiG !!!! .... weiter mit dem N?chsten !!!"
loc_004020FC: var_54 = MsgBox(" RiCHTiG !!!! .... weiter mit dem N?chsten !!!", 48, "RiCHTiG !", 10, 10)
loc_00402114: GoTo loc_004021CE
loc_00402119: 'Referenced from: 00402053
loc_0040214A: var_B4 = "LEiDER Falsch ! " ;回答错误!!
loc_00402169: var_A4 = "Leider Falsch! Nochmal veruschen ! Wenn Du es nicht schaffen solltest, schreib mir ! Andrenalin@gmx.net"
loc_004021B6: var_54 = MsgBox("Leider Falsch! Nochmal veruschen ! Wenn Du es nicht schaffen solltest, schreib mir ! Andrenalin@gmx.net", 16, "LEiDER Falsch ! ", 10, 10)
loc_004021CE: 'Referenced from: 00402114
loc_004021E1: GoTo loc_00402217
loc_00402216: Exit Sub
loc_00402217: 'Referenced from: 004021E1
loc_00402248: GoTo loc_00esi
End Sub
嗯,这样分析整个算法逻辑就很简单了,根据以上写出注册机。
#coding = utf-8
str='kXy^rO|*yXo*m\kMuOn*+'
key=''
for ch in str:
key+=chr(ord(ch)-0XA)
print key
算出key为:aNoThEr oNe cRaCkEd !
丢到程序里面验证一下。
这样就分析完成了。