Bomblab实验报告
计算机系统bomblab实验报告

课程实验报告课程名称:计算机系统实验项目名称:专业班级:姓名:学号:指导教师:完成时间:2019 年 4 月20 日信息科学与工程学院实验题目:CASPP BOMB LAB实验目的:输入代码中隐藏的密钥,通过实验实验环境:个人电脑、linux发行版本、gdb工具实验内容及操作步骤:通过查看bomb.c的代码,可以发现有6个密钥需要输入,分别为phase_1,phase_2, phase_3, phase_4, phase_5, phase_6。
在密钥的输入过程中,如果输入隐藏指令,即可触发隐藏关卡。
利用gdb工具或者objdump来查看其反汇编代码,然后分析反汇编代码得出其密钥。
实验结果及分析:Phase_1:这段反汇编代码可以看到非常简略,通过调用的函数可以看出,输入的是一个字符串,然后对比字符串是否是符合要求的即可,那么由指令movl $0x804a184,0x4(%esp)可以看出,内部隐藏的字符串应该就存储在0x804a184地址中,所以打印该地址的内容这个就是需要输入的字符串Phase_2:该语句可以通过函数名看到,它是有6个数输入,并且通过第一个cmpl语句看出输入的第一个数为1,而后面的跳转语句可以看到,它是个while语句,并且下一个数都是上一个数乘2,所以这样即可推出密钥为1 2 4 8 16 32Phase_3:可以看出,phase_3的反汇编代码是要根据输入的第一个数来进行跳转,然后再与第二个数进行比较,看是否相等。
打印跳转表的地址然后对应到的就是这些立即数的mov操作然后将十六进制转化为十进制即可得到7组答案0 331 ;1 957; 2 705; 3 538; 4 801; 5 645; 6 829; 7 845 Phase_4:可以看到第四个代码调用了func4函数,同时为它传入了两个值,一个为输入的第二个数,一个为整数8可以看到,func4函数反复调用了它自己,因此这对应的c语言函数是一个递归函数,根据汇编的每一条指令,翻译成c++代码得到将其输出得到3组答案108 2; 162 3 ;216 4Phase_5:从该反汇编代码可以看出,存在一个地址读取数据,然后顺序储存了16个整数,就是0x804a200为首地址,然后顺序打印可得到数组为10,2,14,7,8,12,15,11,0,4,1,13,3,9,6,5在根据汇编代码中的cmp指令可以得出,输入的第一个数的范围是大于1,小于15的,并且在循环的执行过程中,要把数组的值作为数组的下标进行操作,并且一定要执行完15次循环,当时做这题的时候头很晕不想倒推,考虑到只需要在2-14中取出答案,所以直接写成c++代码穷举输出答案Phase_6:这一串代码非常长,但是在前面的一大段,发现它是在进行取值的操作,输入的6个整数范围是1-6。
湖南大学-计算机组成原理实验-实验3-bomblab

课程名称:计算机组成与结构实验项目名称:bomblab专业班级:姓名:学号:指导教师:完成时间:2016 年 4 月20 日信息科学与工程学院根据以上分析,我们发现,从键盘输入一个值,放到(新)ebp+8进行调用,把他传到esp中,接着,函数再从$0x804a15c这个地址取值,放到中,接着,程序对这两个参数进行函数调用,调用判断字符串是否相等的程序equal进行判断,如果二者相等,则返回值为0,不引爆炸弹,反之,只要二者不相等,则炸弹爆炸。
分析结论:此处的密码存在地址$0x804a15c中,我们只要查看该地址的值,即可完成该题。
打开gdb调试,运行x/s 0x804a15c,查看该处的值故第一题的答案为We have to stand with our North Korean allies.Phase_5内容如下:0x08048db8 <+0>: push %ebp0x08048db9 <+1>: mov %esp,%ebp0x08048dbb <+3>: push %esi0x08048dbc <+4>: push %ebx这是两个调用者保存寄存器,因为接下来的循环中使用到了这两个寄存器的值,所以要进行压栈保存。
0x08048dbd <+5>: sub $0x20,%esp esp-320x08048dc0 <+8>: lea -0x10(%ebp),%eax0x08048dc3 <+11>: mov %eax,0xc(%esp)ebp-160x08048dc7 <+15>: lea -0xc(%ebp),%eaxPhase_6内容如下:0x08048c89 <+0>: push %ebp0x08048c8a <+1>: mov %esp,%ebp 0x08048c8c <+3>: push %edi这<phase_6+93>之前的都表达了什么?其实很简单,就是输入的这1到6的,且相邻两数不相等,且相差值不为好,接下来看<phase_6+93>之后的内容<phase_6+93>~<phase_6+145>,又是一个类似的功能块,操作,不妨仍仿照以上述方法做一次分析。
压力爆破实验报告

Brazing material
材料厚度(mm)
Material thickness
生产厂家
Supplier
高度(mm)
Height
宽度(mm)
Width
厚度(mm)
Thickness
接样日期
Reception date
完成日期
Finish date
Test proposal
测试目的
Sample description
内漏Internal Leakage
外漏External Leakage
端板与首片板片之间Between frontcover plate and first plate
底板与末片板片之间Between backcover plate and last plate
其他Others
注: Q1、Q2、H1、H2及Q3、Q4、H3、H4分别为同一侧接管
4.委托检验结果仅对所检验样品有效。
Inspectionresultonly bears responsibility for the received samplein case of commissioned inspection.
样品型号
Sample model
申请单编号
Application NO.
内漏Internal Leakage
外漏External Leakage
端板与首片板片之间Between front cover plate and first plate
底板与末片板片之间Between back cover plate and last plate
其他Others
辅侧泄漏位置
大型科学爆炸实验报告(3篇)

第1篇一、实验背景随着科技的不断进步,对物质状态变化及能量释放机制的研究日益深入。
爆炸作为一种极端的物理现象,其背后的科学原理具有极高的研究价值。
为了揭示爆炸的物理本质,我们设计并实施了一项大型科学爆炸实验。
二、实验目的1. 研究不同条件下爆炸的物理过程。
2. 探讨爆炸产生的能量及其分布。
3. 分析爆炸对周围环境的影响。
4. 为相关领域的研究提供实验依据。
三、实验原理爆炸是可燃物质在有限空间内急剧燃烧,产生大量气体和热量,从而使气体迅速膨胀,产生巨大压力的一种现象。
实验中,我们通过控制可燃物质、氧气浓度、环境温度等因素,模拟不同条件下的爆炸过程。
四、实验用品1. 实验装置:金属罐、塑料瓶、蜡烛、火柴、橡皮管、气囊、塑料片等。
2. 可燃物质:面粉、煤粉等。
3. 仪器设备:高清摄像头、温度计、压力计、流量计等。
五、实验步骤1. 准备实验装置:剪去金属罐和小塑料瓶上部,并在金属罐和小塑料瓶底侧各打一个小孔,小孔大小比橡皮管外径略小。
2. 连接实验装置:用橡皮管连接金属罐、小塑料瓶和气囊。
3. 准备可燃物质:在小塑料瓶中放入干燥的面粉,把蜡烛放入金属罐中,并点燃。
4. 监测环境参数:使用温度计、压力计等仪器监测实验过程中的环境参数。
5. 观察爆炸现象:快速挤压气囊,鼓入大量空气,使面粉充满罐,观察爆炸现象。
6. 数据采集与分析:记录实验过程中相关参数的变化,分析爆炸产生的能量及其分布。
六、实验现象1. 爆炸发生时,金属罐和小塑料瓶内气体迅速膨胀,产生巨大压力。
2. 爆炸过程中,可燃物质燃烧产生大量热量,使环境温度急剧升高。
3. 爆炸产生的冲击波对周围环境造成一定影响,如塑料片飞到空中。
七、实验结果与分析1. 爆炸过程中,可燃物质燃烧产生的热量是爆炸能量释放的主要来源。
2. 爆炸产生的压力与可燃物质的种类、氧气浓度、环境温度等因素有关。
3. 爆炸对周围环境的影响主要表现为冲击波和高温,可能导致人员伤亡和设备损坏。
Bomblab实验报告

课程实验报告课程名称:计算机系统原理实验实验项目名称: BombLab 专业班级:计科1501 姓名:马子垚学号: 201508010114 完成时间: 2017 年 4 月 19 日实验目的理解汇编语言,学会使用调试器实验原理二进制炸弹是作为一个目标代码文件提供给学生们的程序,运行时,它提示用户输入6个不同的字符串。
如果其中任何一个不正确,炸弹就会“爆炸”:打印出一条错误信息。
学生通过反汇编和逆向工程来确定是哪六个字符串,从而解除他们各自炸弹的雷管。
实验步骤及体会一、实验准备1、首先,由于虚拟机操作系统与windows系统相互独立,所以首先将Bomb.c及其相关文件存至百度云盘,然后在ubantu操作系统内下载至文件系统目录下的下载文件夹里面:2、输入./bomb试运行bomb.c文件时会提示权限不够:所以需要输入chmod+x+文件名的命令于改变文件或目录的访问权限。
用它控制文件或目录的访问权限。
在经过操作之后,获得了权限,程序可以正常运行了:3、由于bomb.c文件并没有蕴含许多能破解的信息,所以需要将其进行反汇编,详细操作如下:输入objdump –d bomb >bomb.txt将汇编代码输出到自动生成一个bomb.txt的文件里面,方便我们查看与分析代码:二、具体实验步骤及其分析试查看导出的bomb.txt,我发现总的文本里面分为很多段,其中就有Phase_1~Phase_6、Phase_defuse、Phase_secret以及其他相关函数的代码,所以我猜测每一段Phase代码就是我们需要破解的关卡,所以我将它们分别导出新建text文件,逐段分析。
Phase_1及其破解过程:知识点:string,函数调用,栈反汇编代码及其分析:08048f61 <phase_1>:8048f61: 55 push %ebp//压栈 ebp为栈指针 esp为栈指针。
push指令可以理解为两个步骤:1. subl $4 , %esp –栈底向下移一位2. movl %ebp ,(%esp)将ebp的值存入esp中8048f62: 89 e5 mov %esp,%ebp//把esp赋值给ebp8048f64: 83 ec 18 sub $0x18,%esp//esp指针下移0x18个字节8048f67: c7 44 24 04 5c a1 04 movl $0x804a15c,0x4(%esp)//取0x804a15c处的内容存入*(%esp+4)//前一段总的分析:初始化栈,push是压栈指令,ebp寄存器中的内容是栈底指针。
烟雾炮弹物理实验报告

1. 了解烟雾炮弹的工作原理;2. 掌握烟雾炮弹的物理特性;3. 通过实验验证烟雾炮弹的发射距离和覆盖面积;4. 分析影响烟雾炮弹性能的因素。
二、实验原理烟雾炮弹是一种利用化学反应产生烟雾的发射装置,其主要原理是:将固体粉末和液体反应物分别装在两个密封的容器中,通过化学反应产生大量烟雾。
当发射按钮被按下时,反应物迅速混合,产生烟雾并从炮弹尾部喷射出来。
三、实验器材1. 烟雾炮弹一个;2. 发射按钮一个;3. 测量工具(如卷尺、计时器等);4. 实验场地(开阔且安全);5. 实验记录表格。
四、实验步骤1. 准备实验场地,确保安全;2. 将烟雾炮弹放置在实验场地的起始位置;3. 将发射按钮固定在合适的位置;4. 记录炮弹的初始状态(如炮弹重量、尺寸等);5. 按下发射按钮,观察烟雾炮弹的发射过程;6. 使用测量工具测量烟雾炮弹的发射距离和覆盖面积;7. 重复实验多次,记录实验数据;8. 分析实验数据,得出结论。
实验次数 | 发射距离(米) | 覆盖面积(平方米)------- | -------------- | ---------------1 | 15 | 102 | 14 | 93 | 16 | 124 | 13 | 85 | 15 | 11六、实验结果分析1. 通过实验数据可以看出,烟雾炮弹的发射距离在14-16米之间,平均值为15米;2. 烟雾炮弹的覆盖面积在8-12平方米之间,平均值为10平方米;3. 实验结果表明,烟雾炮弹的发射距离和覆盖面积受到炮弹重量、尺寸、反应物比例等因素的影响。
七、结论1. 烟雾炮弹是一种利用化学反应产生烟雾的发射装置,具有较好的实用价值;2. 实验结果表明,烟雾炮弹的发射距离和覆盖面积受到多种因素的影响,需要在实际应用中加以考虑;3. 通过本次实验,我们掌握了烟雾炮弹的物理特性,为今后类似实验提供了参考。
八、实验总结本次烟雾炮弹物理实验,使我们了解了烟雾炮弹的工作原理和物理特性,提高了我们的实验操作能力。
深入理解计算机系统LAB2

深入理解计算机系统LAB2————————————————————————————————作者: ————————————————————————————————日期:LAB1实验报告实验目的:使用课程知识拆除一个“Binary Bombs”来增强对程序的机器级表示、汇编语言、调试器和逆向工程等理解。
实验简介:ﻩ一个“BinaryBombs”(二进制炸弹,简称炸弹)是一个Linux可执行C程序,包含phase1~phase6共6个阶段。
炸弹运行各阶段要求输入一个字符串,若输入符合程序预期,该阶段炸弹被“拆除”,否则“爆炸”。
实验目标是你需要拆除尽可能多的炸弹。
运行结果:ﻩ通关密码储存在00131.txt文件中。
成功运行结果截图:ﻩ实验中的六组密码:PHASE1:字符串比较ﻩ本关比较简单,根据课件中的提示用GDB将最先压栈的那个字符串常量打印出来,然后将其作为密码输入,比较成功后即通关。
08048ab2 <phase_1>:8048ab2:ﻩ83ec 14 sub $0x14,%esp8048ab5:6ﻩ8 049f 04 08 push $0x8049f048048aba:ﻩff 74 24 1c ﻩpushl 0x1c(%esp)8048abe:ﻩe8 4d 04 00 00 ﻩcall 8048f10 <strings_not_equal> ﻩ将地址0x8049f04中的值打印出来:即“The future will be bettertomorrow.”PHASE2:循环在查看汇编语言的时候,会看到有调用一个read_six_number函数,猜测此题是让输入六个数字。
08048ad3 <phase_2>:8048ad3:ﻩ56 push%esi53push %ebx8048ad4:ﻩ83 ec2c ﻩsub $0x2c,%esp8048ad5:ﻩ8048ad8: 8d 44 24 10lea 0x10(%esp),%eax8048adc:ﻩ50push %eax8048add:ﻩff 74 243c ﻩpushl0x3c(%esp)8048ae1:e8 46 05 00 00 call804902c <read_six_numbers>83c410add $0x10,%esp8048ae6:ﻩ8048ae9:ﻩ83 7c24 0801ﻩcmpl $0x1,0x8(%esp)------→判定是否为18048aee: 74 1eﻩje 8048b0e <phase_2+0x3b>8048af0: e8 1205 00 00 ﻩcall 8049007 <explode_bomb>8048af5: eb 17 jmp 8048b0e <phase_2+0x3b>8048af7:ﻩ8b 03 ﻩmov (%ebx),%eax8048af9:0ﻩ1 c0 ﻩadd %eax,%eax----→进行自加,扩大两倍8048afb: 39 43 04 ﻩcmp %eax,0x4(%ebx)05je 8048b05 <phase_2+0x3748048afe:ﻩ2>8048b00:ﻩe8 02 05 00 00 call 8049007 <explode_bomb> 83c3 04 add $0x4,%ebx8048b05:ﻩ8048b08: 39 f3ﻩcmp %esi,%ebx8048b0a:75eb ﻩjne8048af7 <phase_2+0x24>8048b0c: eb 0a jmp8048b18 <phase_2+0x45>8048b0e:ﻩ8d 5c 24 08 lea 0x8(%esp),%ebx8048b12:ﻩ8d 7424 1c ﻩlea 0x1c(%esp),%esi8048b16: eb df jmp 8048af7 <phase_2+0x24>→循环8048b18:83 c4 24 ﻩadd $0x24,%esp8048b1b:ﻩ5b pop %ebx8048b1c: 5e ﻩpop %esi8048b1d:ﻩc3 ﻩret有汇编语言进行分析,不难看出,这道题目要求输入六个数字,并且要求第一个数字为1,之后跳入一个循环,将第一个数字加倍和已有的数字进行比较,所以不难看出所需要的密码是1,2,4,8,16,32这六个数字。
LAB boom实验报告

$0x804a23e,0x4(%esp),我们查看 0x804a23e 的值结
再根据语句 0x08048e50 <+34>: call 0x8048840 <__isoc99_sscanf@plt> 0x08048e55 <+39>: cmp $0x2,%eax 说明我们要输入两个整型数,下面的工作就是判断这两个整型数分别是什么。由代码 0x08048e6b <+61>: movl $0xe,0x8(%esp) 0x08048e73 <+69>: movl $0x0,0x4(%esp) 0x08048e7b <+77>: mov -0xc(%ebp),%eax 0x08048e7e <+80>: mov %eax,(%esp) 可以看出我们以第一个参数,0 ,14 为参数传入递归函数中而且返回值为 1,所以我们这时做的 事情就是分析 func4 函数,看第一个参数为多少时返回值能为 1,而第二个参数有代码 0x08048e8b <+93>: cmpl $0x1,-0x10(%ebp) 0x08048e8f <+97>: je 0x8048e9d <phase_4+111> 可知第二个参数就为 1。 下面分析 func4
我们希望它的返回值为 0 这样根据 0x1(%eax,%eax,1),%eax 返回值就是 1 了,最简单的一种情 况就是 14 和 8 经过运算后结果为 11 而参数 1 恰好等于 11 的情况,更复杂一些的情况就是它又 调用了 0x08048b97 <+55>: call 0x8048b60 <func4>,再由它的返回值再继续推理,所以 此题有多种答案,最简单的就是 11,1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
知识点:string,函数调用,栈
反汇编代码及其分析:
08048f61 <phase_1>:
8048f61:55push %ebp
//压栈 ebp为栈指针 esp为栈指针。
push指令可以理解为两个步骤:
1、 subl $4 , %esp–栈底向下移一位
2、 movl %ebp ,(%esp) 将ebp的值存入esp中
//test执行的就就是and的指令,不会保存and执行的结果,而就是根据and的结果设置flags寄存器的各种标志。
8048f7c:74 05je 8048f83 <phase_1+0x22>
//Je指令:当ZF等于零的时候跳转,也就就是相等的时候跳转。判断%eax就是否为0,为0跳转,不为0引爆
8048f7e:e8 4e 01 00 00call 80490d1 <explode_bomb>
8048f83:c9leave
//为结束函数做准备
8048f84:c3ret
//返回。ret:不带任何参数时,用于在子程序的结束位置,被调用的子程序必须有ret指令,否则调用没有ret指令的子程序会导致自陷,子程序执行完之后处于失控状态。带参数ret n 表示子程序返回主程序的同时,堆栈弹出n个字节(栈顶指针减n)
//调用字符串比较函数,string_not_equal就提示需要比较两个字符串,通过gcc函数调用规范知道压入堆栈的两个参数分别为输入字符串与程序内部字符串。<strings_not_equal>函数的时候,必须返回%eax为0,而这个函数的作用就就是判断字符串就是否相等。
8048f7a:85 c0test %eax,%eax
8048f6e:08
8048f6f:8b 45 08mov 0x8(%ebp),%eax
//取用户输入的内容存入%ebp
8048f72:89 04 24mov %eax,(%esp)
//eax的值赋值给*esp
8048f75:e8 31 00 00 00call 8048fab <strings_not_equal>
3、由于bomb、c文件并没有蕴含许多能破解的信息,所以需要将其进行反汇编,详细操作如下:
输入objdump–d bomb >bomb、txt将汇编代码输出到自动生成一个bomb、txt的文件里面,方便我们查瞧与分析代码:
二、具体实验步骤及其分析
试查瞧导出的bomb、txt,我发现总的文本里面分为很多段,其中就有Phase_1~Phase_6、Phase_defuse、Phase_secret以及其她相关函数的代码,所以我猜测每一段Phase代码就就是我们需要破解的关卡,所以我将它们分别导出新建text文件,逐段分析。
8048f62:89 e5mov %esp,%ebp
//把esp赋值给ebp
8048f64:83 ec 18sub $0x18,%esp
//esp指针下移0x18个字节
8048f67:c7 44 24 04 5c a1 04movl $0x804a15c,0x4(%esp)
//取0x804a15c处的内容存入*(%esp+4)
知识点:循环语句,数组
08048d6a <phase_2>:
8048d6a:55push %ebp
8048d6b:89 e5mov %esp,%ebp
8048d6d:56push %esi
8048d6e:53push %bx
8048d6f:83 ec 30sub $0x30,%esp
8048d72:8d 45 e0lea -0x20(%ebp),%eax
具体操作:
读取0x804a15c内存的字符串(密码),并设置断点。
成功读取到字符串,作为密码输入:
第一关成功破解
程序流程:
1、取内存地址0x8049a04处的内容;
2、取用户输入的内容(即密码);
3、比较两者的值,相等则%eax置为0,进入下一关,不相等则调用引爆程序引爆炸弹。
Phase_2及其破解过程:
实验步骤及体会
一、实验准备
1、首先,由于虚拟机操作系统与windows系统相互独立文件系统目录下的下载文件夹里面:
2、输入、/bomb试运行bomb、c文件时会提示权限不够:
所以需要输入chmod+x+文件名的命令于改变文件或目录的访问权限。用它控制文件或目录的访问权限。在经过操作之后,获得了权限,程序可以正常运行了:
8048d7c:89 04 24mov %eax,(%esp)
//前面几行均为初始化栈操作
8048d7f:e8 87 03 00 00call804910b <read_six_numbers>
//调用函数read_six_numbers(说明密码就是6个数字)
8048d84:83 7d e0 00cmpl $0x0,-0x20(%ebp)
//lea:取偏移地址将一个数的内存单元的偏移地址,送入寄存器中存储,与mov不同的就是mov就是将该数当作一个偏移地址存入寄存器,没有寻址的功能。
8048d75:89 44 24 04mov %eax,0x4(%esp)
//取用户输入的内容,存入%ebp
8048d79:8b 45 08mov 0x8(%ebp),%eax
//前一段总的分析:初始化栈,push就是压栈指令,ebp寄存器中的内容就是栈底指针。esp寄存器里面存的就是栈顶地址。通过sub指令,将栈顶固定在第十八个存储单元里面。字符串的内存地址为0804a15c,四个字节。一个存储单元存放8个bit两个十六进制数字,栈顶及后三个单元存栈顶地址。故用mov指令将字符串地址存在栈顶后的第四个字节处。
课程实验报告
课程名称:计算机系统原理实验
实验项目名称:BombLab
专业班级:计科1501
姓名:马子垚
学号:2
完成时间:2017年4月19日
实验目的
理解汇编语言,学会使用调试器
实验原理
二进制炸弹就是作为一个目标代码文件提供给学生们的程序,运行时,它提示用户输入6个不同的字符串。如果其中任何一个不正确,炸弹就会“爆炸”:打印出一条错误信息。学生通过反汇编与逆向工程来确定就是哪六个字符串,从而解除她们各自炸弹的雷管。