Capture the ether-Guess the number

problem link

pragma solidity ^0.4.21;
 
contract GuessTheNumberChallenge {
    uint8 answer = 42;
 
    function GuessTheNumberChallenge() public payable {
        require(msg.value == 1 ether);
    }
 
    function isComplete() public view returns (bool) {
        return address(this).balance == 0;
    }
 
    function guess(uint8 n) public payable {
        require(msg.value == 1 ether);
 
        if (n == answer) {
            msg.sender.transfer(2 ether);
        }
    }
}

guess를 호출하여 숫자를 맞추어 balance를 0으로 만들라.

풀이

uint8 answer = 42; 로 answer가 코드에 나타나 있다. 코드가 공개되어 있으며, 설령 등록되지 않았더라도 바이트 코드를 리버싱하여 값을 얻을 수 있다. 파라미터를 42로 넣으면 풀린다.


tags: writeup, blockchain, solidity, smart contract