CSAPP Lab:Bomb Lab(從拆彈到爆炸。。。

來源:互聯網
上載者:User

標籤:not   number   調用   numbers   方法   調試   輸入   dex   UNC   

 

這個實驗的要做的是用gdb逆向一段code,通過查看彙編代碼以及單步調試找出這段code需要你填入的字串,好像每個人都不一樣,所以每個人都需要找到自己的拆彈密碼,很有意思。

實驗一共有6關,我們一關關來看一下:

phase_1

開啟bomb.c看些c源碼(這裡的核心方法已經被刪除了,只能看到最外層的代碼,但能得到一些線索)。

很容易就發現這個phase_1方法是第一題的核心方法,直接逆向它,看下它的彙編。

第一句話是在為函數棧開闢空間,第二句話是關鍵,講一個立即數賦值給%esi,然後就調用strings not equal方法,推測很用可能這個寄存器中就存著我們拆彈的字串,於是打斷點,逐步執行,查看%esi的裡的內容:

沒錯,這就是我們拆彈的鑰匙了,輸入,第一個炸彈成功拆除!可以將答案放在一個文字檔中,方便之後的解題。

phase_2

 實現逆向phase_2函數觀察下

 

觀察read_six_numbers發現這次是要我們輸入6個數字,通過觀察後發現輸入的6個數字會依次3存在%rsp,%rsp+4,%rsp+8,%rsp+12...%rsp+24這些位置,那麼cmpl $0x1,(%rsp)這句話就很明顯可以得出第一個數字是1,再接下去看跳轉到52,將%rsp+4也就是第二個數字放進%rbx中,將%rbp設定成%rsp+24(可以猜到%rbp使用來判斷迴圈是否退出的寄存器),之後跳轉到27,這裡將第一個數賦值給%eax,將%eax*2去和第一個數對比,如果相等就繼續,以此類推,可以發現這個迴圈就是用來判斷輸入的數字是否依次增大一倍的,所以第二題的拆彈密碼就是:1 2 4 8 16 32

phase_3

我首先隨意輸入一個字串,調試發現%esi中的字串內容為"%d %d",由此得知此題需要我們輸入兩個數字,%eax是scanf的傳回值,如果=1則代表非法輸入,炸彈爆炸。我們輸入兩個數字,這裡跳轉就能通過了。然後發現第一個數字不能大於7,我們隨意填了個0,重新調試再試試,然後發現jmp到了57,走下去會發現%eax就是第二個數的答案,所以此題答案為0 0xcf。

其實這道題最簡單的解法就是輸入兩個數,跟著單步調試走,你很容易就能確定兩個數位內容,但是其實你再多看兩眼,就會發現其實這裡是一個switch結構,答案是不唯一的,跳轉表存在*0x402470中,我們列印出這張跳轉表,就能得知這道題的所有答案:第一個數字是index,第二個數字就是對應分支賦值給%eax的值。

 phase_4

 這道題是個遞迴,花了點時間,但是複雜度還行,只要一步步跟下來就能得出結果。

拆彈關鍵在func4函數中,發現func4返回的參數eax必須為0才能不爆炸,我們倒退進func4

發現只有當%ecx和%edi的值相等的時候才會將%eax賦值為0,而%edi就是我們的第一個參數,那麼我們只需要知道%ecx的值即可,通過推導得出ecx的值可以為7 3 0。

返回phase_4繼續走下去發現第二個數為0就能拆彈了。

 

phase_5

通過這段我們可以知道這一題是要我們輸入一串長度為6的字串。

這一段是核心代碼,跳轉至112後將%eax賦值為0後跳轉到41,然後講%rbx+%rax的值賦值給%ecx,%rbx是我們輸入內容的基地址,%rax是索引,然後做的事情其實就是將當前字元截取底4位。55行這裡有個奇怪的地址,將這個地址輸出看下得到:,那麼這裡就是以當前字元低4位的值為索引去讀取這個字串,然後得到的字元放進以$rsp+16為起始地址的記憶體地區。

解下來可以跳出迴圈看76-91行了,查看81行的字串為"flyers",%rdi就是我們迴圈得到的字串,然後調用string_not _equal方法,得知只要我們迴圈得出的字串等於“flyers”即可拆彈。

分別找到“flyers”在上述字串中的索引,然後對照ASCII碼錶,可得到本題答案,答案不唯一,只要低4位合格字元都能拆彈。

phase_6

這題在藉助Google的力量後才不太順利的完成了。。

先看第一部分

這部分沒有什麼難度,但也有一定複雜度,稍微花點時間理一下邏輯,就能發現它是要我們輸入6個數字,然後這6個數字要求互不相等,並且都不大於6。

接下來就比較困難了,沒想到是用到了鏈表,而且還涉及到資料對齊的知識。

鏈表格儲存體在0x6032d0中,鏈表得到後再進行排序,最後我們可以得到排序後的鏈表其實是單調遞減了,然後反推就能得出我們的答案啦~

 

CSAPP Lab:Bomb Lab(從拆彈到爆炸。。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.