JarvisOJ RE Classical CrackMe2 wp

Classical CrackMe2

真的是學到了很多東西....首先PEID看一下是用C#寫的,所以用dnspy進行反編譯,找到了關鍵的類:

然後點進去發現了關鍵函數,即if比較函數:

也就是text不爲空並且text2等於一個xxxx,在這裏下斷點就發現text是輸入的數據,text2就是每次給出的錯誤彈窗裏面的一串base64,當text2的值等於後面的字符串的時候,彈窗就會顯示flag。那就先來看看text2是怎麼形成的:

然後發現Rijndae1Managed就是AES加密的過程然後再base64轉化一下,key就是bytes數組,在此處下斷點,發現bytes數組的值爲‘pctf2016’*4:

然後再去看看if語句的text2應該等於什麼,在if語句處下斷點,調試看看return的值:

最後,程序的邏輯就比較清晰了,就是把用戶的輸入先AES加密然後base64編碼然後與題目中給出的base64進行比較,上腳本:


import base64


from Crypto.Cipher import AES


cipher = base64.b64decode("x/nzolo0TTIyrEISd4AP1spCzlhSWJ    XeNbY81SjPgmk=")

key = "pctf2016pctf2016pctf2016pctf2016"

aes = AES.new(key.encode('utf-8'), AES.MODE_ECB)

msg = aes.decrypt(cipher)

print(msg)

這裏就出現了一點小問題,最開始腳本寫的是

aes = AES.new(key, AES.MODE_ECB)

然後出現了錯誤......去百度搜找原因最後調試發現原因:

最開始的key是str類型,要把它變成bytes纔可以進行AES.new().....python學的真的啥也不是....

以上。

 

發佈了16 篇原創文章 · 獲贊 2 · 訪問量 3284
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章