
CSAPP bomblab实验:二进制炸弹解除指南

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调试工具的使用,以便更好地理解计算机系统的工作原理。通过这个实验,学生可以学习到逆向工程和反汇编的技术,提高自己的编程能力和问题解决能力。
相关推荐







Mdoose
- 粉丝: 0
最新资源
- 《深入理解Java编程思想》第三版解析
- CTerm软件:国内BBS专用上站工具
- 金融微积分:衍生品定价导论
- The Regulator:高效生成正则表达式工具
- 基于AJAX和XML实现动态树形目录构建
- DEM示例数据:傅兄提供的三个文件解析
- 自制QQ自动登陆器实现与源代码分享
- VB实现的正则表达式计算器详解
- nds存档备份工具1.2final版:功能升级与bug修复
- Java实现猜拳游戏的简易教程
- WebWork+Spring+Hibernate整合开发网络书城实践指南
- ASP.NET Web服务安全性深度解析
- 探索'捉小鸡5'综合实验源代码的神秘世界
- 软件工程文档模板系列:系统开发必备参考样式
- ASP.NET中轻松添加和使用日历控件
- Eclipse log4j插件Log4E的免费版本发布
- VB.NET初学者必备:数据库与文件处理实践
- JBuilder开发实践全面指南
- 深入学习Visual C++ 6.0与OpenGL技术
- 全面的js特效功能大全
- Oracle数据库基础教程:PPT与DOC格式
- 布朗运动在经济学中的应用分析
- Visual C++6.0编程教程:从基础到精通
- 百业通服装POS系统:高效收银与进销存管理解决方案