EOSDICE随机数被攻破:区块链游戏需要开源吗

当前位置:首页 > 币圈百科 > EOSDICE随机数被攻破:区块链游戏需要开源吗

EOSDICE随机数被攻破:区块链游戏需要开源吗

2023-01-20币圈百科224

1蓑衣网小编2022

今天醒来看到EOSDICE随机数居然坏了?

之前看过代码,觉得挺安全的。看来我还是太笨了

随机数代码如下(来自Github)

uint 8 _ random(account _ name name name,uint 64 _ tgame _ ID){ asset pool _ EOS=EOS IO:token(n)。automixd=tapos _ block _ prefix()* tapos _ block _ num()name game _ id-current _ time()pool _ EOS . amount;const char * mixed char=reinterpret _ cast(mixd);校验和256结果;sha256((char*)mixedChar,sizeof(mixedChar),result);uint 64 _ trandom _ num=*(uint 64 _ t *)(result . hash[0])*(uint 64 _ t *)(result . hash[8])*(uint 64 _ t *)(result . hash[16])*(uint 64 _ t *)(result . hash[24]);return(uint8_t)(random_num0 1);}

你可以看到生成随机数有几个特别的地方

game_id,是增量的。可以得到account_name,也就是玩家的用户名,可以得到pool_eos,也就是当前合约的余额。如果短时间没人玩,Taposblockprefix taposblocknum,可以得到一个固定值,就是块里面的值。如果我用契约攻击,可以得到当前时间戳current_time(契约使用延迟事务)

我看到这个契约的时候其实也想过怎么攻击,但是发现变量很多,应该很难。攻击契约需要满足以下条件

。谁都不需要短时间玩,否则gameid和pooleos都会发生变化,导致你的攻击失败。你一定要把攻击契约和结果的时间控制在一个区块内,不然我一直以为taposblockprefix taposblocknum这两个数字变之前是我不能攻击的时间,因为契约占用了未来的时间(其实如果发现eos延迟契约在运行,后面加上时间就好了)。如果你想明白这一点,也许我就是那个发财的人.

我写了一份模拟攻击合同。不知道是不是因为当地检测的原因。taposblockprefix taposblocknum一直配不上

其实我是想直接从合同里拿到他的game_id。但是它没有成功.

Void charity:hi(uint 64 _ tgame _ id){ asset pool _ EOS=EOS IO:token(n(EOS IO。Token))。Get _ balance (n (EOS Bocai222),symbol _ type (S (4,EOS)。pool _ eos.amount=9985uint 64 _ TT=当前时间();t=1000000automixd=tapos _ block _ prefix()* tapos _ block _ num()_ self game _ id-t pool _ EOS . amount;const char * mixed char=reinterpret _ cast(mixd);校验和256结果;sha256((char*)mixedChar,sizeof(mixedChar),result);uint 64 _ trandom _ num=*(uint 64 _ t *)(result . hash[0])*(uint 64 _ t *)(result . hash[8])*(uint 64 _ t *)(result . hash[16])*(uint 64 _ t *)(result . hash[24]);print('random'random_num0 1);//return(uint 8 _ t)(random _ num % 100 1);资产支出=资产(10000,S(4,EOS));action(permission_level{_self,N(active)},N(eosio.token),N(transfer),std:make_tuple(_self,N(eosbocai2222),payout,std:string('dice-rrr-50-'))。send();}

测试截图

蓑衣网小编20222

你可以看到除了两个不一样,其他都一样。

taposblocknum每次应为1。Taposblockpatch不知道生成规则,但是如果它在一个块中,我应该能够得到相同的。

事件回顾

根据政府给出的账号,找到了黑客攻击的截图

345

不知道黑客代码怎么写的?他现在改了合同…把钱转到交易所

(希望可以开源,这样其他骰子被攻击就不会那么惨了)

蓑衣网小编20226好像公告发的比较早,不知道自动检测功能能不能叫醒人(哈哈哈)

总结和反思

[ B:因为开源透明代码是可见的,所以比较公平。你最近在玩什么?B:菠菜上B:EOS A:是开源的吗?b:没有

我一直觉得区块链合约一定要开源,不然和别人有什么区别?7

个人觉得我为什么会玩这个游戏?是因为这个游戏是开源的,符合我理想中的区块链游戏,不会发生在我身上.

我以为他比较大,可以在整个社区起到带头作用,告诉大家开源合同没问题,区块链游戏只需要开源!

不过还好损失不大。

最后借一张老猫的图

本文由专栏作家高进上传发布。未经允许,请勿转载。

本文首发知乎专栏【区块链发展指北】

EOSDICE随机数被攻破:区块链游戏需要开源吗 | 分享给朋友: