csapp lab2 bomb 二进制炸弹《深入理解计算机系统》

深入理解计算机系统-bomblab详解 目录Phase 1Phase 2Phase 3Phase 4Phase 5Phase 6Secret Phase几条野路子 下载实验用的文件们戳这里 bomblab的背景很有趣。Dr. Evil(evil得可爱死了!!!)把“二进制炸弹”装在了教室的机子里。想要拆掉炸弹,你必须反编译“炸弹”,通过其中的汇编指令推测出可以拆掉炸弹的phrase。 好啦,我们看一看下载的文件夹里都有什么。bomb就是要我们去拆的“炸弹”;bomb.c是炸弹的源代码,但是最为关键的部分被删掉了,只保留了骨架。gdbnotes-x 阅读详情

bomb炸弹实验

首先对bomb这个文件进行反汇编,得到一个1000+的汇编程序,看的头大。


phase_1:

0000000000400ef0 <phase_1>:
  400ef0:	48 83 ec 08          	sub    $0x8,%rsp
  400ef4:	be 18 1b 40 00       	mov    $0x401b18,%esi
  400ef9:	e8 10 04 00 00       	callq  40130e <strings_not_equal>
  400efe:	85 c0                	test   %eax,%eax
  400f00:	74 05                	je     400f07 <phase_1+0x17>
  400f02:	e8 dc 07 00 00       	callq  4016e3 <explode_bomb>
  400f07:	48 83 c4 08          	add    $0x8,%rsp
  400f0b:	c3                   	retq   


这个是炸弹一的汇编程序。可以看到,在程序里面,首先注意到了:

 callq  40130e <strings_not_equal>

strings_not_equal这个函数应该就是对字符串是否相等进行了判断,所以要找到原来系统设定的字符串。

这是看到前面那句:mov    $0x401b18,%esi

感觉有问题,后来去查了一下,发现esi这个寄存器主要进行串操作,嗯,那字符串应该藏在0x401b18里面了。

用gdb调试,

果然在哪个地址里面。

phase_2:



 400f0c:	55                   	push   %rbp
  400f0d:	53                   	push   %rbx
  400f0e:	48 83 ec 28          	sub    $0x28,%rsp
  400f12:	48 89 e6             	mov    %rsp,%rsi
  400f15:	e8 eb 07 00 00       	callq  401705 <read_six_numbers>
  400f1a:	83 3c 24 01          	cmpl   $0x1,(%rsp)
  400f1e:	74 25                	je     400f45 <phase_2+0x39>
  400f20:	e8 be 07 00 00       	callq  4016e3 <explode_bomb>
  400f25:	eb 1e                	jmp    400f45 <phase_2+0x39>
  400f27:	83 c3 01             	add    $0x1,%ebx
  400f2a:	89 d8                	mov    %ebx,%eax
  400f2c:	0f af 45 fc          	imul   -0x4(%rbp),%eax
  400f30:	39 45 00             	cmp    %eax,0x0(%rbp)
  400f33:	74 05                	je     400f3a <phase_2+0x2e>
  400f35:	e8 a9 07 00 00       	callq  4016e3 <explode_bomb>
  400f3a:	48 83 c5 04          	add    $0x4,%rbp
  400f3e:	83 fb 06             	cmp    $0x6,%ebx
  400f41:	75 e4                	jne    400f27 <phase_2+0x1b>
  400f43:	eb 0c                	jmp    400f51 <phase_2+0x45>
  400f45:	48 8d 6c 24 04       	lea    0x4(%rsp),%rbp
  400f4a:	bb 01 00 00 00       	mov    $0x1,%ebx
  400f4f:	eb d6                	jmp    400f27 <phase_2+0x1b>
  400f51:	48 83 c4 28          	add    $0x28,%rsp
  400f55:	5b                   	pop    %rbx
  400f56:	5d                   	pop    %rbp
  400f57:	c3                   	retq   


这个首先看到代码:

callq 401705<read_six_numbers>

应该是要输入6个数字。

然后接下来按照下面的几行的步骤一步一步看下去,可以知道ebx这个寄存器是一个计数器,rbp这个寄存器用来指向当前比较的数字的地址,经过分析,每个数字的计算方法是:%ebx*(-4(%rbp)).即当前的数字的编号(1,2,3,4,5,6,第几个数字就是第几号)和上一个数字的乘积,第一个数字为1.

所以最后6个数字就是:1 2 6 24 120 720

phase_3:

 400f58:	48 83 ec 18          	sub    $0x18,%rsp
  400f5c:	4c 8d 44 24 08       	lea    0x8(%rsp),%
计算机系统实验-Bomblab(含隐藏关卡) 这个实验一共有七个题目,其中前三题难度较低,从第四题开始难度就逐渐提升,因为每个人的炸弹都不一样,但是基本的解题方法是一样的,在涉及到递归和循环的部分时会比较绕,部分汇编代码也比较难看懂,建议在看不下去的时候先看看总结,可以知道代码的作用是什么,这样会比较好推。同时由于注释较多,我在上传时没有认真校对可以看到文件夹中生成了汇编文件bomb.asm,接下来在汇编文件中可以找到对于炸弹的代码部分,逐一分析每个炸弹。本实验一共七个题目,考察了多个知识点其中第一题较简单,考察了查看地址内容。 阅读详情

相关推荐

CSAPP 二进制炸弹 binary bomb lab 4 第四关 ——深入理解计算机系统

Phase_4 phase_4汇编代码: 000000000040100c <phase_4>: 40100c: 48 83 ec 18 sub $0x18,%rsp #rsp-=0x18 401010: 48 8d 4c 24 0c lea 0xc(%rsp),%rcx #rcx=rsp+0xc 401015: 48 8d 54 24 08 lea 0x8(%rsp),%rdx #rdx=rsp+

Eternitykc的博客 1844

CSAPP实验bomb炸弹破解

CSAPP实验bomb炸弹实验,这个实验总体蛮有趣的。里面有详细的代码、破解过程和报告。

CSAPP深入理解计算机系统》实战指南:从理论到Lab的跨越

本文是《深入理解计算机系统》(CSAPP)的实战指南,详细介绍了从理论到实验的全过程。通过Linux环境配置、工具链解析和Lab实战(如Bomb Lab、Cache Lab等),帮助程序员深入理解计算机系统底层原理,提升系统级编程能力。特别适合C语言和Linux开发者学习。

h9j8k7l6m5n的博客 708

CSAPP--BOMBLAB实验

本实验要求你使用课程所学知识拆除“binary bombs”,增强对程序的机器级表示、汇编语言、调试器和逆向工程等方面原理与技能的掌握。一个“binary bombs”(二进制炸弹,下文将简称为炸弹)是一个Linux可执行程序,包含了6个阶段(或层次、关卡)。炸弹运行的每个阶段要求你输入一个特定字符串,你的输入符合程序预期的输入,该阶段的炸弹就被拆除引信即解除了,否则炸弹“爆炸”打印输出 "BOOM!!!"。实验的目标是拆除尽可能多的炸弹层次。

qq_53336526的博客 1万+

二进制炸弹bomblab-第一关-保姆级教程

BombLab是由CMU(卡内基梅隆大学)推出的。CMU是美国的一所著名私立研究型大学,位于宾夕法尼亚州的匹兹堡市。BombLab是计算机科学领域的一个教育项目,旨在帮助学生学习和理解计算机系统安全和二进制漏洞的概念。该项目通常用于计算机科学相关的课程和实验室,让学生通过解决各种二进制炸弹Bomb)的任务来加深对计算机系统的理解。​ 现今已有多个版本。本文版本为 JMU 22级 ”软件导论“ 课程 实验作业 32位版本。​ “二进制炸弹”是作为目标代码文件提供给学生的程序。

M34_625的博客 6298

CSAPPBombLab 详细解析

Bomb Lab来自《深入理解计算机系统》(CSAPP)一书的第三章的配套实验,该实验的目的是通过反汇编可执行程序,来反推出程序执行内容,进而能够正确破解”密码“,解除“炸弹”。 本实验共有6个phase,对于每个phase,你需要输入一段字符串,然后让代码中explode_bomb函数不执行,这样就不会boom!

Here is prician 1万+

CSAPP 二进制炸弹 binary bomb lab 2 第二关 ——深入理解计算机系统

CSAPP bomb lab2 1.phase_2主函数: *在分配了40内存空间并把rsp的值传入第二参数* 0000000000400efc <phase_2>: 400efc: 55 push %rbp # push rbp 400efd: 53 push %rbx # push rbx 400efe: 48 83 ec 28 sub $0x28,%rsp

Eternitykc的博客 1518

CSAPP Lab2Bomb Lab

目录前言一.实验总说明 前言 该实验是《深入理解计算机系统》(英文缩写CSAPP)课程附带实验——Lab2Bomb 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 LabLab2

CSAPP bomb Lab

Morso的博客 1409

CSAPP 二进制炸弹 binary bomb lab6 第六关 ——深入理解计算机系统

00000000004010f4 <phase_6>: // arg1=input(input是从外部传入的字符串) 4010f4: 41 56 push %r14 4010f6: 41 55 push %r13 4010f8: 41 54 push %r12 4010fa: 55 push %rbp 4010fb: 53

Eternitykc的博客 1874

CSAPP 二进制炸弹 binary bomb lab 5 第五关 ——深入理解计算机系统

一、Phase_5反汇编及分析 0000000000401062 <phase_5>: // input in rdi 401062: 53 push %rbx 401063: 48 83 ec 20 sub $0x20,%rsp # 分配32空间 401067: 48 89 fb mov %rdi,%rbx 40106a: 64 48 8b 04 25 28 0

Eternitykc的博客 1680

深入理解计算机系统csappbomb Lab 实验3

文章目录简介预备知识gdb调试命令objdump命令AT&T指令实验步骤phase_1phase_2phase_3phase_4phase_5phase_6secret_phase参考文章 简介 每个炸弹阶段考察了机器级程序语言的一个不同方面,难度逐级递增: 阶段1:字符串比较 阶段2:循环 阶段3:条件/分支 阶段4:递归调用和栈 阶段5:指针 阶段6:链表/指针/结构 另外还有一个隐藏阶段,只有当你在第4阶段的解后附加一特定字符串后才会出现。 为完成二进制炸弹拆除任务,你需要使用gdb调试器

m0_52427832的博客 5383

CSAPP 二进制炸弹 binary bomb lab 1 第一关 ——深入理解计算机系统

CSAPP bomb lab1 Phase_1 1.phase_1主函数: 0000000000400ee0 <phase_1>: 400ee0: 48 83 ec 08 sub $0x8,%rsp 400ee4: be 00 24 40 00 mov $0x402400,%esi 400ee9: e8 4a 04 00 00 callq 401338 <strings_not_equal> #call一个比较

Eternitykc的博客 1357

CSAPPBombLab

通过对主函数的观察发现里面有六个炸弹函数,先是获得输入input = read_line(); 接着运行 phase_1(input); 判断是否是正确答案,如果是正确答案,调用phase_defused(); 来获取接触炸弹的方式 输入"gdb -q bomb"进行调试 目录 一、phase_1 二、phase_2 三、phase_3 四、phase_4 五、phase_5 六、...

lilian的博客 2万+

CSAPP 二进制炸弹 binary bomb lab 3 第三关 ——深入理解计算机系统

CSAPP bomb lab3 Phase_3 0000000000400f43 <phase_3>: 400f43: 48 83 ec 18 sub $0x18,%rsp 400f47: 48 8d 4c 24 0c lea 0xc(%rsp),%rcx 400f4c: 48 8d 54 24 08 lea 0x8(%rsp),%rdx 400f51: be cf 25 40 00 mov $0x40

Eternitykc的博客 1628

深入理解计算机系统csapp第3版实验汇总

收录自己在2021年~2022年写的《深入理解计算机系统》官方的8大实验+学校的linkLab实验解析+8大实验的文档翻译。

达的程序员日记 8599

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

这篇博文深入探讨了CSAPP(Computer Systems: A Programmer's Perspective)课程中的BombLab实验,着重解密了其中的Phase_1,并提供了实战经验。通过分析汇编语言、逆向工程等关键概念,揭示了计算机系统底层原理的奥秘。文章深度剖析了BombLab实验的挑战性,引导读者逐步理解并攻克实验阶段,为学习者提供了一场真实而深刻的计算机科学之旅。

朝花夕拾 9684

csapp炸弹实验_bomb_lab详解

csapp炸弹实验 汇编逆向

aqwca的博客 2042
上一篇: Search in Rotated Sorted Array
下一篇: gdb 命令使用
fang92
博客等级 码龄12年 17粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值