计算机系统bomblab实验报告
《计算机系统实验》实验报告

北京服装学院商学院实验报告实验名称:计算机系统实验学生姓名:班级学号:指导教师:刘辉实验日期: 20-09-13至20-09-21一、实验名称计算机操作系统安装、系统优化及系统安全实验二、实验目的1.熟悉计算机的体系结构2.学习计算机操作系统的安装和系统的优化3. 学习安全处理、系统备份以及简单组网技术三、实验内容1.计算机的体系结构认识2. 操作系统安装和系统优化3. 系统安全处理和系统备份4. 简单组网技术及实践四、实验环境硬件:北校区计算机系统实验室计算机软件:Windows XP 、Ghost等软件五、实验过程和结果实验一、计算机的体系结构认识一. 计算机的基本组成部件及作用答:《1》.显示器————————输出设备:显示电脑的工作过程《2》鼠标,键盘————————输入设备:向电脑输入有用的命令,让它去为我们工作《3》主机(机箱)————主要部分①CPU——————中央处理器,是电脑运算和控制的核心,电脑处理数据的能力和速度主要取决于CPU②主板——————决定你这台电脑性能的重要零件之一③南桥北桥——————连接各个部件,使他们能工作④内存——————存放当前待处理的信息和常用信息的半导体芯片⑤电源——————提供电⑥显卡——————将主机的输出信息转换成字符、图形和颜色等信息,传送到显示器上显示。
⑦声卡——————可以把来自话筒、收录音机、激光唱机等设备的语音、音乐等声音变成数字信号交给电脑处理,并以文件形式存盘,还可以把数字信号还原成为真实的声音输出⑧网卡——————又叫网络适配器是用来连接到网络的,它只是一个信号收发的设备⑨硬盘———————外存储器之一,用来储存各种音视频资料⑩软盘——————移动的外储存器(现在基本已经淘汰)⑪光驱——————读写光碟内容的机器⑫散热器(风扇)——————给机箱内部件散热(主要是CPU)二. 计算机的组成结构图实验二、操作系统的安装、常用软件的安装及系统优化一. 安装操作系统的流程①启动计算机:进行BIOS的设置②将计算机重启——F12,然后选择IDE CD-Rom Device。
计算机系统buflab实验报告

课程实验报告课程名称:计算机系统实验项目名称:buflab专业班级:计科1708姓名:学号:指导教师:完成时间:2019 年 5 月29 日信息科学与工程学院实验内容及操作步骤:Level 0:Level 0是要让test函数调用的getbuf函数返回时不返回到test函数而是返回到smoke函数。
先反汇编getbuf函数此时栈结构如下也就是说我们的输入要把smoke的地址覆盖掉返回地址smoke的反汇编也就是要输入44个任意字节,然后输入smoke的首地址即可,注意小端法输入,结果发现错误了,后来发现是因为0a是换行的ASCii码,所以会导致gets函数发生错误的识别,因此把0a 改成0b跳转至smoke函数第二行,然后成功Level 1:在level 1中有一个fizz函数,我们需要让test函数返回到fizz,并且我们需要把自己的cookie 作为传入参数。
这题的返回跳转函数部分与上一题一致。
Fizz函数如下getbuf函数反汇编Fizz函数反汇编可以看到,fizz函数的传入值就是ebp+8的位置,也就是说需要将ebp+8的位置改为cookie在getbuf函数返回时,执行leave指令(mov %ebp,%esp 和pop %ebp)和ret(pop %eip)指令后,esp的位置如图在fizz的反汇编中可以看到,需要将新的ebp定位,就需要将返回地址覆盖为fizz函数的第一行或者第二行,如果是第一行,那么先执行一个push %ebp (%esp-4),此时esp指向的是返回地址处,然后第二行mov %esp,%ebp就会把%ebp指向返回地址处,所以cookie的位置是返回地址的位置+8处而如果是要跳转到第二行,那么cookie的位置为返回地址的位置+12运行结果正确!Level 2:在level 2中,需要使程序跳转到自己写的一段反汇编代码,将全局变量global_val设置为cookie的值,随后再跳转到bang函数进行验证。
二进制拿炸弹实验报告完整版

课程名称:计算机系统原理实验实验课时:32课时实验项目名称:BombLab二进制炸弹实验材料:可执行文件bomb、源代码bomb.c、说明README实验环境:Linux操作系统(安装虚拟机和Ubuntu)实验工具:调试工具gdb实验内容:程序运行中有6道关卡(phases),每道关卡需要用户在终端上输入特定的字符串。
输入正确则炸弹解除,错误则炸弹引爆。
实验方法:1.将程序反汇编成汇编语言。
2.结合C语言文件找到每个关卡的入口函数。
3.然后分析汇编代码,找到每个phase中引导程序跳转到explode_bomb程序的地方。
4.分析其成功跳转的条件——以此为突破口寻找应该输入的字符串!【实验分析】预先准备首先查看整个bomb.c的代码,发现整个炸弹组是由6个小炸弹(函数)组成的。
整个main函数比较简单,函数间变量几乎没有影响。
因此,只需要依次解除6个小炸弹即可。
实验材料只有一个可执行文件,先把他用objdump -d反汇编得到汇编文件。
打开文件发现对应6个phase,对应的汇编文件十分长,因此我们直接步入phase部分。
一、phase_1:1.利用gdb调试,gdb bomb2.disassemble phaes_1经分析,答案极有可能存放在0x804a15c处3.可看汇编代码如上图所示,以下为栈帧的计算过程4.我们看到如上图所示,调用了一个<strings_not_equal>函数,根据名字判断是判断两个字符串是否相等。
我们找到这个函数来验证我们的猜想是否正确:5.在gdb下调试,设立断点,并检验二、phase_2:1.disassemble phase_2可看到phase_2的汇编代码以及理解,利用一个循环,不断计算出这个六位密码。
2.栈帧的计算步骤a[0]=0 a[1]=1 a[2]=a[0]+a[1]=1 a[3]=a[2]+a[1]=2 a[4]=3a[5]=5即答案猜想为 0 1 1 2 3 5,下面进行检验3.gdb下进行调试检验总结通过这次『拆弹』的历练,我对数据在内存中以及汇编的表示方法有了更加深刻的认识,做得过程可能有时候会摸不着头脑,这个时候告诉自己冷静,相信自己。
湖南大学-计算机组成原理实验-实验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>,又是一个类似的功能块,操作,不妨仍仿照以上述方法做一次分析。
CSAPP二进制炸弹bomb实验报告

一定要记得!!!!开始,在bomb的地址设置一个断点,防爆!Phase_1Phase_1:代码:08048c10 <phase_1>:8048c10: 83 ec 1c sub $0x1c,%esp8048c13: c7 44 24 04 c4 99 04 movl $0x80499c4,0x4(%esp)8048c1a: 088048c1b: 8b 44 24 20 mov 0x20(%esp),%eax8048c1f: 89 04 24 mov %eax,(%esp)8048c22: e8 dd 03 00 00 call 8049004 <strings_not_equal>8048c27: 85 c0 test %eax,%eax8048c29: 74 05 je 8048c30 <phase_1+0x20>8048c2b: e8 5b 09 00 00 call 804958b <explode_bomb>8048c30: 83 c4 1c add $0x1c,%esp8048c33: c3 ret从调用的函数“strings_not_equal”可以看出这是比较两个字符串的函数,字符串相等,返回1,不等返回0.接下来对返回值进行test,并判断test结果是否为0,为零(字符串相等)跳过bomb,否则(字符串不等)执行bomb。
strings_not_equal程序代码中我们可以看出是对%esp+4和%esp+8指向的内容进行比较,在call指令会让%esp减4,因此对应到主函数就可以看出比较的是%esp和%esp+4指向的内容。
主函数中对应的就是“输入”和“0x80499c4地址中的内容”。
因此,只要保证输入内容等于0x80499c4地址中的内容,便能不引爆炸弹。
查找该0x80499c4中的内容:得到之后运行程序并输入即可:Phase_2代码:08048c34 <phase_2>:8048c34: 56 push %esi8048c35: 53 push %ebx8048c36: 83 ec 34 sub $0x34,%esp8048c39: 8d 44 24 18 lea 0x18(%esp),%eax8048c3d: 89 44 24 04 mov %eax,0x4(%esp)8048c41: 8b 44 24 40 mov 0x40(%esp),%eax8048c45: 89 04 24 mov %eax,(%esp)8048c48: e8 43 0a 00 00 call 8049690 <read_six_numbers>8048c4d: 8d 5c 24 1c lea 0x1c(%esp),%ebx8048c51: 8d 74 24 30 lea 0x30(%esp),%esi8048c55: 8b 43 fc mov -0x4(%ebx),%eax8048c58: 83 c0 05 add $0x5,%eax8048c5b: 39 03 cmp %eax,(%ebx)8048c5d: 74 05 je 8048c64 <phase_2+0x30>8048c5f: e8 27 09 00 00 call 804958b <explode_bomb>8048c64: 83 c3 04 add $0x4,%ebx8048c67: 39 f3 cmp %esi,%ebx8048c69: 75 ea jne 8048c55 <phase_2+0x21>8048c6b: 83 c4 34 add $0x34,%esp8048c6e: 5b pop %ebx8048c6f: 5e pop %esi8048c70: c3 ret由于call了子程序read_six_numbers,而子程序代码太麻烦,于是便没有仔细分析。
计算机系统基础实验介绍Lab3

Lab3 实验任务(续)
4)任务四:boom(续) 本阶段的实验任务就是构造这样一个攻击字符串,使得 getbuf函数不管获得什么输入,都能将正确的cookie值返回 给test函数,而不是返回值1。除此之外,你的攻击代码应还 原任何被破坏的状态,将正确返回地址压入栈中,并执行ret 指令从而真正返回到test函数。
目标程序bufbomb续?缓冲区攻击从getbuf函数开始函数gets并不判断buf数组是否足够大它只是简单地向目标地址复制全部输入字符串因此输入如果超出预先分配的存储空间边界就会造成缓冲区溢出
计算机系统基础实验介绍Lab3
学术诚信
如果你确实无法完成实验, 你可以选择不 提交。如果抄袭,不管抄袭者还是被抄袭者, 均以零分论处并按作弊处分。
正常情况下,如果你的操作不符合预 期(!success),会看到信息“Better luck next time”,这时你就要继续-8尝-
目标程序BUFBOMB(续)
• 本实验的主要内容从分析test函数开始。
test函数中调用了getbuf函数, getbuf函数的功能是 从标准输入(stdin)读入一个字符串。
熟练运用gdb、objdump、gcc等工具。
-4-
二、实验数据
• /s/1hs2Mw1Q • 下载实验数据包: lab3.tar
在本地目录将数据包解压: tar –xf lab3.tar
数据包中至少包含下面四个文件:
* bufbomb: 可执行程序,攻击所用的目标程序bufbomb。 * bufbomb.c: C语言源程序,目标程序bufbomb的主程序。 * makecookie:可执行程序,该程序基于你的学号产生一个唯一的由8
void fizz(int val) {
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寄存器中的内容是栈底指针。
Matlab实验报告

实验结果及分析实验1:程序如下x=1:10y=2*x;plot(x,y)仿真结果:实验结果分析:仿真结果是条很规则的直线,X轴和Y轴一一对应,清楚明了,而序又特别简单。
所以用Maltab 软件很方便地画出规则的直线,方便研究。
实验结果及分析1、A=2、A=1A=实验结果及分析实验三 Matlab在信号与系统中的应用实验名称实验1、掌握信号与系统课程中基本知识的Matlab编程、仿真方法目的实验原理实验1程序:b=[1];a=[1 1];p=;t=0:p:5;x=exp(-3*t);subplot(1,2,1);impulse(b,a,0:p:5);title('冲激响应');subplot(1,2,2);step(b,a,0:p:5);title('阶跃响应');实验内容<设计性实验>1、用MATLAB在时域中编程求解y′(t)+y(t)=f(t), f(t)= exp(-3t)ε(t)的冲激响应、阶跃响应。
在simulink仿真环境下,设计系统框图,分析系统的冲激响应、阶跃响应。
<设计性实验>(选做)2、用MATLAB在时域中编程求解y′(t)+y(t)=f(t), f(t)=(1+exp(-3t))ε(t)的冲激响应、阶跃响应,要求用conv编程实现系统响应。
在simulink仿真环境下,设计系统框图,分析系统的冲激响应、阶跃响应。
实验结果及分析实验1仿真结果:simulink仿真环境下冲激响应阶跃响应实验名称实验四 Matlab在数字信号处理中的应用实验结果及分析实验1仿真结果:6khz12kHZ。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程实验报告
课程名称:计算机系统
实验项目名称:
专业班级:
姓名:
学号:
指导教师:
完成时间: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 32
Phase_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 4
Phase_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。
根据之前的经验,在底下找到一个地址0x804c13c,这段地址传值给edx,然后后面跟了一大
串mov指令,于是打印了这个地址的内容
发现它显示的是node(链表),那么这样就可以得出,后面的一大串mov操作是将链表连接起来。
然后再往下看到cmp后面跟着的一个jle指令,这表示ebx的值小于等于edx的值则发生跳转,根据经验,这里对应的c代码应该是x<=y,那么链表中能进行比较大小的操作肯定是链表存放的值进行比较大小,而输入的数又只能是1 2 3 4 5 6,那么这里就应该是进行从小到大的排序,然后输入的是结点的序号,于是得到正确的密钥4 6 3 1 2 5
Phase_defused:
隐藏关卡需要在其中一关中输入额外的指令才能触发,根据经验,先查看movl指令的地址,
可以看到,是需要在输入两个整数的关卡中额外输入一个字符串,在后面调用的字符串匹配函数可以看出,这个函数肯定是将目标字符串存在一个地址中,于是接着打印
可以看到需要输入的是DrEvil
进入隐藏关卡后,来到的是secret_phase函数
看到secret_phase函数其实并不是很长,但是它调用了fun7的返回值来作为判断正确与否的依据,fun7的返回值要等于5,于是进入到fun7函数中查看
看到fun7依然是一个递归的函数,所以先把它还原成c++代码
一开始我以为直接执行这个程序即可得到正确答案,但是发现这题与之前的递归函数有所不同,因为secret_phase函数传入的第一个参数不是个变量,而是一个地址
,因为我之前打印了传入地址的值
但是看错了那是mov的是地址,所以并不是将36作为传入的第一个数,因此只能一个个推.由于函数最终的返回值为5,那么我们可以推出上一次的返回值必定是2
返回值是2的话,那么再上一次的返回值必定是1,返回值是1的话,那么再上一次的返回值必定是0,此时说明当前节点的值等于待查询的值,也就是你需要输入的值。
于是按照地址顺序进行打印
得到最后传入值等于结点地址的值为0x2f,即为十进制的47,得到答案,拆弹结束
心得体会:
本次实验主要是对于汇编代码的阅读和分析的考验,单纯地分析汇编代码确实非常枯燥,也很乏味,一不小心就会看错或者跳行,所以必须要集中注意力,对于汇编代码和C++的转换也需要十分熟悉,在实验中可以看到,一些c++的临时变量的定义在汇编代码中并不会得到体现,这也是和编译器的翻译有关,优化资源,这也是对于我们编程思路的一个优化学习。
实
验
成
绩
实验报告撰写说明
1.实验题目和目的
请从实验指导资料中获取。
2.实验步骤和内容
包括:
(1)本次实验的要求;
(2)源程序清单或者主要伪代码;
(3)预期结果;
(4)上机执行或调试结果:包括原始数据、相应的运行结果和必要的说明(截图);
3.实验体会
调试中遇到的问题及解决办法;若最终未完成调试,要试着分析原因;调试程序的心得与体会;对课程及实验的建议等。