CSAPP第二個實驗bomblab

來源:互聯網
上載者:User

標籤:技術   3.4   tps   tin   工業   pac   strong   鏈表   new   

 

檔案和完整的word見github3.1 階段1的破解與分析

密碼如下:I am not part of the problem. I am a Republican.

        破解過程:

1.首先讀主函數的彙編代碼

發現這裡是用了以一個函數<phase_1>(後面每一個炸彈都是對應的一個函數,在主函數中調用的表現形式一致,後面就不贅述了)

然後找到地址0x400e8d對應的函數<phase_1>

 

發現這裡裡面是把將立即數0x402470複製到%esi,然後調用一個<判斷字串是否相等的函數>,那麼我們可以推理出,判斷字串是否相等這個函數,那麼這個字串其實就放在0x402470裡面,如此在GDB中使用x /s 0x402400查看0x402470記憶體單元中字串的內容就可以找到密碼了。

 

 

3.2 階段2的破解與分析

密碼如下:0 1 3 6 10 15

破解過程:

 

首先根據函數的名字<read_six_numbers>可以判斷這是讀入6個值,而且儲存至從%rsi開始的地址。下面開始第一步就是判斷第一個數和0是否相等,那麼由此判斷,第一個數是0.

 

後面我們可以看見這裡面設定了一個迴圈變數儲存在%ebx裡面,每迴圈一次加1操作,然後當等於6的時候跳出迴圈,而且每次迴圈的時候會把%ebd裡面的值放如%eax,然後每次迴圈的時候進行累加,即每次都加上這個迴圈變數,那麼第一個數是0,第二個是0+1 = 1,第三個是 1+2 = 3,第四個是3 +3 = 6 ,第五個是 6+4 = 10 ,第六個是 10 +5 = 15

    3.3 階段3的破解與分析

密碼如下: 0  l 941

破解過程:

 

首先可以看到程式是要讀入三個數,分別存0x14(%rsp),0xf(%rsp),0x10(%rsp)裡面。根據壓棧的順序,我們知道第一個數存在0x10(%rsp),第二個數是0xf(%rsp),第三個數是0x14(%rsp)。

 

 

%eax是讀入資料的傳回值即讀入資料的個數,如果大於二跳轉執行後面,否則進入下一條語句炸彈爆炸。

 

然後第一步就是將第一個數和7比較,如果大於7的話炸彈爆炸,

這裡我們知道程式是使用了switch語句,利用跳轉表跳到0x4024e0+ %rax * 8的位置,gdb地址使用p/x*(0x4024e0)命令查看當%rax的值為0時跳轉地址。

 

 

 

這樣我們就知道第一個資料輸入為0 時程式跳轉到位置(同樣的道理可以找到為1-7的地址)。

 

然後我們知道迴圈裡面是吧立即數6c存到了%eax裡面,然後將第三個數和0x3ad進行比較,不相等則炸彈爆炸。那麼我們就得出了輸入的第三個數是0x3ad = 941

在讀這個switch語句的時候,我們可以發現,所有的第三個數正確之後都會跳轉到同一個地址0x401059執行下一步

這裡%al是%eax最後一個位元組,我們由是知道這是比較字元相等,此時裡面是0x6c,我們查ASCII表得知,它對應的字元是小寫字母l,得到第二個答案。

 

 3.4 階段4的破解與分析

        密碼如下: 6  6

破解過程:

 

首先我們知道,程式是要輸入兩個資料,

 

 

第一個資料的要求是小於14的

可以看到以上四條語句分別是:調用func4構造參數c,參數值為0xe;為調用func4構造參數b,參數值為0x0;為調用func4構造參數a,參數值為輸入第一個參數值;執行func4

 

後面我們知道是用func4的傳回值和6進行比較,若是等於6,繼續執行,否則炸彈爆炸。下一步就是把第二個數和6比較,等於6跳轉。由此我們知道第二個數是6,至於第一個數,我們還需要看fun4函數

 

 

 

 

 

 

 

 

 

  

我們知道這是一個遞迴調用的函數,寫成C語言如下:

 

我們需要檢查0-14所有滿足傳回值為6的答案

由此知道,第一個數為6

 

 

 

 

 

       3.5 階段5的破解與分析

密碼如下:5 115

破解過程:

 

     首先我們知道輸入的數至少有2個

 

 

然後我們輸入的一個參數的二進位後四位不能為1111(15),也可以相稱第一參數的值要小於15。

 

後面我們知道這是是一個迴圈,寄存器edx初值定為0,每次迴圈加1,根據後面cmp 0xf, %edx 可以得出,迴圈必須執行15次;同時ecx寄存器不斷的累加數,每次把一個數的值存到eax寄存器中 並且作為下次取值的索引。

而最後我們最終ecx寄存器的累加值要和我們的第二個參數相同,不然炸彈則爆炸。

那麼我們來看看如何迴圈:首先看參與迴圈的數組,即首地址0x402520數組裡面的值

 

我們可以得到如下的一個表格:

 

index

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

value

10

2

14

7

8

12

15

11

0

4

1

13

3

9

6

 

迴圈必須迴圈15次,同時迴圈終止的條件是eax寄存器的值為15.

按照之前分析的:

index為6時對應元素為15,最後一次加了15,那麼上一次就加了6,依此類推加15次的結果為: 15+6+14+2+1+10+0+8+4+9+13+11+7+3+12 =115. 第一次的數是12,其index為5.那麼由此答案就是5 115

 

 3.6 階段6的破解與分析

密碼如下:2 4 3 6 5 1

破解過程:

 

        首先我們知道這是讀入六個資料,然後建立鏈表

       這裡就是所有數減去一後小於等於5,那麼就是所有數在1-6之間。

現在我們要對錶示地址的立即數敏感,我們推斷,資料地址的首地址是0x6032f0

用gdb查看得知正是1-6六個數

 

將 %rax 指向 %rbx 下一個鏈表節點, 比較鏈表節點中第一個欄位值的大小,如果前一個節點值小於後一個節點值,跳轉。又此我們知道資料是根據每個節點中的第一個數升序排列。那我們可以得知,順序是 2 4 3 6 5 1

 

 

 

 

為完成本次實驗你翻閱的書籍與網站等

[1]  林來興. 空間控制技術[M]. 北京:中國宇航出版社,1992:25-42.

[2]  辛希孟. 資訊技術與資訊服務國際研討會論文集:A集[C]. 北京:中國科學出版社,1999.

[3]  趙耀東. 新時代的工業工程師[M/OL]. 台北:天下文化出版社,1998 [1998-09-26]. http://www.ie.nthu.edu.tw/info/ie.newie.htm(Big5).

[4]  諶穎. 空間交會控制理論與方法研究[D]. 哈爾濱:哈爾濱工業大學,1992:8-13.

[5]  KANAMORI H. Shaking Without Quaking[J]. Science,1998,279(5359):2063-2064.

[6]  CHRISTINE M. Plant Physiology: Plant Biology in the Genome Era[J/OL]. Science,1998,281:331-332[1998-09-23]. http://www.sciencemag.org/cgi/ collection/anatmorp.

[7]https://gitee.com/zhoulee/CSAPP/blob/master/bomb/phase_6.txt

[8]http://xinqiu.me/2016/02/10/csapp-lab2-bomb/

[9]http://www.jianshu.com/p/a3e13a4d8479

[10]http://www.cnblogs.com/remlostime/archive/2011/05/21/2052708.html

CSAPP第二個實驗bomblab

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.