bomb实验(报告)

一、实验前的做:

1、在终端输入指令:objdump -d bomb > 2.txt :生成反汇编代码到文件-2.txt-中。
2、输入指令:gedit 2.txt :代开-2.txt-文件。如下图所示。
bomb实验(报告)_第1张图片
3、全选复制后,在本机输入cmd指令打开dos窗口后,输入write指令打开写字板后赋值代码。
bomb实验(报告)_第2张图片
4、查找phase_1,开始拆弹。bomb实验(报告)_第3张图片

实验过程:

1、炸弹一的汇编代码:

bomb实验(报告)_第4张图片

拆弹流程:

思路:

a、8048b53对应语句含义:将以地址$0x804a1a4开始的内容作为函数的第一个形参。
b、同理8048b5b,8048b5对应的两条语句的含义为将你输入的东西作为的第二个形参。
c、8048b62之后的语句意思为调用函数判断你的输入字符串是否和0x804a1a4地址中存放的字符串一致,若一致,则拆弹成功,否则爆炸。

操作:

A,输入指令:gdb bomb
进入调试界面
B,输入指令在这里插入图片描述
查看0x804a1a4地址中存放的字符串。
C,输入相同的字符串在这里插入图片描述
过。

炸弹二的汇编代码:

bomb实验(报告)_第5张图片
bomb实验(报告)_第6张图片

思路:

1、代码段从0x8048b78到0x8048b84实际上就是为接下来将要调用的函数准备两个形参。又可见一个形参离来自%ebx的上方,也就是函数的形参,于是这个形参即为输入,且为一串字符,另一个形参为数组读入数组的初始地址。
2、0x8048b8c到0x8048b93限制A[0]必须为一个非负数。
3、0x8048b9d到0x8048bb4为一个一重循环,作用判断A[i]是否等于A[i-1]+1,不等则爆炸,否则继续。
于是我们可得一组样例:
1 2 4 7 11 16。
在这里插入图片描述

炸弹三的汇编代码:bomb实验(报告)_第7张图片

bomb实验(报告)_第8张图片
bomb实验(报告)_第9张图片

手机砸到电脑后蓝屏,之前写的没保存。。。

就随便写了:
输入两个数字,第一个数字A一定要小于等于7,然后有跳转表(0x8048bf7行对应),根据输入的A跳转到相应的代码段。
通过以下指令查看第一个位置,第二个位置跳转到的地址。在这里插入图片描述
查看第一个跳转,不难得出输入的第二个数字一定要等于315,而要执行第一步跳转输入的第一个数字A一定要为0。
于是可得以下输入:
在这里插入图片描述

炸弹四的汇编代码:

bomb实验(报告)_第10张图片
bomb实验(报告)_第11张图片

流程:

1、0x8048cbb到0x8048cd7为程序在对调用函数做形参准备,不难发现函数的作用时输入两个数值。
2、0x8048ce4到0x8048cef 可得输入的第一个数字一定要大于等于0小于等于15。
3、0x8048cf6到0x8048d0a 为调用递归函数前的形参准备。
4、由0x8048d12可知调用递归函数后得到的返回值一定要等于0x23
5、在看0x8048d17得输入的第二参数b 等于0x23,十进制就是35。
6、因此其实在不看懂递归函数的前提下可以通过穷举a的值来拆弹。在这里插入图片描述
穷举到8后,过。

炸弹5的汇编代码:

bomb实验(报告)_第12张图片
bomb实验(报告)_第13张图片

流程:

1、整个汇编代码的过程基本上就是输入两个整数A,B,B要等于某个长度为15的数组C的所有元素的和。
该数组的元素可以通过下图查看:
在这里插入图片描述
另一个数A,要让其通过某种规则最后跳转到15,稍微推导不难发现A=5。
在这里插入图片描述
过。

炸弹6的汇编代码:

bomb实验(报告)_第14张图片
bomb实验(报告)_第15张图片
bomb实验(报告)_第16张图片
bomb实验(报告)_第17张图片
bomb实验(报告)_第18张图片

流程

1、汇编代码的意思为输入六个小于等于6且互不相等的数字,根据这6个数字对一个长度为6的链表重新排序,使得链表为递增的情况,链表的首地址为0x804c13c,可通过下图指令查看链表中存储的值

bomb实验(报告)_第19张图片
2、于是不难得到答案:5 4 2 6 1 3
在这里插入图片描述

你可能感兴趣的:(深入理解计算机操作系统)