Bootstrap

二进制拆弹实验详解linux,拆解二进制炸弹

拆解二进制炸弹

一、实验目的

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

;