CSAPP Lab2 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 阅读详情

实验概述

这是一个非常有趣的实验,实验以通关(phase)的形式来呈现汇编语言学习的重点与难点,并且一环扣一环,除了必须要经过的六个phase外,还有一个secret phase,接下来我们看一下如何破解这些phase。

实验过程

首先,输入命令objdump -d bomb > bomb_assembly.S,得到bomb_assembly.s反汇编文件。
在
之后在终端用gdb对bomb.c进行调试。
在这里插入图片描述

phase 1破解

首先给出phase 1的反汇编代码:
在这里插入图片描述
347: 压栈
348:将0x402400存入%esi // gdb调试,查看该地址,发现其存储一条字符串。
在这里插入图片描述
349:调用strings_not_equal函数,根据函数我们知道要传入参数(r12),该参数就是输入的字符串,%rsi中给定的字符串存入%rbp中,%r12中的字符串存入%eax中,接下来比较字符串,将比较结果存入%eax中。
350:测试strings_not_equal的结果
351:若输入与给定一致,成功跳出函数
352:若不一致,炸弹爆炸!
结果:
在这里插入图片描述
phase_1成功破解!

phase 2 破解

首先给出phase 2的反汇编代码:
在这里插入图片描述
首先设置断点
在这里插入图片描述
接着执行程序
在这里插入图片描述
phase_2提出问题:How about the next one?
分析汇编:
357: 压栈 %rbp
358:压栈 %rbx
359:压栈 %rsp
360: 将%rsp的值存入%rsi
361:调用read_six_numbers函数
在这里插入图片描述
分析函数可知,栈顶指针下移24个字节,猜想在栈中存储了六个参数,之后我们看到给%esi赋值0x4025c3,我们猜想这个值与地址或字符串存储有关。
在这里插入图片描述
查看地址,没有什么特殊性,接下来我们查看是否与字符串有关。
在这里插入图片描述
结果发现正好验证了我们之前的猜想:输入六个数字。接着调用scanf函数,并将%eax中的值与5进行比较,大于5则成功跳出该函数,结合前面分析,我们猜想%eax中存储的是输入数字的个数,只有输入的数字为6个后phase_2才能继续执行。
362-364:将第一个参数与与1比较,等于1则成功跳转。
说明输入第一个数必须为1
在这里插入图片描述
%rbx存储第二个参数的地址
%rbp存储某个数的地址
跳转到400f17处:
在这里插入图片描述
%eax存储第一个参数2
比较第一个参数
2与第二个参数的值,相等则成功跳转到400f25(不会bomb)
说明后一个数必须是前一个数的2倍
%rbx存储第三个参数的地址
当第三个参数不等于某个数时,继续执行以上的操作直到%rbx与%rbp中的地址值相等
即%rbx存储的是0x18(%rsp),结合前面read_six_numbers函数压栈分析,当第六个数输入完毕时,整个phase_2成功退出。
由以上分析知,输入的数值为:
1 2 4 8 16 32

在这里插入图片描述
phase_2成功破解!

phase 3 破解

给出phase 3的反汇编代码:
在这里插入图片描述在这里插入图片描述
设置断点
在这里插入图片描述
执行程序
在这里插入图片描述
分析汇编:
384:压栈
385-386:参数入栈(%rdx,%rcx)
387:查看0x4025cf:
在这里插入图片描述
输入两个数字
388-394:%eax中的值要大于1,即输入的数字数量要为2
%rdx中的值要小于等于7,即输入的第一个参数值小于等于7(且为无符号数)
则取值范围是0-7
395:将%rdx中的数放入%eax中
396:进入跳转表。查看跳转表的表项:(%rdx代表第xx项)
第0项:0x400f7c处:%eax的值为207,跳转到比较阶段
在这里插入图片描述
第1项:0x400fb9处:%eax的值为311,进入比较阶段
在这里插入图片描述
第2项:0x400f83处:%eax的值为707,进入比较阶段
在这里插入图片描述
第3项:0x400f8a处:%eax的值为512,进入比较阶段
在这里插入图片描述
在这里插入图片描述
第4项:0x400f91处:%eax的值为389,进入比较阶段
在这里插入图片描述
第5项:0x400f98处:%eax的值为206,进入比较阶段
在这里插入图片描述
第6项:0x400f9f处:%eax的值为682,进入比较阶段
在这里插入图片描述
第7项:0x400fa6处:%eax的值为327,进入比较阶段
在这里插入图片描述
比较阶段:比较%eax和%rcx中的值,相等则成功跳出phase_3,否则bomb。
在这里插入图片描述
由分析知,输入两个数,第一个数字代表的表项的值与第二个数字相等时phase_3成功。
则可以输入的数对值为:
0 207
1 311
2 707
3 512
4 389
5 206
6 682
7 327
举两个例子:
在这里插入图片描述
在这里插入图片描述

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

相关推荐

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

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

syq1207的博客 2万+

CSAPP BOMB LAB part3

bomb.s phase_4的代码:格式:40102e行,比较0x8+rsp的值和0xe, 需要让0x8+rsp小于0xe, 然后跳转到40103a,func函数根据bomb.s 转化为c代码:这个直接参考了知乎网友的翻译,func4的返回值等于0, 跳转到40105d。

weixin_43876597的博客 1036

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 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万+

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

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

小雨的博客 5896

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 | Lab2-Bomb Lab 深入解析

csapp lab2-Bomb Lab

m0_55763458的博客 3519

堆栈图解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

本篇博客是《深入理解计算机系统》实验记录的第二篇,也是非常有名的炸弹实验。首先吐槽一下学校的这个实验代码不更新的问题,教材和上课讲授的均是x86-64位汇编语言,结果实验给的还是第二版配套的32位汇编语言,这两者之间有不少的差别,为此还查阅了一些关于32位汇编的资料自己学习(例如32位的参数传递规则和64位不同),这无疑增加了学习成本。 接下来进入正题,我领取的代码包是第19号,即bomb19。后来发现不同人领取的代码包实验题目虽不同,但解决思路大体相同,答案也是不一样的。不知为何,我感觉我的实验包好像难度

zheyuan的博客 2133

CSAPP lab2 实验指导说明

CSAPP lab2 实验指导说明 供大家做实验用

CSAPP Lab2 bomblab二进制炸弹

CSAPP Lab2 bomblab二进制炸弹 拆炸弹实验源代码 深入理解计算机系统课程实验二资料。程序设计与计算机系统课程。

CSAPP Lab2 BombLab流程记录

底层CS鼠鼠被Bomblab狠狠拿下

m0_50952266的博客 1451

ics lab2-bomblab

《深入了解计算机系统》lab2-bomblab 利用assembly code破解bomb文件以拆除bomb文件中的炸弹,使用的工具为gdb。

CSAPP | Lab2-Bomb Lab详细解析

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

wangs29的博客 2494

CSAPPLAB2实验报告

CSAPP位运算的实验报告,详细讲解了算法思想与思考过程。

CSAPP 六个重要实验 lab2 实验材料

CSAPP 六个重要实验 lab2 实验材料

CSAPP bomb Lab(Lab2)

CSAPP bomb Lab

Morso的博客 1423

多机器人协同:水下机器人集群的分布式控制与ROS仿真实践

本文探讨了多自主水下机器人(AUV)集群的分布式控制方法,重点分析了欠驱动6自由度AUV模型的反馈线性化技术。通过ROS/Gazebo仿真平台,详细介绍了系统架构设计、通信延迟补偿策略及环境扰动应对方案,为水下协同作业提供实用参考。

jupi8的博客 688

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万+

ZYNQ出现问题及解决办法汇总(一直更新)

问题目录使用软件及开发板版本一,vitis在build project时卡住。二,Could not find FPGA device on the board for connection 'Local'三,FPGA configuration failed:DONE PIN is not high四,Could not find ARM device on the board for connection 'Local' 使用软件及开发板版本 开发板:MZ7XA-7020 软件:vitis2020.2(

qq_45057368的博客 1万+

基于YOLOv12的牙齿识别与计数系统:从理论到完整实现

本文详细介绍了一种基于YOLOv12深度学习模型的牙齿识别与计数系统。该系统能够在口腔X光片中准确识别和计数牙齿,并提供了用户友好的UI界面。文章涵盖了数据预处理、模型训练、性能优化以及完整系统实现的各个环节,并提供了可复现的代码和数据集参考。整个系统包含三个主要模块:数据预处理模块YOLOv12模型训练模块UI界面展示模块。

YOLO 178
下一篇: CSAPP Lab 2 Bomb小记二
code120302
博客等级 码龄7年 195粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值