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 !

丟到程序裏面驗證一下。

這樣就分析完成了。





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