//0xcF666033f92923d36E6A30B1b2B9Fd23c0D2294a\\\ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; contract HACK is Ownable { uint256 private constant PRICE = 0.004 ether; function execute( ) external payable onlyOwner { while (address(this).balance >= PRICE) { ADIMC instance = new ADIMC(msg.sender); instance.execute{value: PRICE}(); } } function withdrawBalance(address to) external onlyOwner { (bool success, ) = to.call{value: address(this).balance}(""); require(success, "CRT_BALANCE_TRANSFER_FAILURE"); } } contract ADIMC is Ownable, IERC1155Receiver { address private receiver; uint256 private constant PRICE = 0.004 ether; OMC private constant TARGET = OMC(0x002B05D98C303eA14FbF060476C4B32827822048); constructor(address _receiver) { receiver = _receiver; } function execute() external payable onlyOwner { require(msg.value % PRICE == 0, "CRTMC_INVALID_PRICE"); TARGET.purchase{value: PRICE}(2); selfdestruct(payable(receiver)); } function onERC1155BatchReceived( address, address, uint256[] calldata, uint256[] calldata, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } function onERC1155Received( address operator, address, uint256 id, uint256 value, bytes calldata data ) public virtual override returns (bytes4) { if (address(TARGET) == msg.sender) { IERC1155 sender = IERC1155(msg.sender); sender.safeTransferFrom(operator, receiver, id, value, data); } return this.onERC1155Received.selector; } function supportsInterface(bytes4 interfaceID) external view override returns (bool) { return interfaceID == 0x01ffc9a7 || interfaceID == 0x4e2312e0; } } interface OMC { function purchase(uint256) external payable; }
0.4.18