160个crackme之010

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 !  [email protected]"
  loc_004021B6: var_54 = MsgBox("Leider Falsch!   Nochmal veruschen ! Wenn Du es nicht schaffen solltest, schreib mir !  [email protected]", 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 !

丢到程序里面验证一下。

这样就分析完成了。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章