溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Bugku_逆向_Love

發(fā)布時(shí)間:2020-06-29 12:33:19 來(lái)源:網(wǎng)絡(luò) 閱讀:999 作者:Trut104 欄目:安全技術(shù)

https://ctf.bugku.com/challenges#love

下載文件后運(yùn)行一下看看
Bugku_逆向_Love
隨便輸入個(gè)123看看
Bugku_逆向_Love
解題思路:
很常見的程序流程,就是輸入字符串與程序里的字符串對(duì)比,來(lái)輸出結(jié)果,這時(shí)候我們有兩種選擇。
1.寫個(gè)腳本來(lái)爆破。這是沒(méi)有辦法的辦法,效率極低且不可靠,在某些情況下是唯一的辦法,但在這道題沒(méi)有必要,所以舍棄。
2.使用軟件來(lái)調(diào)試程序代碼,或直接反編譯程序獲得源碼,在這里我用OllyDbg來(lái)調(diào)試程序。
解題流程:
拿到文件先來(lái)查殼
Bugku_逆向_Love
無(wú)殼,就是普通的c++編譯的文件,使用OllyDbg打開文件
Bugku_逆向_Love

沒(méi)有什么頭緒,右鍵選擇 中文搜索引擎->3.智能搜索
Bugku_逆向_Love
其中有幾條很眼熟
Bugku_逆向_Love

這不就是我們輸入字符串后提示的字符串嗎,點(diǎn)進(jìn)去看看

Bugku_逆向_Love
可以看到1035840處有一個(gè)跳轉(zhuǎn),根據(jù)1035842壓棧的字符串來(lái)推斷,1035847調(diào)用的函數(shù)是類似于printf的函數(shù),也就是說(shuō)1035840處的跳轉(zhuǎn)決定了輸出的是”wrong flag”還是”right flag”,我們繼續(xù)向上看,尋找是什么控制關(guān)鍵跳轉(zhuǎn)的執(zhí)行。很明顯,在103582e處調(diào)用了strncmp函數(shù),而在其上,壓入了一個(gè)奇怪的字符串進(jìn)棧,根據(jù)開頭猜的程序功能,要么,這就是程序想要我們輸入的字符串。要么,是把我們輸入的字符串加密后對(duì)比的字符串。而strncmp的結(jié)果就決定了關(guān)鍵跳轉(zhuǎn)的執(zhí)行與否。我們?cè)趕trncmp處下一個(gè)斷點(diǎn),運(yùn)行程序,輸入1234567890。
Bugku_逆向_Love
對(duì)比棧里的數(shù)據(jù)可以得出,ecx中存儲(chǔ)的是我們輸入的字符串加密后的字符串,eax中存儲(chǔ)著要對(duì)比多少個(gè)字符,那我們繼續(xù)向上翻,找找是什么把我們輸入的字符串(即ecx)加密。
Bugku_逆向_Love
在其上不遠(yuǎn),我們就發(fā)現(xiàn)了一段很可疑的代碼,我們?cè)?0357d0處下一個(gè)斷點(diǎn),重新運(yùn)行程序,再次輸入1234567890
Bugku_逆向_Love

運(yùn)行到斷點(diǎn)后,查看ebp-0xac附近的內(nèi)存空間,發(fā)現(xiàn)了一段base64代碼
Bugku_逆向_Love

也就是我們輸入的字符串

分析這段加密代碼
Bugku_逆向_Love

然后通過(guò)這段匯編代碼和被對(duì)比字符串 “e3nifIH9b_C@n@dH” 來(lái)構(gòu)造python腳本
Bugku_逆向_Love
得到flag
Bugku_逆向_Love
End

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI