寫在前面:
本文章沒有拆彈教程,只有拆彈准備工作教程!
Welcome to my fiendish little bomb. You have 6 phases with which to blow yourself up. Have a nice day!
一、下載文件
登陸http://autolab.pku.edu.cn,下載writeup和你的專屬bomb

下載bomb:從Download handout和Download your bomb中選擇一個下載即可;如果重復下載,可以發現每次下載的文件bombX.tar后綴數字串X都不一樣,因為每個bomb都不一樣,只要選擇一個bomb並一直work on it就好了,請刪除其余的所有bomb.
tips: 1.請先仔細閱讀writeup
2.不要輕易嘗試運行bomb,錯了會扣分啊喂
二、登陸服務器
(一)首次登陸
終端輸入:ssh s1800017827@162.105.31.232 -p 19373,回車
s1800017827是我的用戶名(username),19373是我的端口號(port),請按照助教所發表格填寫自己的對應信息;162.105.31.232可能每屆不一樣(?)

收到“Are you sure you want to continue connecting (yes/no)?”
輸入了yes並回車,於是繼續了
![]()
輸入初始密碼,默認初始密碼為學號(看不到輸入,直接敲一連串進去然后回車)

第一次登陸服務器會要求修改密碼,輸入一次初始密碼,輸入兩次新密碼(同樣看不到輸入,直接敲一連串進去然后回車),便可修改完成。

完成后自動退出服務器登錄。
(二)再次登陸
終端輸入:ssh s1800017827@162.105.31.232 -p 19373,回車;輸入修改后的密碼,即可。

登陸成功后,主機名(綠色的那串,比如我的就是“mariana-tan@ubuntu”)會更改成服務器上的主機名
![]()
但是這時我們的服務器上是空的,如果輸入ls並回車(查看當前文件夾下的所有文件),什么輸出都沒有。於是我們需要退出服務器登陸,並從本地的終端上傳文件到服務器。
(三)退出登陸
終端輸入exit或logout可以直接退出服務器,回到本地的終端。


三、上傳bomb到服務器
輸入ls查看當前目錄下的所有文件,什么輸出都沒有,說明當前目錄為空

退出服務器,回到本地的終端

進入存放bombX.tar(X為一個整數,每個人的數字都是不一樣的)壓縮文件的文件夾(如果不知道路徑,可以去files里康康,files就是左側邊欄這個文件夾一樣的圖標)

我的存放路徑是Desktop/bomb621.tar,用命令cd進入Desktop;為了便於展示,我用ls命令輸出了Desktop/路徑下的所有文件/文件夾,可以看到Desktop/中存放有文件bomb621.tar、bomblab.pdf和文件夾bomb621、LAB.
tips:可以輸入文件/文件夾的前幾個字符,然后敲tab鍵自動補全文件/文件夾名

輸入:scp -P 19373 bomb621.tar s1800017827@162.105.31.232:~/並回車
(還是一樣,端口號19373、文件名bomb621.tar、用戶名s1800017827這幾個信息要替換成自己的對應信息)

瞬間,就會顯示上傳完畢。
再次登陸服務器,輸入ls,就能看到上傳上去的文件了

解壓bombX.tar,輸入tar xvf bomb621.tar並回車,解壓完成,解壓后文件存放於相同目錄下創建的和壓縮包同名的文件夾中,如下:

四、愉快拆彈
進入解壓縮的bombX文件夾,輸入./bomb就可以運行bomb了,輸入ctrl c可以終止bomb程序

拆彈指導見公眾號文章《如何優雅地拆彈》:https://mp.weixin.qq.com/s/glcorCvgv48w-2em3KbCyA
(一)常用Linux指令
copy自公眾號文章《你需要了解的服務器一二事》:https://mp.weixin.qq.com/s/0T5Xay_O33n9iX647ba1Iw
pwd:查看當前目錄。
ls:列出當前文件夾下的文件。
ll:列出當前文件夾下文件的詳細信息。
cd 文件夾路徑:進入指定文件夾下。
mkdir 文件夾名:建立文件夾。
cp 源文件名 新文件名:復制文件。
mv 文件名 文件夾名/:移動文件。
rm 文件名:刪除文件。
(與文件夾有關操作加上 -r 指令)
./文件名:運行文件。
tar xvf XXXX.tar:解壓tar文件。
gcc 源代碼 (文件名):gcc編譯。
objdump -d 可執行文件名:反匯編可執行文件。
objdump -d 可執行文件名 > 文件名.txt:反匯編可執行文件並保存到txt。
(二)常用GDB指令
見The CS:APP textbook Web page at:http://csapp.cs.cmu.edu/3e/students.html
gdb 可執行文件名:進入gdb開始debug
r:運行可執行文件//r = run
r 指令1 指令2...:以指令1、指令2、...作為輸入,運行可執行文件
r 文本文件名.txt:以文本文件名.txt中的文本作為輸入,運行可執行文件,讀到EOF后,可以在終端繼續進行輸入
b 函數名:在函數首地址處設置斷點//b = breakpoint
b *指令地址:在給定地址處設置斷點,地址格式形如0x5555555555e63
clear 函數名:刪除函數首地址處的斷點
clear *指令地址:刪除給定地址處的斷點
delete 函數名:刪除函數首地址處的斷點
delete *指令地址:刪除給定地址處的斷點
disable 斷點序號:令該斷點暫時失效
enable 斷點序號:令失效斷點恢復
i b:顯示當前斷點信息//i b = info breakpoint
disas: 反匯編當前函數//disas = disassemble
si:從斷點處逐句執行
k:從斷點中退出程序//k = kill
c:從斷點處繼續執行程序//c = continue
i reg:查看當前斷點的所有寄存器值//i reg = info register
x/s 內存地址:以字符串形式輸出給定地址存放的值//s = string
x/nwd 內存地址:n應當以數字替換,以有n個元素的數組的形式輸出給定地址存放的值
