湖南大学计算机系统原理实验,湖南大学-计算机组成原理实验-实验3-bomblab.pdf

课程实验报告

课 程 名 称: 计算机组成与结构

实验项目名称: bomblab

专 业 班 级:

姓 名:

学 号:

指 导 教 师:

完 成 时 间: 2016 年 4 月 20 日

信息科学与工程学院

实验题目:bomblab

实验目的:程序运行在linux 环境中。程序运行中有6 个关卡(6 个phase),每个phase

需要用户在终端上输入特定的字符或者数字才能通关,否则会引爆炸弹!那么如何才

能知道输入什么内容呢?这需要你使用gdb 工具反汇编出汇编代码,结合c 语言文件

找到每个关卡的入口函数。然后分析汇编代码,找到在每个phase 程序段中,引导程

序跳转到“explode_bomb”程序段的地方,并分析其成功跳转的条件,以此为突破口

寻找应该在命令行输入何种字符通关。

实验环境:ubuntu14.04 虚拟机、gdb 工具

实验内容及操作步骤:

首先打开bomb.c 文件,发现这个文件里只有主函数,没有具体的代码,所以我们

要通过反汇编得到6 关的具体代码。

反汇编有两个具体的方法:

第一种:objdump -d bomb > 1.txt 将反汇编结果输出到1.txt 中

第二种:使用gdb 调试bomb,命令为(gdb)disas func_name,其中func_name

对应于本次实验中的六个函数phase_1~6,再将结果复制到word 中。

我采用第二种方法得到反汇编代码,下面对六个bomb 进行分析、得到我们拆炸弹

所需的密码。

Phase_1 内容如下

0x08048f61 : push %ebp

0x08048f62 : mov %esp,%ebp

0x08048f64 : sub $0x18,%esp 这里对esp-24

0x08048f67 : movl $0x804a15c,0x4(%esp) 这是将$0x804a15c 处的

值存入esp+4 中

0x08048f6f : mov 0x8(%ebp),%eax ebp+8 就是从调用函数处取出第

一个参数,放到eax 寄存器中

0x08048f72 : mov %eax,(%esp) 将eax 的值传给esp

0x08048f75 : call 0x8048fab 此处是入口函

数的地址0x8048fab,该函数要调用的参数为esp+4(即$0x804a15c 处的值),和ebp+8

(即我们输入的值)该函数的作用是 :判断字符串是否相等

考虑一个函数的返回值要存在eax 中,则以下的eax 已经发生改变,是判断字符

串是否相等的结果

0x08048f7a : test %eax,%eax

0x08048f7c : je 0x8048f83

0x08048f7e : call 0x80490d1

以上三句,如果eax 不为0,则引爆炸弹,如果eax 为0,则跳转到leave 语句函

数结束。说明eax 为0 时,可以进入下一关

0x08048f83 : leave

0x08048f84 : ret

解题过程:

本题的栈帧结构如下:

根据以上分析,我们发现,从键盘输入一个值,放到 (新)ebp+8 中,接着函数

进行调用,把他传到esp 中,接着,函数再从$0x804a15c 这个地址取值,放到esp+8

中,接着,程序对这两个参数进行函数调用,调用判断字符串是否相等的程序string

not equal 进行判断,如果二者相等,则返回值为0,不引爆炸弹,反之,只要二者不

相等,则炸弹爆炸。

分析结论:此处的密码存在地址$0x804a15c 中,我们只要查看该地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值