CSAPP bomblab实验:二进制炸弹解除指南
4星 · 超过85%的资源 需积分: 10 32 浏览量
更新于2024-09-09
收藏 216KB DOCX 举报
CSAPP bomblab实验报告
CSAPP bomblab是卡内基梅隆大学(CMU)CSAPP课程实验lab系列中的一个实验,旨在帮助学生理解汇编语言和使用gdb调试工具。实验的主要目的是让学生通过反汇编和逆向工程来确定六个字符串,从而解除炸弹。
实验原理
---------
二进制炸弹是一个目标代码文件,提供给学生们的程序,运行时,它提示用户输入六个不同的字符串。如果其中任何一个不正确,炸弹就会“爆炸”:打印出一条错误信息。学生需要通过反汇编和逆向工程来确定是哪六个字符串,从而解除它们。
实验过程
------------
### 反汇编bomb
首先,我们需要将bomb反汇编并输出到txt文件中。打开终端,用objdump –dbomb > 1.txt反汇编bomb,并将汇编代码储存到文件1.txt中。
### 分析汇编代码
通过分析汇编代码,我们可以看到它有一个main函数,phase_1到phase_6六个函数,一个secret_phase函数,表明我们要从phase_1到phase_6的代码中得到答案,除了六个关卡之外还有一个隐藏关卡。
### Phase_1
在phase_1中,我们可以看到当(strings_not_equal)返回值%eax!=0时,炸弹会炸。再向上看,有立即数$0x804a15c,这里是当做地址用。故此地址储存的字符串即为通关密码。在gdb调试中调用指令查看,得到通关密码。
### Phase_2
在phase_2中,首先注意到phase_2调用了函数(read_six_numbers)读入六个数。紧接着5条指令:
```
8048d84: 837de000 cmpl $0x0,-0x20(%ebp)
8048d88: 7506 jne 8048d90<phase_2+0x26>
8048d8a: 837de401 cmpl $0x1,-0x1c(%ebp)
8048d8e: 7405 je 8048d95<phase_2+0x2b>
8048d90: e83c030000 call 80490d1<explode_bomb>
```
是说第一个数为0,第二个数为1,否则bomb。接下来是一个循环,主要指令是add-0x8(%ebx),%eax,就是后一个数时它前两个数之和,很容易联想到斐波切纳数列。即输入斐波切纳数列前六个数即可:011235。
### Phase_3
在phase_3中,注意到代码movl $0x804a23e,0x4(%esp),用gdb查看:x/s 0x804a23e,得到"%d%d",即要输入两个数。而cmp $0x1,%eax表明输入参数必须多于1个。再往下到达cmpl $0x7,-0xc(%ebp),即输入的第一个参数值必须小于等于7。
bomblab实验旨在让学生掌握汇编语言和gdb调试工具的使用,以便更好地理解计算机系统的工作原理。通过这个实验,学生可以学习到逆向工程和反汇编的技术,提高自己的编程能力和问题解决能力。
1404 浏览量
947 浏览量
145 浏览量
133 浏览量
747 浏览量
1842 浏览量
1067 浏览量
859 浏览量
Mdoose
- 粉丝: 0
- 资源: 1
最新资源
- 超文本传输协议-HTTP/1.1
- 复旦nios教材(物有所值)
- C8051F330串口实例程序
- 吉林大学2002级C++面向对象程序设计试题答案
- c8051f33x开发工具包用户指南
- tcl中文教程---最好的Tcl脚本语言的中文教程,值得下载
- 正则表达式基本介绍和应用
- db2 730 认证资料
- IBM-PC汇编语言程序设计
- NiosII_SOPCBuilder_Labs_Ver4_011005.
- SAP配置大全(MM部分).pdf
- installshield使用指南
- 带有消息机制的线程 - CustomMessageQueue
- 基于端口的VLAN配置命令
- DIFFERENTIAL GEOMETRY: A First Course in Curves and Surfaces
- SQL Server 2000模拟试题