最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

CSAPP LAB之bomb,匯編、反匯編與gdb調(diào)試

2023-06-18 16:25 作者:科G棧  | 我要投稿

不得不說,此題的創(chuàng)意很好,不僅全面的考察了閱讀匯編,使用gdb調(diào)試的能力,而且還有一定的趣味性,誰不想成為一個(gè)成功的“拆彈專家”呢?

Bomb是一個(gè)二進(jìn)制炸彈,拆除他需要分別輸入六條命令,一旦輸入錯(cuò)誤就會(huì)爆炸。在bomb.c文件中可以看到有6個(gè)phase,每個(gè)phase的輸入是一條字符串,所以關(guān)鍵就是通過分析phase的內(nèi)容來判斷我們應(yīng)該輸入的字符串是什么。

理論上通過閱讀匯編代碼就可以找到答案,前3題或許可以,后邊的題目就有點(diǎn)難度了。熟練使用gdb也是這個(gè)lab很重要的一個(gè)目的。

官方提供了gdb常用命令手冊:http://csapp.cs.cmu.edu/3e/docs/gdbnotes-x86-64.pdf

下面開始“拆彈“。

首先需要將bomb二進(jìn)制文件反匯編,得到匯編代碼。下面的命令將bomb反匯編并保存在file.s中。

????objdump -d bomb> file.s

phase1:

在file.s中搜索phase_1找到第一個(gè)phase。


第348行的$0x402400就是我們要比較的字符串首地址。通過下面的命令可以獲取bomb中的所有字符串:

?????? strings -t x bomb >string.txt

-t可以顯示字符串離程序開始地址的偏移。找到2400:


我們也可以使用gdb打印出這個(gè)地址的字符串:


我們基本可以推測就是輸入這個(gè)字符串,不過保險(xiǎn)還是看看strings_not_equal函數(shù)。


至此,我們得到phase1的密碼就是我們在地址0x402400找到的那個(gè)字符串。

Phase2:


這個(gè)也不難,答案是1 2 4 8 16 32。

Phase3:


可以用gdb打印地址處的內(nèi)容,如下

也可以用objdump把整個(gè)區(qū)域的內(nèi)容打印出來


一查就知道跳哪了,所以此題有8組答案。

0 207、1 311、2 707、3 256、4 389、5 206、6 682、7 327

Phase4:


從上邊可知第二個(gè)數(shù)必為0,第一個(gè)數(shù)要看func4函數(shù),如下,這個(gè)函數(shù)有遞歸調(diào)用,還是比較繞的,粗暴的方法是用0-14試,找出返回0的輸入,非常鍛煉gdb的使用。

所以此題的答案是0 0、1 0、3 0、7 0。

想要講清楚調(diào)用邏輯比較麻煩,這里就不羅嗦了,感興趣的大家自己琢磨吧??梢杂胓db的si一步步走,用info stack查看調(diào)用棧的情況。

Phase5:

我們先看看兩個(gè)地址的字符串是什么

這里看到比較的字符串是“flyers”,我們要從上面那堆“maduiersnfotvbyl中把這幾個(gè)字符按照”flyers“的順序提取出來,可以看到索引值是9 15 14 5 6 7

但是輸入的字符串必須是6個(gè)字符,取字符低四位作為索引,所以查看ascii碼表

9可以是 )、9、I、Y、i、y;

15可以是 /、?、O、_、o;

14可以是 .、>、N、^、n、~l

5可以是 %、5、E、U、e、u;

6可以是 &、6、F、V、f、v;

7可以是 ’、7、G、W、g、w;

所以答案有很多種組合,每個(gè)數(shù)字挑一個(gè)字符就可以了,比如9?>567,這是最簡單直觀的。

Phase6:

這個(gè)還是難度很大的,代碼很長,而且各種指針,還有鏈表結(jié)構(gòu),搞得人很頭疼。第4部分的理解非常重要也最難。畫了個(gè)簡要的流程圖供大家參考,希望對理解有所幫助。

我們先來看看這個(gè)鏈表,如下:

鏈表頭是0x6032d0,0x8(0x6032d0)就是下一個(gè)成員的地址(*next指針)。理解了這里理解第4部分會(huì)容易一些。

此phase目的是讓鏈表按照其第一個(gè)成員的大小從大到小的順序排列,順序如下:

0x6032f0,鏈表第3個(gè)成員,7-3則對應(yīng)輸入4 ;??

0x603300,鏈表第4個(gè)成員,7-4則對應(yīng)輸入3; ????

0x603310,鏈表第5個(gè)成員,7-5則對應(yīng)輸入2 ; ????

0x603320,鏈表第6個(gè)成員,7-6則對應(yīng)輸入1 ; ???

0x6032d0,鏈表第1個(gè)成員,7-1則對應(yīng)輸入6 ; ???

0x6032e0,鏈表第2個(gè)成員,7-2則對應(yīng)輸入5;

所以此題的密碼是4 3 2 1 6 5。

?

這個(gè)lab就像解密游戲一樣,挺好玩的,不過個(gè)人表達(dá)能力有限,很難把代碼邏輯講的很調(diào)理,敬請諒解。最后,歡迎大家交流討論。


CSAPP LAB之bomb,匯編、反匯編與gdb調(diào)試的評論 (共 條)

分享到微博請遵守國家法律
五常市| 沙坪坝区| 象州县| 南通市| 交城县| 锦州市| 高安市| 马边| 长治市| 和林格尔县| 广昌县| 康马县| 林甸县| 江陵县| 天祝| 佛坪县| 左权县| 卓资县| 隆化县| 滁州市| 宝清县| 鄂尔多斯市| 旬阳县| 新平| 志丹县| 澄城县| 高雄市| 长葛市| 卢湾区| 遂昌县| 广丰县| 开化县| 眉山市| 荔浦县| 于都县| 高唐县| 闽清县| 武邑县| 内黄县| 嵊泗县| 丹东市|