深入理解操作系统实验——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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_40851744/article/details/103221603
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/320442

相关文章

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口