安比(SECBIT)实验室近期发出预警,一种新型蜜罐(诈骗)合约正在泛滥,利用区块链浏览器的相关局限,设置陷阱欺骗游戏参与者,且诈骗目标多为具备一定区块链专业素养的人员。据安比(SECBIT)实验室统计数据显示,同类合约的数量高达48个,其中一个合约部署于 3 天前,已有玩家受骗的合约超过21份,累计骗取金额超过 25 ETH。
前几天,小安比从 p0n1 大神那里听说了一种新型的蜜罐(诈骗)合约,同类蜜罐合约竟有 48 个,而其中近一半的合约已经成功骗取玩家的 ETH,据说连 QSP 团队的安全大神 Martin Derka 也未能幸免。这不禁激发起了小安比浓浓的好奇心。
骗局缩影:安全专家被套路
Martin Derka 所参与的这个名为 QUESTION 的合约,是一款猜答案游戏合约。
合约地址:0xcEA86636608BaCB632DfD1606A0dC1728b625387
合约游戏的规则很简单:
- 问题创建者创建问题并设置答案;
- 玩家通过转入不低于1 ETH 作为手续费来猜答案;
- 猜中者将收获合约中所有的 ETH,猜不中无奖励,手续费不予返还。
合约的巧妙设计会为高阶玩家埋下一些陷阱,让玩家自认为通过Etherscan中的交易数据可以获知答案,然后不声不响地就赚取ETH。而实际上恰恰是螳螂捕蝉、黄雀在后,合约创建者让你边窃喜边发现的答案是错误答案,技术帝们凭借其“机智”最终不仅赚不到合约中的ETH,还会赔光预先缴纳的手续费。
此外,根据QUESTION合约中的特殊权限设置,问题提出者可随时取走合约中的所有ETH。因此,上述玩家参与游戏时支付的ETH能被迅速提取和套利。
作为安比(SECBIT)实验室的资深砖家,接下来小安比将以 QUESTION 合约为例向大家讲解该类蜜罐合约的诈骗细节。
## 巧妙埋坑:游戏合约的设计
从 QUESTION 合约源码看,游戏创建者设置问题和答案,启动游戏,任何人皆可以玩家身份参与游戏,转入不低于1 ETH 的手续费猜答案,猜中者将收获合约中所有的 ETH,猜不中手续费自动打入合约地址。
合约源码中包含了五个接口,启动游戏,玩家猜答案,终止游戏,更新问题以及空的回落函数。
启动游戏
由问题提出者启动游戏(StartGame()
),设置问题和答案,传入的答案以哈希的形式保存在合约中。而游戏启动仅第一次操作有效。
function StartGame(string _question,string _response)
public
payable
{
if(responseHash==0x0)
{
responseHash = keccak256(_response);
question = _question;
questionSender = msg.sender;
}
}