CSAPP bomblab实验:二进制炸弹解除指南
4星 · 超过85%的资源 需积分: 10 71 浏览量
更新于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调试工具的使用,以便更好地理解计算机系统的工作原理。通过这个实验,学生可以学习到逆向工程和反汇编的技术,提高自己的编程能力和问题解决能力。
2013-04-22 上传
2012-09-21 上传
119 浏览量
2023-11-15 上传
2017-10-22 上传
2022-07-10 上传
2024-05-26 上传
Mdoose
- 粉丝: 0
- 资源: 1
最新资源
- Raspberry Pi OpenCL驱动程序安装与QEMU仿真指南
- Apache RocketMQ Go客户端:全面支持与消息处理功能
- WStage平台:无线传感器网络阶段数据交互技术
- 基于Java SpringBoot和微信小程序的ssm智能仓储系统开发
- CorrectMe项目:自动更正与建议API的开发与应用
- IdeaBiz请求处理程序JAVA:自动化API调用与令牌管理
- 墨西哥面包店研讨会:介绍关键业绩指标(KPI)与评估标准
- 2014年Android音乐播放器源码学习分享
- CleverRecyclerView扩展库:滑动效果与特性增强
- 利用Python和SURF特征识别斑点猫图像
- Wurpr开源PHP MySQL包装器:安全易用且高效
- Scratch少儿编程:Kanon妹系闹钟音效素材包
- 食品分享社交应用的开发教程与功能介绍
- Cookies by lfj.io: 浏览数据智能管理与同步工具
- 掌握SSH框架与SpringMVC Hibernate集成教程
- C语言实现FFT算法及互相关性能优化指南