写在前面:
本文章没有拆弹教程,只有拆弹准备工作教程!
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个元素的数组的形式输出给定地址存放的值