CSAPP Lab 2 Bomb小记三

CSAPP BOMB LAB 题解(含secret_phase进入方法和答案) csapp bomblab题解 阅读详情

在前面两篇文章中,我们已经分析完了六个phase,接下来分析最后一个phase。

实验过程

secret phase 破解

在此之前,我们分析bomb.c文件,发现一件有趣的事情:
在这里插入图片描述
在文件执行的过程中,我们似乎并没有察觉到phase_defused()函数的动静,接下来我们看看这个函数干了什么。
在这里插入图片描述
在这里插入图片描述
这里要注意:
在这里插入图片描述
这是一个防止栈溢出的操作。把%fs段偏移0x28处的一个数据存储到了%rsp上面0x68距离处(金丝雀)
903:将%esi置为0x402619,查看其代表含义
在这里插入图片描述
为输入两个数字和一个字符串,回看我们之前的几个phase,没有一个phase是这样的输入。
905:调用了scanf函数,输入
这里我们可以发现一个奇怪的事情,在前面几个phase中,只有phase_3和phase_4调用了scanf函数,并且都不约而同地没有限制输入参数的数量!所以,我们可以猜测,这里的三个输入与这两个phase的输入有关。
果然,接下来用%eax作为参数个数限制器,若参数数量不为3则直接跳过了隐藏的关卡,只有输入参数数量为3,即输入形式为“%d %d %s”形式才有可能发现隐藏关卡。
关键来了:
在这里插入图片描述
在这里插入图片描述
接下来就是字符串的比较,只有输入字符串等于给定字符串,函数才能继续执行,即在phase_3或者phase_4中的输入后面接着输入“DrEvil”。
在这里插入图片描述
分别查看内容:
在这里插入图片描述
在这里插入图片描述
出现了之前没有出现过的提示,说明我们找到了隐藏关卡的入口!
可是入口在哪个phase呢?
我们尝试不同的phase:
<phase_3>

在这里插入图片描述
不是phase_3
<phase_4>
在这里插入图片描述
关卡的入口在phase_4
找到隐藏关卡入口后,我们开始分析secret_phase
在这里插入图片描述
在这里插入图片描述
从命令行读入数据,初始化%edx为10,%esi为0,将读入的数据放入%rdi中。
调用strtol函数,将输入的字符串数据(把输入当成字符串处理)转化为长整型数。
转化后的数值放入%rbx中
输入数值的限定条件:小于等于1000
将输入数放入%esi(后续这个寄存器将作为输入数寄存器进行比较操作)
在这里插入图片描述
查看其含义,%edi所存地址对应的值为0x24(36)
在这里插入图片描述
调用fun7,返回值为2,函数才能成功
接下来则查看函数fun7
在这里插入图片描述
test测试若比较数的地址为空,则返回值为-1
将比较数放入%ebx(%ebx比较数寄存器)
记输入数为n,比较数为m
比较n与m的大小关系:
在这里插入图片描述
n > m 则m取距离%rdi偏移为16处地址的值,再次调用fun7(这个被调用的fun7返回值记为a,则外层函数的返回值为2a+1)
在这里插入图片描述
n = m 则返回值为0;
在这里插入图片描述
n < m 则m取距离%rdi偏移为8处地址的值,再次调用fun7(这个被调用的fun7返回值记为b, 则外层函数的返回值为2
b)
这是一个递归调用
我们需要使得最终的返回值为2
则 最外层的函数满足条件:m0 > n 即输入数n 小于 %rdi存放地址对应的值0x24
此时中间层函数需满足条件:m1 < n 且该函数返回值为1
最里层函数需满足条件: m2 = n 且该函数返回值为0
在这里插入图片描述
最外层:n小于36
在这里插入图片描述
中间层:此时m取距离%rdi偏移为8处地址的值
在这里插入图片描述
则n大于8
最里层:此时m取距离%rdi偏移为16处地址的值
在这里插入图片描述
则n=22(0x16)
在secret_phase这一关,输入22
在这里插入图片描述
secret_phase破解!

个人感想:这次认认真真搞完了bomb实验,烧脑是的确烧脑,但对于汇编的阅读能力,代码的调试能力都有很大的帮助,总体而言,这是一个非常棒的实验!

PS:断点设置时的phase_1,phase_2这些应该先在符号表中查看
在这里插入图片描述
在其中找到与我们需要的,如图中所示
在这里插入图片描述
至此,实验bomb完成。

CSAPP二进制炸弹实验 bomb lab详细解析 前段时间刚刚昨晚bomb lab实验,记录一下我做CSAPP 二进制炸弹实验的详细过程。有什么问题可以在评论中指出,一起进步。 实验目录实验准备第一关第二关第三关第四关第五关第六关 实验准备 首先需要下载相关的资料。 代码:http://csapp.cs.cmu.edu/3e/bomb.tar GDB命令文档:http://csapp.cs.cmu.edu/3e/docs/gdbnotes-x86-64.pdf 说明:http://csapp.cs.cmu.edu/3e/bomblab.pdf README 阅读详情

相关推荐

CSAPP实验2:Bomb Lab笔记

实验简介 准备 汇编复习 反汇编 GDB Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Phase 6 实验简介 ​ Bomb LAB 目的是熟悉汇编。 ​ 一共有7关,六个常规关卡和一个隐藏关卡,每次我们需要输入正确的拆弹密码才能进入下一关,而具体的拆弹密码藏在汇编代码中。实验中的bomb实际上是一个程序的二进制文件,该程序由一系列p...

zjwreal 6633

计算机系统bomb实验:隐藏关secret_phase详解

计算机系统bomb实验:隐藏关secret_phase详解 我们解完六个关卡后似乎程序已经运行完成了,说明隐藏关卡还需要一定的条件才能触发,那么我们首先就要先去找到触发隐藏关卡的条件。我们看到bomb.c文件,每段phase函数运行完成以后又会运行一个phase_defused()函数,这个函数我们在上述拆炸弹过程中都没有用到,自然它的嫌疑就很大,故我们先看看这个函数的具体内容: Dump of assembler code for function phase_defused: => 0x080

qq_49005782的博客 3217

CSAPP课程实验 bomb实验 拆炸弹实验(1)

由于内容较长,所以打算分成几个部分来写。 实验准备知识: 实验三是CSAPP课程中的bomb炸弹实验。一个非常有意思的实验。实验主要提供了2个文件,一个bomb二进制可执行文件,一个bomb.c C源文件。实验主要设置6个关卡phase,要求你每一关输入一个特定的字符串,来拆掉炸弹。主要是考察对汇编语言的熟悉理解程度,反汇编和逆向工程以及gdb调试。感觉datalab主要是对应教材的第二章

syq1207的博客 2万+

【CSAPP】探究BombLab奥秘:Secret_phase的解密与实战

这篇博文深入探讨了CSAPP(Computer Systems: A Programmer's Perspective)课程中的BombLab实验,聚焦于Secret_phase的解密与实战。作者通过对实验环境、逆向分析和程序攻击的详细讲解,揭示了解除炸弹背后的深奥机制。文章通过生动的案例和实战经验,引领读者深入理解计算机系统底层原理与程序设计之间的精妙关系,为学习者提供了一次极富挑战性和收获的学术冒险。

朝花夕拾 9864

CSAPP Bomb lab(内含答案)

CSAPP Bomb lab CSAPP的bomb lab是让你通过反汇编和gdb,找到六个相应的字符串,来拆掉炸弹。 本实验一共六个阶段,每个阶段对应一个字符串。在完成这六个阶段以后,还有一个彩蛋secret_phase。彩蛋可以在反汇编的代码中看到,只能通过gdb进入,没有出现在main函数中。 整个实验的整体框架可以在bomb.c文件中看到。主要是用的工具是gdb和objdump。 下面的代码都是在gdb中反汇编出来的代码,通过gdb反汇编出来的代码跳转地址是用的绝对地址,比较好看。 Phase_1

weixin_44720323的博客 4005

【实验记录】csapp实验二(详细):BOMB LAB

进入每一个phase时,我们应该弄清楚的是: 1、输入格式:需要我们输入什么,是字符串,还是整数,还是字符,输入个数是多少? 2、爆炸点:哪些语句可能引起爆炸,通常为一个比较语句cmp,这是解题的关键,告诉应该输入的值是多少。因此,找到这些爆炸点即可能跳到<explode_bomb>爆炸函数的语句,在这些地方打上断点哦。 3、循环、递归:当发现jump会往之前的语句跳时,可能是循环或者...

小雨的博客 5896

深入理解操作系统实验——bomb lab(secret_phase)

7、隐藏炸弹secret_phase破解 得到secret_phase的汇编代码 push %ebx sub $0x18,%esp call 804919d <read_line> movl $0xa,0x8(%esp) movl $0x0,0x4(%esp) mov %eax,(%esp) call 80488e0 <strtol@plt>...

君陌的博客 3415

CSAPP-Lab02 Bomb Lab 详细解析

GDB的全称是:GNU symbolic debugger。bomb实验逼迫我们不得不学习调试器的使用,在做实验之前,了解常见的GDB命令是必不可少的。常见GDB命令可以访问:https://deconx.top/2022/02/22/gdb/ 实验概览 BombLab提供给我们的文件非常简单,只有一个编译不了的C文件bomb.c,和一个目标代码文件bomb。当运行bomb文件时,它会要求输入6个字符串,如果其中的任何一句是错的,炸弹就会“爆炸”。我们必须利用反汇编工具逆向分析这个文件,并找到这6个字符.

qq_25591221的博客 2738

【CSAPP】Binarybomb 实验(phase_1-6+secret_phase)

一个“binary bombs”(二进制炸弹,下文将简称为炸弹)是一个Linux可执行C程序,包含了7个阶段(phase1~phase6和一个隐藏阶段)。炸弹运行的每个阶段要求学生输入一个特定的字符串,若的输入符合程序预期的输入,该阶段的炸弹就被“拆除”,否则炸弹“爆炸”并打印输出 "BOOM!!!"字样。实验的目标是拆除尽可能多的炸弹层次。 每个炸弹阶段考察了机器级语言程序的一个不同方面,难度逐级递增:为了完成二进制炸弹拆除任务,需要使用gdb调试器和objdump来反汇编炸弹的可执行文件,并单步跟踪调试

Jerome_Tong的博客 3173

CSAPP Bomb Lab 实验记录 [yy-b]

文章目录前言实验环境实验内容准备阶段phase_1phase_2 前言 写这个的目的就是想记录一下自己做过的东西,内容可能比较简单,不喜请略过. 写的比较详细,按步骤大概率可重复进行实验. 本次的内容是CSAPP上的实验Bomb Lab. 实验环境 MobaXterm Linux系统 Objdump命令反汇编 GDB调试工具 实验内容 准备阶段 (实验所需材料略) 登录服务器,解压炸弹压缩包...

weixin_43968560的博客 753

堆栈图解CSAPP Bomb Lab实验解析

CSAPP Bomb Lab 实验解析 Bomblab是csapp的第二个配套实验,该实验提供了一个bomb二进制文件和一个bomb.c源文件,我们的目标是运行bomb并按照提示一步步输入字符串,直到完成整个拆炸弹的流程。但是源文件中只提供了部分代码,所以我们需要通过反汇编工具 objDump 来分析bomb的汇编代码,推导出所有能够拆解炸弹的字符串。 调试前在explode_bomb的地址上设置断点,break *0x804986d。 Phase_1 反汇编代码: Dump of assembler co

业精于勤,荒于嬉 1544

CSAPP Lab2:Bomb Lab

目录前言一.实验总说明 前言 该实验是《深入理解计算机系统》(英文缩写CSAPP)课程附带实验——Lab2:Bomb Lab,主函数有六个炸弹函数,先是获得输入input = read_line(); 接着运行 phase_1(input); 判断是否是正确答案,如果是正确答案,调用phase_defused(); 来获取接触炸弹的方式。 一.实验总说明 A “binary bomb” is a program provided to students as an object code file.

倪多多的博客 1万+

算法导论之线性规划

线性规划,充斥着运筹学,在图的单源最短路径求解差分约束系统就是用到线性规划。怎么样问题可以建模为线性规划来解决呢?在给定的有限的资源和竞争约束情况下,取得最大化或最小化目标的问题。导论中给出政治竞选问题、航空航线调度问题、钻井采油问题。最大化或最小化目标是函数的因变量,自变量就是资源的约束因素,其函数就是由这些制约因素构成的等式或不等式。下面数学定义下线性规划。 在一般线性规划问题中,最优化一个

医疗影像检索 2万+

CSAPP | Lab2-Bomb Lab详细解析

邪恶的邪恶博士在我们班的机器上安放了大量的“二元炸弹”。二进制炸弹是一个由一系列阶段组成的程序。每个阶段都要求你在 stdin 上键入一个特定的字符串。如果你键入了正确的字符串,那么这个阶段就会被拆除,炸弹就会进入下一个阶段。否则,炸弹会通过打印“ BOOM 然后终止。当每个阶段都被拆除时,炸弹就会被拆除。我们要处理的炸弹太多了,所以我们给每个学生一个炸弹去拆除。你们的任务,你们别无选择,只能接受,就是在due date前拆除炸弹。祝你好运,欢迎加入拆弹小组!

wangs29的博客 2494

告别臃肿VS!仅用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境

本文详细介绍了如何仅使用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境,避免安装臃肿的完整VS。通过精准选择组件、配置Qt Creator编译器和优化Kit设置,实现高效、精简的Windows平台Qt开发环境搭建,特别适合追求性能和资源优化的开发者。

weixin_30340617的博客 350

【赛题解析&命令脚本配置】2024年第十七届山东省技能大赛 | 网络系统管理”赛项-模块B:Linux服务部署 & ⑤客户端OutsideCli和InsideCli工作任务

【赛题解析&命令脚本配置】2024年第十七届山东省技能大赛 | 网络系统管理”赛项-模块B:Linux服务部署 & ⑤客户端OutsideCli和InsideCli工作任务 | 【赛题解析&命令脚本配置】2024年第十七届山东省技能大赛 | 网络系统管理”赛项-模块B:Linux服务部署 & ⑤客户端OutsideCli和InsideCli工作任务

君逍遥o 319

CSAPP bomb Lab(Lab2)

CSAPP bomb Lab

Morso的博客 1423

华为OD机试真题2026双机位C卷 Python&JS 实现【明日之星选举】

给定一组选票votes。votes[i]代表第 i 张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan为明日之星,反对 hanmei 称为明日之星。赞成或反对使用逗号(,)分割。 给定一个数组n,表示最后将筛选出赞成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。

MISAYAONE的博客 318

CSAPP实验之Bomb Lab详解

文章目录前言phase 1phase 2phase 3phase 4phase 5phase 6总结和感想 前言 Bomb Lab来自《深入理解计算机系统》(CSAPP)一书的第三章“程序的机器级表示”的配套实验,该实验的目的是通过反汇编可执行程序,来反推出程序执行内容,进而能够正确破解”密码“,解除“炸弹”。 Bomb Lab文件目录如下: ├── bomb ├── bomb.c └── README bomb: 可执行程序,我们需要对其进行反汇编和gdb调试。 bomb.c: bomb的主函数mai

良晨的技术站 2万+

基于STC8G1K08A单片机的EC11旋转编码器控制(江科大同款,代码可直接使用)

本文介绍了STC8G系列单片机与EC11旋转编码器的接口实现方案。硬件方面详细说明了EC11编码器的机械结构、电气特性及与单片机的典型连接电路,包括上拉电阻和消抖设计。软件部分重点阐述了状态检测算法,通过状态机和查找表实现方向判断,采用中断方式检测信号变化,并配合定时器进行软件消抖处理。文章还提供了完整的代码实现,包括GPIO初始化、中断服务函数、状态转换逻辑等关键模块,展示了如何通过串口输出验证旋转计数。最后讨论了抗抖动优化、高低速应用场景等实际问题解决方案。该方案在菜单导航、参数调节等场景中具有实用价值

weixin_74013772的博客 322

tongweb中间件selectApp.jsp存在任意文件上传(含批量验证poc)

tongweb中间件selectApp.jsp存在任意文件上传(含批量验证poc)

weixin_43567873的博客 1985

CSAPP | Lab2-Bomb Lab 深入解析

csapp lab2-Bomb Lab

m0_55763458的博客 3519

自适应滤波-----LMS(Least Mean Square)算法

自适应滤波的意义所在 自适应滤波器解决非平稳的过程,因为实际信号的统计特性可能是非平稳的或者是未知的。 自适应滤波器的特点: 1.没有关于待提取信息的先验统计知识 2.直接利用观测数据依据某种判据在观测过程中不断递归更新 3.最优化 自适应滤波分类: 处理器的结构划分:横向结构、格型结构 重复一次计算自适应需要的数据划分:成批处理法、递归处理法 按调节算法...

heda3的博客 10万+

CSAPP Bomb Lab实验全面解析(包含代码和具体分析)

提升汇编语言逆向分析能力 理解程序控制流与内存管理的底层机制 掌握动态调试(GDB)与静态分析(objdump)结合的技术 培养解决复杂问题的系统性思维

小李独爱秋的博客 2540

Diffusion models代码实战:从零搭建自己的扩散模型

这个系列曾经写过三篇文章专门讲代码,分别从数据集、超参数、loss设计、参数计算、Unet结构、正向过程、逆向过程等部分详细介绍了如何搭建DDPM。Diffusion models领域发展神速,最近半年代表作品有OpenAI的GLIDE、DALL-E 2,Google Brain的ImageGen,海森堡大学的Latent Diffusion。这篇博客针对入门新手讲解一下如何利用已有的资源快速搭建自己的Diffusion models。.........

沉迷单车的追风少年 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

《深入理解计算机系统》(CSAPP)实验二 —— Bomb Lab

  本次实验中的bomb文件中共有7个炸弹问题(6个显式的和1个隐藏的),每条问题只有输入正确的答案才能进入下一题,否则则会触发爆炸。通过阅读bomb文件的汇编代码理解各个问题的运作方式,推出正确的输入答案。隐藏的问题需要通过gdb直接调用解决。   我的编译环境:Ubuntu 16.04,gcc 5.4.0。 准备工作   从官网下载到实验,解压后一共三个文件,具体如下图所示。   readme中没写什么有用的内容,bomb文件是编译完成的文件,bomb.c是本次实验的源码,打开看下,大概浏览了一遍,一

嵌入式与Linux那些事的博客 8350

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: CSAPP Lab 2 Bomb小记二
下一篇: Android Studio 在蓝屏后出现import包标红解决方法
code120302
博客等级 码龄7年 195粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值