
炸弹实验.docx
5星
- 浏览量: 0
- 大小:None
- 文件类型:DOCX
简介:
《炸弹实验》通过讲述一次危险的科学探索,展现了科研人员在追求知识与安全之间的艰难抉择。文档详细记录了这次具有争议性的试验过程及其潜在影响。
### Binary Bombs 实验知识点详解
#### 实验背景与目的
**实验课程名称**: 计算机系统基础
**实验项目名称**: Binary Bomb 实验
**实验类型**: 验证性实验
**实验目的**: 通过拆除一个名为“Binary Bombs”的程序来加深对计算机系统的理解,特别是对程序的机器级表示、汇编语言、调试器和逆向工程等方面的知识掌握。学生将学习如何使用各种工具和技术来理解和修改低级别的程序代码。
#### 实验目标与要求
**实验目标**: 针对一个名为Bomb(二进制炸弹)的Linux可执行程序,反汇编并破解其所包含的phase0至phase6共七个阶段的炸弹。每个阶段都有不同的挑战,旨在测试参与者在不同方面的技能。
**实验要求**: 参与者的目标是尽可能多地拆除炸弹,从而深入理解每个阶段所涉及的技术细节。
#### 实验原理与内容
**实验原理**: 每个炸弹阶段考察的是机器级语言程序的不同方面,并且难度逐渐增加。参与者需要根据反汇编的结果分析其机器代码所对应的助记符,然后选择合适的输入数据(拆弹密码)来逐个解除炸弹。
- **阶段0:字符串比较**
在这一阶段,参与者需要通过phase_0的反汇编代码找出需要输入的字符串。例如,通过观察可以找到字符串Linux aims toward POSIX and SUS compliance.作为程序接受的标准输入之一。
- **阶段1:浮点表示**
这一阶段的任务是通过phase_1的反汇编代码推断出需要输入的数据。例如,使用GDB调试工具可以发现程序比较eax和edx中的内容是否相等,并以此确定正确的输入值。
- **阶段2:循环**
在这一阶段,参与者需提供一个满足程序期望顺序和取值的数字序列作为输入。
- **阶段3:条件分支**
此阶段要求通过构造包含特定数字以符合switch语句逻辑的字符串来完成任务。使用GDB结合断点进行动态分析可以帮助理解程序中条件分支的工作原理,并据此确定正确的输入。
- **阶段4:递归调用和栈**
主要关注于递归调用以及栈的应用。
- **阶段5:指针**
重点在于理解和操作指针。参与者需要通过分析程序中的指针使用方式来找到合适的输入数据。
- **阶段6:链表、指针与结构体**
最后一个挑战涉及到对链表、指针和复杂数据结构的理解,并据此构造正确的输入。
**隐藏阶段**: 该阶段需附加一特定字符串才会出现。其具体要求取决于程序的设计者。
#### 实验设备与软件环境
**硬件环境**: 笔记本电脑
**软件环境**: Debian 10 32位操作系统
**虚拟机**: 可根据需要使用,以确保实验的稳定性和安全性。
#### 实验方法概述
1. **反汇编**
使用`objdump -d bomb > bomb.txt`命令对bomb.c文件进行反汇编。
2. **调试工具**
根据个人习惯选择合适的调试工具如DDD、edb-debugger或gdb等。
3. **逐步分析**
对每个阶段的反汇编结果进行细致研究,理解程序逻辑并确定正确的输入数据。
#### 实验示例
**3.1 阶段0:字符串比较**
任务描述: 通过phase_0的反汇编代码找出要输入的字符串。
- 分析代码,找到存储字符串的位置;
- 输入Linux aims toward POSIX and SUS compliance.并通过GDB进行调试确认。
**3.2 阶段1:浮点表示**
任务描述: 使用phase_1的反汇编结果推断第二阶段需要的数据输入值。
- 通过设置断点观察eax和edx寄存器内容,确定正确的输入;
- 输入数字1103320656和1895825408以成功拆除炸弹phase_1。
**3.3 阶段2:循环**
任务描述: 该阶段要求提供满足程序所期望顺序与取值的整数序列作为输入。
- 观察phase_2代码,找出push指令中的数字;
- 构造数字序列25506287118161并成功拆除炸弹。
**3.4 阶段3:条件分支**
任务描述: 输入包含特定数字以满足switch语句逻辑的字符串。
- 使用GDB动态分析程序,理解其内部条件判断;
- 根据程序中的switch结构构造合适的输入文本。
#### 总结
Binary Bombs 实验是一项综合性的学习活动,它不仅检验了参与者的编程能力,还培养了解
全部评论 (0)


