Author

Topic: Как правильно ставить ловушки в блокчейн&#107 (Read 161 times)

sr. member
Activity: 344
Merit: 250
Обожаю этереумные смарт контракты.
У сайта 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

Обожаю этереумные смарт контракты.
Jump to: