CS:APP bomblab記錄

任務就是把bomb這個可執行文件裏的炸彈拆掉,他有6組數據,你需要輸入6次來拆除這個炸彈。

 

簡化流程

你可以新建一個文件叫psol.txt,然後通過下面的執行命令

./bomb psol.txt

即可把psol.txt裏的數字自動輸入到bomb裏。理論上直接重定向輸入流<也是可以的吧。

 

Hint

1.學會用gdb。

2.objdump -t可以打印可執行文件的符號表。

3.objdump -d反編譯可執行文件,列出所有指令。

4.strings 顯示可打印的字符串。

 

Phase_1 

首先我們來反編譯一下看看彙編。

我們可以觀察可以到main部分有相似的函數調用。

 

這裏看到有裏那個個4個call,phase_1,phase_defused,phase_2,phase_defused。所以我們可以猜到每顆炸彈都是傳參到一個函數去處理的,我們來看我們的第一顆炸彈處理函數phase_1。

前面四句基本上是函數調用都會有的指令了,就是分配棧幀,第5句我沒理解有什麼用。。。然後再後面三句就是調用string_not_equal函數,光看名字我都知道這個就是判字符串是否不等了。。。後面是判定返回值,zf=0則調用explode_bomb,否則就返回了。。。看到這裏基本上就可以確定這題了,只要查看0x80497c0的內存是什麼我們就能知道答案了。。下面來gdb調試一下。

首先我們打斷點,然後單步執行到調用strings_not_equal前,然後把調用strings_not_equal的兩個參數打出來,一個是xxx(就是我剛纔隨便輸的一串),另一個是Public speaking is very easy.(這個就是答案).爲什麼我要把兩個都打出來呢?因爲我調用這個phase_1傳過來的參數不是我原始的輸入參數,可能main裏面做了手腳,結果打印出來是沒有的,那麼這道題就解決了。

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