计算机系统基础的实验作业,使用课程知识拆除一个“Binary Bombs”来增强对程序的机器级表示、汇编语言、调试器和逆向工程等理解,从一个叫做Bomb(二进制炸弹,简称炸弹)的Linux可执行程序中经过反汇编发现并破解其所包含的phase0~phase6共7个阶段的炸弹。文件为我的作业,内容有些乱,因为本人临时弄得,很懒那种。 ### 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:循环** 在这一阶段,需要输入一个满足程序期望顺序和取值的数字序列。例如,可以通过GDB动态分析,观察输入数字序列的变化以及它们是如何与程序内部的逻辑相互作用的,最终确定正确的输入。 - **阶段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的反汇编代码推断第二阶段要输入的数据。 - 使用GDB设置断点,观察eax和edx寄存器中的内容,确定正确的输入值。 - 输入数字1103320656和1895825408,成功拆除炸弹phase_1。 **3.3 阶段2:循环** 任务描述:该阶段要求输入满足程序所期望顺序和取值的一个数字序列。 - 观察phase_2的反汇编代码,找到push指令中的数字。 - 构造数字序列25506287118161,成功拆除该阶段的炸弹。 **3.4 阶段3:条件/分支** 任务描述:该阶段要求输入包含特定数字以满足switch条件分支处理的字符串。 - 使用GDB动态分析程序,理解switch语句的逻辑。 - 根据程序内部的条件分支逻辑构造合适的输入字符串。 #### 总结 Binary Bombs 实验是一项综合性很强的学习活动,它不仅考验了参与者的编程能力,更重要的是培养了他们解决复杂问题的能力。通过这项实验,参与者能够深入理解计算机系统的基础知识,包括程序的机器级表示、汇编语言、调试技术和逆向工程等内容。这对于计算机科学和信息技术领域的学生来说是一次非常宝贵的学习经历。
剩余22页未读,继续阅读
- 粉丝: 304
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助