您好,登录后才能下订单哦!
本篇内容介绍了“类Fomo3D攻击实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
在分析整个事件之前,我们需要对类Fomo3D游戏的规则有一个基本的认识。
Fomo3D游戏最最核心的规则就是最后一个购买的玩家获得最大的利益
其中主要规则有这么几条:
游戏开始有24小时倒计时
每位玩家购买,时间就会延长30s
越早购买的玩家,能获得更多的分红
最后一个购买的玩家获得奖池中48%的eth
其中还有一些细致的规则:
每位玩家购买的是分红权,买的越多,分红权就会越多
每次玩家购买花费的eth会充入奖金池,而之前买过的玩家会获得分红
随着奖池的变化,key的价格会更高
换而言之,就是越早买的玩家优势越大。
最终,资金池里的 ETH 48%分配给获胜者, 2%分配给社区基金会,剩余的 50%按照四种团队模式进行分配。
游戏规则清楚之后,就很容易明白这个游戏吸引人的地方在哪,只要参与的人数够多,有人存在侥幸心理,就会有源源不断的人投入到游戏中。游戏的核心就在于,庄家要保证游戏规则的权威性,而区块链的可信以及不可篡改性,正是完美的匹配了这种模式。
简单来说,这是一个基于区块链可信原则而诞生的游戏,也同样是一场巨大的社会实验。
可,问题是怎么发生的呢?让我们一起来回顾一下事件。
2018年8月22日,以太坊上异常火爆的Fomo3D游戏第一轮正式结束,钱包开始为0xa169的用户最终拿走了这笔约10,469 eth的奖金。
看上去好像没什么问题,但事实真的是这样吗?
在Fomo3D的规则基础上,用户a169在购买到最后一次key之后,游戏的剩余时间延长到了3分钟,在接下来的3分钟内,没有任何交易诞生。这3分钟时间,总共有12个区块被打包。但没有任何一个Fomo3D交易被打包成功。
除此之外,这部分区块数量也极少,而且伴随着数个合约交易失败的例子
这里涉及到最多的就是合约0x18e1B664C6a2E88b93C1b71F61Cbf76a726B7801,该合约在开奖的那段时间连续的失败交易,花费了巨量的手续费。
而且最重要的是,该合约就是上面最后拿到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的交易)都很难被矿工打包进入。这样一来,攻击者就有很高的概率成为最后一个持有key的赢家。
整个攻击流程如下:
Fomo3D倒计时剩下3分钟左右
攻击者购买了最后一个key
攻击者通过提前准备的合约发起大量消耗巨量gas的垃圾交易
3分钟内不断判断自己是不是最后一个key持有者
无人购买,成功获得大奖
“类Fomo3D攻击实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。