深入理解操作系统实验——bomb lab(作弊方法1)

2023-11-01 04:20

本文主要是介绍深入理解操作系统实验——bomb lab(作弊方法1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、作弊方法1:
实际上这个实验有一个更加有趣的作弊方法,下面是对作弊方法的讲解:
这道题只是给了一个可执行程序,看上去并没有什么可以作弊的情况,非常的安全,我们没有办法通过修改c语言源代码或者汇编语言代码达到直接修改代码的目的,但实际上,我们可以通过hexedit语句对可执行程序进行直接的修改,这样就不用管你的代码是什么,你的密码是什么,你的算法是什么,我直接从函数头跳转到函数尾部,跳过整个函数,这样不管是什么密码都可以通过,下面是具体的操作:
首先还是将整个bomb可执行文件反汇编为汇编语言文件,这样至少我是可以看懂的,才能进行下面的操作。
对于第一个炸弹,通过汇编发现他的汇编代码如上所示,而很明显我们可以修改那个跳转指令,他是74,即je跳转指令,表示只有当相等的时候才能通过,那么我们只要修改为EB,即jmp跳转指令,表示无条件跳转,这样不管我第一个代码输入什么,都可以通过。
在这里插入图片描述
在这里插入图片描述
对于第二个炸弹,通过汇编发现他的汇编代码如上所示,同样我们还是从跳转指令下手,这里有两个跳转,都是74,je跳转,表示只有当相等的时候才能通过,那么我们也同样的修改为EB,jmp无条件跳转指令,这样只要我们输入的数据满足六个元素,不管输入什么都可以通过。
在这里插入图片描述
修改后的汇编代码为:
在这里插入图片描述
对于第三个炸弹,通过汇编发现他的汇编代码如上所示。这个有点复杂,因为第三个炸弹是一个switch选择语句,那么我还是只修改一种情况,我选择了第一个数据为0的时候的数据。首先修改switch的跳转语句为无条件跳转,实际上这个可改可不改,然后修改跳转指令,使不管第二个和第三个是什么都会发生跳转,这样密码就被修改为了“0 无限制 无限制”
在这里插入图片描述
修改后的汇编代码为:
在这里插入图片描述
对于第四个炸弹,通过汇编发现他的汇编代码如上所示。第四个比较麻烦,第一点在于这里递归调用了一个函数,另一点是这里还是隐藏炸弹的入口点。首先发现有五个跳转指令,将第三个74,je相等跳转指令修改为EB,jmp无条件跳转指令,就会直接跳转到原来的比较指令,将原本的75jne不相等跳转指令修改为74,je相等跳转指令,将不会发生跳转来引爆炸弹,然后将最后一个的74,je相等跳转指令修改为EB,75无条件跳转指令,这样输入两个无限制的数据都可以解决。
在这里插入图片描述
在这里插入图片描述
对于第五个炸弹,通过汇编发现他的汇编代码如上所示。这里要输入一个六字符的字符串,所以只要先把第一个判断是否六字符的74,je相等跳转指令修改为EB,jmp无条件跳转指令,然后将75,jne不相等跳转指令修改为74,je相等跳转指令这样就可以避开引爆指令,然后在将最后的一个74,je相等跳转指令修改改为EB,jmp无条件跳转指令,这样就可以跳过整个函数,只要输入任意的字符串就可以。
在这里插入图片描述
在这里插入图片描述
对于第六个炸弹,通过汇编发现他的汇编代码如上所示。这里发现源代码非常的复杂,所以这里仅仅通过修改跳转的方式是很难得,但只要修改跳转地址就可以。这里首先将原本的76 05修改为EB 5A无条件跳转到0x8048eba位置,然后再将0x8048eba位置的EB D6修改为EB 49无条件跳转到函数尾部结束。这样只要输入六个数据就可以通过函数。
在这里插入图片描述
在这里插入图片描述
对于隐藏炸弹,通过汇编发现他的汇编代码如上所示。首先要修改他的入口方式,可以看到他的入口是一个简单的74,je相等跳转指令,只要修改为eb,jmp无条件跳转指令就可以直接进入。然后将秘密炸弹处的76,jbe跳转指令修改为EB,jmp无条件跳转指令,再将74,je相等跳转指令修改为EB,jmp无条件跳转指令,这样不管输入什么,都可以通过函数,最终在第四个位置末尾输入任何一个数据就可以进入秘密炸弹,输入任何都可以通过秘密炸弹。
在这里插入图片描述
在这里插入图片描述
最终结果如图所示:
在这里插入图片描述

这篇关于深入理解操作系统实验——bomb lab(作弊方法1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/320442

相关文章

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi