拆解二进制炸弹
一、实验目的
1.理解C语言程序的机器级表示。
2.初步掌握GDB调试器的用法。
3.阅读C编译器生成的x86-64机器代码,理解不同控制结构生成的基本指令模式,过程的实现。
二、 实验环境
SecureCRT(10.105.222.110)
Linux
Objdump命令反汇编
GDB调试工具
。。。。。
三、实验内容
登录bupt1服务器,在home目录下可以找到Evil博士专门为你量身定制的一个bomb,当运行时,它会要求你输入一个字符串,如果正确,则进入下一关,继续要求你输入下一个字符串;否则,炸弹就会爆炸,输出一行提示信息并向计分服务器提交扣分信息。因此,本实验要求你必须通过反汇编和逆向工程对bomb执行文件进行分析,找到正确的字符串来解除这个的炸弹。
本实验通过要求使用课程所学知识拆除一个“binary bombs”来增强对程序的机器级表示、反汇编代码、调试器和逆向工程等方面原理与技能的掌握。 “binary bombs”是一个Linux可执行程序,包含了5个阶段(或关卡)。炸弹运行的每个阶段要求你输入一个特定字符串,你的输入符合程序预期的输入,该阶段的炸弹就被拆除引信;否则炸弹“爆炸”,打印输出 “BOOM!!!”。炸弹的每个阶段考察了机器级程序语言的一个不同方面,难度逐级递增。
为完成二进制炸弹拆除任务,需要使用gdb调试器和objdump来反汇编bomb文件,可以单步跟踪调试每一阶段的机器代码,也可以阅读反汇编代码,从中理解每一反汇编代码代码的行为或作用,进而设法推断拆除炸弹所需的目标字符串。实验2的具体内容见实验2说明。
四、实验步骤及实验分析
1准备过程:
1.1.通读bomb课件,明白实验大致要求
1.2.查找CSAPP书本、CSAPP课件、gdb使用说明,明白各类操作符含义
1.3.回顾上次实验,复习gdb中设置断点、查找寄存器等各项操作
2启动bomb、断点设置
2.1.登录、查找分配到的bomb(bomb265)。
2.2.解压、读取bomb265。
2.3.启动gdb,查看第一关反汇编代码,确定引爆函数explode_bomb并在其设置断点,运行。
3.第一关
3.1. 查看关卡的反汇编代码
3.2. strings_not_equal——输入为字符串;
x/s查看前一句地址内容得对应字符串“Each successive processor has been designed to be backward compatible.”
4.第二关
4.1. 查看关卡的反汇编代码
4.2. read_six_numbers——输入为六个数字;
cmpl $0x1,(%r