標籤:技術 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