您好,登錄后才能下訂單哦!
https://ctf.bugku.com/challenges#love
下載文件后運行一下看看
隨便輸入個123看看
解題思路:
很常見的程序流程,就是輸入字符串與程序里的字符串對比,來輸出結果,這時候我們有兩種選擇。
1.寫個腳本來爆破。這是沒有辦法的辦法,效率極低且不可靠,在某些情況下是唯一的辦法,但在這道題沒有必要,所以舍棄。
2.使用軟件來調試程序代碼,或直接反編譯程序獲得源碼,在這里我用OllyDbg來調試程序。
解題流程:
拿到文件先來查殼
無殼,就是普通的c++編譯的文件,使用OllyDbg打開文件
沒有什么頭緒,右鍵選擇 中文搜索引擎->3.智能搜索
其中有幾條很眼熟
這不就是我們輸入字符串后提示的字符串嗎,點進去看看
可以看到1035840處有一個跳轉,根據1035842壓棧的字符串來推斷,1035847調用的函數是類似于printf的函數,也就是說1035840處的跳轉決定了輸出的是”wrong flag”還是”right flag”,我們繼續向上看,尋找是什么控制關鍵跳轉的執行。很明顯,在103582e處調用了strncmp函數,而在其上,壓入了一個奇怪的字符串進棧,根據開頭猜的程序功能,要么,這就是程序想要我們輸入的字符串。要么,是把我們輸入的字符串加密后對比的字符串。而strncmp的結果就決定了關鍵跳轉的執行與否。我們在strncmp處下一個斷點,運行程序,輸入1234567890。
對比棧里的數據可以得出,ecx中存儲的是我們輸入的字符串加密后的字符串,eax中存儲著要對比多少個字符,那我們繼續向上翻,找找是什么把我們輸入的字符串(即ecx)加密。
在其上不遠,我們就發現了一段很可疑的代碼,我們在10357d0處下一個斷點,重新運行程序,再次輸入1234567890
運行到斷點后,查看ebp-0xac附近的內存空間,發現了一段base64代碼
也就是我們輸入的字符串
分析這段加密代碼
然后通過這段匯編代碼和被對比字符串 “e3nifIH9b_C@n@dH” 來構造python腳本
得到flag
End
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。