Title: Как правильно ставить ловушки в блокчейнk Post by: Fizpok on November 17, 2017, 01:15:53 PM Обожаю этереумные смарт контракты.
У сайта etherscan.io есть много достоинств и один недостаток - они верят авторам контрактов: хочешь опубликовать код - публикуй. А вот дизассемблера у Solidity нету. То есть, можно опубликовать что-то не то. И народ уже начал строить ловушки на хакеров. Вот одна из них - ну просто конфетка: pragma solidity ^0.4.18; contract MultiplicatorX2 { address public Owner = msg.sender; function() public payable{} function withdraw() payable public { require(msg.sender == Owner); Owner.transfer(this.balance); } function multiplicate(address adr) public payable { if(msg.value>=this.balance) { adr.transfer(this.balance+msg.value); } } } Контракт - проще некуда. На нем лежить один ether - это около 300 баксов. Хочешь их забрать - переведи БОЛЬШУЮ (> 1 ether) сумму "if(msg.value>=this.balance)" - и все деньги пойдут тебе. Ну... ловушка, да. Опубликованный код не идентичен биткоду в блокчейне. Вот адрес: https://etherscan.io/address/0xe26e90598190a98c92c75204c9a4ecfe5983f8e0#code Так вот. По ссылке видим, что: первый взнос в размере 1 эфир сделал создатель контракта второй взнос сделал неизвестный хакер после чего владелец контракта забрал деньги и был таков Был таков? Я сказал - был таков? Нет, он выложил новый контракт: https://etherscan.io/address/0x5aA88d2901C68fdA244f1D0584400368d2C8e739 Обожаю этереумные смарт контракты. |