### CSAPP Lab2 实验指导说明
#### 一、实验背景与目的
在本次实验(CSAPP Lab2)中,学生们将面临一个充满挑战的任务:拆解并解除一系列所谓的“二进制炸弹”。这些炸弹是一种特殊的程序,由一系列阶段组成。每个阶段都需要用户通过标准输入(stdin)输入特定的字符串来解除。如果输入正确,则该阶段被成功解除,并且炸弹会进入下一个阶段;反之,炸弹将会爆炸,输出 "BOOM!!!" 并终止运行。只有当所有阶段都被成功解除后,整个炸弹才算被彻底解除。
#### 二、实验环境与要求
本实验为每位参与者提供了一个独特的炸弹,需要在指定的截止日期前完成拆除。为了确保实验的成功,必须遵循以下几点:
- **实验平台**:炸弹是专门为64位机器设计的,因此建议在实验室的Linux机器或64位的CSE Linux虚拟机上进行实验,并确保解决方案在attu服务器上也能正常工作。
- **兼容性问题**:据传,邪恶博士已经确保炸弹在非指定环境下无法正常运行,因此务必确保所有的测试和验证都在官方推荐的环境中进行。
#### 三、实验流程与步骤
1. **获取炸弹文件**:通过执行以下命令获取炸弹文件:
```
wget https://courses.cs.washington.edu/courses/cse351/14sp/labs/lab2/<username>/lab2-bomb.tar
tar xvf lab2-bomb.tar
```
其中,`<username>` 需要替换为参与者的UWNetID。上述命令将会创建一个名为 `bomb$NUM` 的目录(其中 `$NUM` 是炸弹的唯一标识符),该目录包含以下文件:
- `bomb`:可执行的二进制炸弹程序。
- `bomb.c`:包含炸弹主函数的源代码文件。
- `defuser.txt`:用于记录解决方案的文本文件。
2. **炸弹分析与解除策略**:
- 使用各种工具对二进制文件进行逆向工程,例如使用 `objdump` 或 `IDA Pro` 等工具来反汇编程序。
- 分析每个阶段的代码逻辑,理解其工作原理及如何通过正确的输入来解除它。
- 将每一步的解决方案记录在 `defuser.txt` 文件中。
3. **提交作业**:完成炸弹解除后,将解决方案文件 `defuser.txt` 提交至指定地址。
#### 四、实验中的挑战与注意事项
- **安全性考虑**:实验中的炸弹含有多种防篡改机制,因此不能直接修改二进制文件或源代码来达到解除的目的。
- **时间管理**:虽然任务艰巨,但必须在截止日期前完成。合理安排时间,尽早开始实验以应对可能出现的问题。
- **资源利用**:充分利用实验室提供的资源和支持,如查阅相关文献、寻求助教的帮助等。
#### 五、实验总结
通过本次实验,参与者不仅能深入了解二进制程序的工作原理,还能掌握基本的逆向工程技术,这对于未来在网络安全、软件开发等领域的工作都将大有裨益。同时,这也是一个锻炼解决问题能力和团队协作能力的好机会。希望每位参与者都能在这次有趣的挑战中学到更多有用的知识。