BUUCTF crackMe
太菜了 做了好久沒做出來,參考其他師傅的解答總結一下
題目背景:
老規矩,Ex PE打開,32位無殼程序,用IDApro打開;主程序如下:
?主體是一個while循環,如果我們想讓while結束,我們就需要使得兩個if成立;
我們首先看跟v3有關的loc_4011A0,點進去,發現無法反編譯,解決辦法IDA無法反編譯
編譯成功之后:
?發現v3的值一直為1;
我們來看看sub_401830函數,主要由兩個while構成,我們先來看第一個while
主要是把輸入的轉換成數字并且按照每兩位分成一組,也就是輸入a21c32ba,最后分為0xa2,0x1c,0x32,0xba,接下來看第二個while循環;
?
我們開始從后向前看, 最后需要輸出v13==0xAB94,我們先點擊進入sub_401470函數查看,
一堆的if判斷,把判斷條件轉換為字符查看,這些字符就是大概他想要得到的字符,不是的話就執行錯誤的操作,最后進行驗證,需要注意是這里
我們可以嘗試運算一遍,應該是s,最后得到 a2的值為dbappsec?。最后我們就要求的是a數組的值了(源程序是byte_416050數組,被我改了)
怎么求呢?IDA調試,有反調試沒成功,試試OD,
?先在ida中找到xor異或,查看他的地址(建議先圖裝查看,找起來方便,再查看地址)
我們現在就要看ecx的值了(XOR destination, source為什么不是eax,怪我匯編沒學好,就是xor異或和實際異或的順序相反的,我是這么記憶的)在**1B3E處下一個硬件斷點,然后輸入用戶名,隨便輸入一個密碼,循環8次記錄下ecx的值。
0x2a, 0xd7, 0x92, 0xe9, 0x53, 0xe2, 0xc4, 0xcd
最后就是寫腳本解密了。
str="dbappsec" flag="" a=[0x2a, 0xd7, 0x92, 0xe9, 0x53, 0xe2, 0xc4, 0xcd] for i in range(8):flag+=hex(a[i]^ord(str[i])) print(flag.replace('0x',''),end='')最后輸出為4eb5f3992391a1ae,md5加密之后的答案為
flag{d2be2981b84f2a905669995873d6a36c}
總結
以上是生活随笔為你收集整理的BUUCTF crackMe的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDA无法反编译 and 提示错误
- 下一篇: BUUCTF firmware