个中第一部门 0x00 暗示若当该轮游戏发生的随机数计较功效处于 [0x01, 0x5f] 之间,则玩家得胜;相反,前两位不为 0x00 时暗示若该轮游戏发生的随机数计较功效处于 [0x01, 0x5f] 之外,则玩家得胜。
PeckShield 安详人员在深入逆向阐明 TronWow 合约时发明,TronWow 合约在查抄下注范畴时存在缺陷,答允用户在非页面下注时结构恶意输入。换而言之,一旦用户避开游戏页面,直接挪用游戏合约的下注函数,即可设法绕过合约中的下注范畴查抄条件,实现 100% 胜率以及最高回报倍数(97 倍)。
个中 _betMask 参数被结构为 130971,十六进制为 0x01FF9B。个中前两位 0x01 暗示若该轮游戏发生的随机数计较功效处于 [0x9B, 0xFF] 之外,则玩家得胜。而 0x9B、0xFF 对应的十进制别离为 155、255,则按照合约撰写的胜率百分比计较法则,winRate = 100 - (0xFF - 0x9B) + 1,即便是 1,从而乐成绕过下注范畴查抄函数,并将本次生意业务的嘉奖倍数配置为 97。需要出格强调的是,在页面下注中,嘉奖倍数最高仅为 48.5 倍。
在此生意业务中,参数 _betMask 的值 24321 转换成十六进制为 0x005F01,我们将其分拆为三个字节,别离如下:
总结:对付 TronWow 合约被进攻事件,PeckShield 安详人员阐明发明:TronWow 合约在查抄下注范畴时存在缺陷,答允用户在非页面下注时结构恶意输入,实现 100% 胜率。需要留意的是,该裂痕已在 TronWow 上线的新版本合约中被修复,游戏方增添了对下注范畴的约束查抄。
在 TronWow 合约代码中,函数 placeBet(uint24_betMask,uint256_commit,bytes32_r,bytes32_s) 为下注函数,参数 uint24_betMask 为玩家的下注信息。
游戏随机生成数字范畴为 [1, 100],
下图为进攻者提倡的诸多进攻生意业务之一:
0x5F 为十进制 95;
下面以正常下注生意业务和恶意下注生意业务对该合约裂痕举办说明。
接着,我们将开奖函数 settleBet(uint256_reveal, bytes32_txHash) 的判定游戏输赢部门汇编指令还原成伪代码:
个中正常下注生意业务挪用 placeBet 函数时输入如下:
阅读上述下注函数伪代码可以发明,合约只对玩家下注信息中的胜率百分数举办了查抄,要求其小于便是 95,却未对下注数字做数值限制。故玩家可通过结构下注数字来绕过该查抄。
Over 模式可下注数字为 [6, 99],
据区块链安详公司 PeckShield 安详盾风控平台 DAppShield 监测动静,4 月 10 日 23 点 02 分,黑客向波场竞猜类游戏 TronWow 提倡进攻 1,203 次,共计赢利 2,167,377 个 TRX (约 $57,148 )。PeckShield 安详人员连忙展开阐明发明,黑客每投注 20TRX,即可得到 1,940 个 TRX 作为回报,回报率高达 97 倍。最终,通过此次进攻,黑客共计投注 23,004 个 TRX, 赢利 2,167,377 个 TRX。
如下图所示,当用户在 TronWow 游戏页面中参加游戏,无论选择 Under 模式或 Over 模式,都被限制了下注数字的范畴和胜率。个中
在此,PeckShield 安详人员提醒宽大项目方及生意业务所该当重视区块链世界中的任何安详问题,确保项目方及用户的资产安详靠得住。安详无小事,采纳不发布源代码来抵制黑客进攻的行为,在黑客眼前形同虚设。DApp 开拓者应杜绝荣幸心理,在合约上线前做好须要的安详法子和已知进攻特征查抄,须要时可接洽第三方安详公司举办裂痕排查,制止造成不须要的数字资产损失。
0x01 为十进制 1.
个中:
从此,PeckShield 安详人员进一步深入阐明发明,TronWow 合约在查抄下注范畴时存在缺陷,答允用户在非页面下注时结构恶意输入,,从而实现稳赢的游戏功效。
0x00 为十进制 0;
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。