深入理解计算机——拆解二进制炸弹

这篇博客详细介绍了如何通过理解C语言的机器级表示和使用GDB调试器,逐步拆解一个包含五个阶段的二进制炸弹。在每个阶段,作者分析了源代码,使用gdb的disas命令反汇编代码,以找出正确输入字符串。通过实验,作者掌握了调试技巧、汇编语言和逆向工程原理。
摘要由CSDN通过智能技术生成

一、实验目的

1.理解C语言程序的机器级表示。
2.初步掌握GDB调试器的用法。
3.阅读C编译器生成的x86-64机器代码,理解不同控制结构生成的基本指令模式,过程的实现。

二、 实验环境

  1. SecureCRT(10.105.222.110)
  2. Linux
  3. Objdump命令反汇编
  4. GDB调试工具

三、实验内容

登录bupt1服务器,在home目录下可以找到Evil博士专门为你量身定制的一个bomb,当运行时,它会要求你输入一个字符串,如果正确,则进入下一关,继续要求你输入下一个字符串;否则,炸弹就会爆炸,输出一行提示信息并向计分服务器提交扣分信息。因此,本实验要求你必须通过反汇编和逆向工程对bomb执行文件进行分析,找到正确的字符串来解除这个的炸弹。
本实验通过要求使用课程所学知识拆除一个“binary bombs”来增强对程序的机器级表示、汇编语言、调试器和逆向工程等方面原理与技能的掌握。 “binary bombs”是一个Linux可执行程序,包含了5个阶段(或关卡)。炸弹运行的每个阶段要求你输入一个特定字符串,你的输入符合程序预期的输入,该阶段的炸弹就被拆除引信;否则炸弹“爆炸”,打印输出 “BOOM!!!”。炸弹的每个阶段考察了机器级程序语言的一个不同方面,难度逐级递增。
为完成二进制炸弹拆除任务,需要使用gdb调试器和objdump来反汇编bomb文件,可以单步跟踪调试每一阶段的机器代码,也可以阅读反汇编代码,从中理解每一汇编语言代码的行为或作用,进而设法推断拆除炸弹所需的目标字符串。实验2的具体内容见实验2说明。

四、实验步骤及实验分析

建议按照:准备工作、阶段1、阶段2、等来组织内容
各阶段需要有操作步骤、运行截图、分析过程的内容

 准备工作

(1) 登录bupt1服务器。
(2) 进行操作解压.tar文件:Ls查看目录,看到bomb277.tar -> ‘rm -r bomb277’-> tar xvf bomb277.tar
(3) 查看bomb.c,控制检测的函数有7个
(4) 输入vi bomb.c 查看bomb.c的c语言代码:wq!退出,,控制检测的函数有7个
(5) objdump -d bomb >bomb.txt
(6) gdb disas +name 用gdb工具可得到反汇编代码
在这里插入图片描述

(7)设置各函数间的断点
在这里插入图片描述

(8) 为了避免爆炸过多扣分严重,可将爆炸函数处设置断点
在这里插入图片描述

 阶段一

1.观察bomb.c源码

在这里插入图片描述

可以看出:
(1) 首先调用了read_line()函数,用于输入炸弹秘钥,输入放置在char* input中。
(2) 调用phase_1函数,输入参数即为input,可以初步判断,phase_1函数将输入的input字符串与程序内部的炸弹秘钥进行比较。

2.启用gdb进行调试

3.在gdb工具下输入disas phase_1观察

在这里插入图片描述

(1)、<phase_1+0>:sub $0x8, %rsp,将函数栈空间扩展了0x8字节
(2)、<phase_1+4>:将0x402680 放置到了esi的地方。。
(3)、<phase_1+9>:调用strings_not_equal函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值