类Fomo3D攻击实例分析

发布时间:2022-01-18 10:34:02 作者:iii
来源:亿速云 阅读:91

本篇内容介绍了“类Fomo3D攻击实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

类Fomo3D

在分析整个事件之前,我们需要对类Fomo3D游戏的规则有一个基本的认识。

Fomo3D游戏最最核心的规则就是最后一个购买的玩家获得最大的利益

其中主要规则有这么几条:

其中还有一些细致的规则:

换而言之,就是越早买的玩家优势越大。

最终,资金池里的 ETH 48%分配给获胜者, 2%分配给社区基金会,剩余的 50%按照四种团队模式进行分配。

游戏规则清楚之后,就很容易明白这个游戏吸引人的地方在哪,只要参与的人数够多,有人存在侥幸心理,就会有源源不断的人投入到游戏中。游戏的核心就在于,庄家要保证游戏规则的权威性,而区块链的可信以及不可篡改性,正是完美的匹配了这种模式。

简单来说,这是一个基于区块链可信原则而诞生的游戏,也同样是一场巨大的社会实验。

可,问题是怎么发生的呢?让我们一起来回顾一下事件。

事件回顾

2018年8月22日,以太坊上异常火爆的Fomo3D游戏第一轮正式结束,钱包开始为0xa169的用户最终拿走了这笔约10,469 eth的奖金。

类Fomo3D攻击实例分析

看上去好像没什么问题,但事实真的是这样吗?

在Fomo3D的规则基础上,用户a169在购买到最后一次key之后,游戏的剩余时间延长到了3分钟,在接下来的3分钟内,没有任何交易诞生。这3分钟时间,总共有12个区块被打包。但没有任何一个Fomo3D交易被打包成功。

类Fomo3D攻击实例分析

除此之外,这部分区块数量也极少,而且伴随着数个合约交易失败的例子

类Fomo3D攻击实例分析

这里涉及到最多的就是合约0x18e1B664C6a2E88b93C1b71F61Cbf76a726B7801,该合约在开奖的那段时间连续的失败交易,花费了巨量的手续费。

而且最重要的是,该合约就是上面最后拿到Fomo3D大奖的用户所创建的

类Fomo3D攻击实例分析

在这期间的每个区块中,都有这个合约发起的巨额eth手续费的请求。

攻击用户通过这种方式,阻塞了其他游戏者购买的交易,最后成功拿到了大奖。

那么为什么呢?

事件原理

在解释事件发生原理之前,我们需要先了解一下关于区块链底层的知识。

以太坊约14s左右会被挖出一个区块,一个区块中会打包交易,只有被打包的交易才会在链上永不可篡改。

所以为了奖励挖出区块的矿工,区块链上的每一笔交易都会消耗gas,这部分钱用于奖励矿工,而矿工会优先挑选gas消耗比较大的交易进行打包以便获得更大的利益,目前,一个区块的gas上限一般为8000000。

而对于每一笔交易来说,交易发起者也可以定义gas limit,如果交易消耗的gas总值超过gas limit,该交易就会失败,而大部分交易,会在交易失败时回滚。

为了让交易不回滚,攻击者还使用了一个特殊的指令assert(),这是一个类似于require的函数,他和require唯一的区别就是,当条件不满足时,assret会耗光所有的gas。原理是因为在EVM底层的执行过程中,assret对应一个未定义过的操作符0xfe,EVM返回invalid opcode error,并报错结束。

而攻击者这里所做的事情呢,就是在确定自己是最后一个key的持有者时,发起超大gasprice的交易,如图所示:

类Fomo3D攻击实例分析

当攻击者不断的发起高手续费的交易时,矿工会优先挑选这些高花费的交易打包,这段时间内,其他交易(包括所有以太坊链上发起的交易、Fomo3D的交易)都很难被矿工打包进入。这样一来,攻击者就有很高的概率成为最后一个持有key的赢家。

整个攻击流程如下:

“类Fomo3D攻击实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. python新式类和经典类的区别实例分析
  2. java中object类实例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

fomo3d

上一篇:推荐系统的API接口是什么

下一篇:Po.et的三层架构是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》