Xinmin's Blog
AdminRSS
全部AIDeFiSolidity以太坊公链实战区块链行业观察
Admin
RSS

【以太坊】聊聊智能合约的0转账钓鱼攻击

以太坊·2025年3月14日·2 次阅读·约 10 分钟
© 2026·

0转账钓鱼攻击是个啥?

0转账钓鱼攻击(Zero Transfer Phishing Attack)是一种简单却阴险的骗术,虽然技术含量不高,但在币圈屡屡得手,甚至酿成过惊天大案(见下文)。

每次听说这种攻击得逞,连我都忍不住暗想:这黑客咋不是我呢?

先打个生活中的比方:

假设你和好友张三经常通过银行卡转账,时间一长,你的转账记录里就有了张三的卡号(6666...1234...8888)。下次转账时,你凭印象找那个“6666开头、8888结尾”的账号,直接点了确认。可这时,一个恶意的“假张三”用一个超像的卡号(6666...1235...8888)给你转了0元。这笔0元交易混进你的交易记录中,你没多想,下次转账时手快选错了,结果钱全进了假张三的口袋。现实生活中银行会拦住这种乌龙,但在区块链的去中心化世界里,黑客无影无踪,防不胜防。

简单说,0转账钓鱼攻击就是黑客通过发送0金额的转账,把一个长得像你常交易地址的假地址塞进你的钱包交易历史。等你下次转账时,钱包的“最近交易地址”功能一推荐,你没细看就选了,钱就乖乖进了黑客的腰包。为啥这招管用?因为像MetaMask、Trust Wallet这样的钱包都会记录交易历史,还贴心地提供“最近地址”选项,用户图方便一点,结果就被黑客钻了空子。

攻击现场

惊天大案

你以为只是多了条没啥用的记录?错!这是黑客精心埋下的“诱饵”。

一起来看看这场惊天大案:

2024年5月3日,据Web3反诈骗平台Scam Sniffer的监测,一名巨鲸遭遇了相同首尾号地址钓鱼攻击,被钓走 1155 枚 WBTC,价值约 7000 万美元。

受害者的地址:

0x1E227979f0b5BC691a70DEAed2e0F39a6F538FD5

受害者的目标转账地址:

0xd9A1b0B1e1aE382DbDc898Ea68012FfcB2853a91

黑客地址:

0xd9A1C3788D81257612E2581A6ea0aDa244853a91

转账交易:

https://etherscan.io/tx/0x3374abc5a9c766ba709651399b6e6162de97ca986abc23f423a9d893c8f5f570

交易列表:

https://etherscan.io/txs?a=0x1E227979f0b5BC691a70DEAed2e0F39a6F538FD5&p=11

image.png

受害者在etherscan.io/idm上对黑客喊话,说:“你赢了兄弟,你可以留下10%,然后把90%还回来,我们可以当啥事没发生过。我们都清楚7百万刀够你活得很好了,但是7千万刀会让你睡不好的。”

后来有传闻称,黑客良心发现退了90%,但未经证实。😂

事件报道:

https://web3caff.com/zh/archives/92353

https://x.com/realScamSniffer/status/1786374327740543464

攻击三步走

我们一步步拆解这招简单粗暴的套路:

  1. 1. 黑客造假地址黑客生成一个与你常交易地址首尾相似但中间不同的假地址,比如0x6666...1234...8888 vs 0x6666...1235...8888,肉眼很难分辨。

    怎么造这种地址?我自己就这么造过,用for循环不停生成钱包地址,再用正则表达式挑出首尾符合条件的“靓号”(方便记忆,但也隐藏风险),成本低效率高。

  2. 2. 发送0转账黑客用假地址向你的钱包发送0 ETH或0代币的转账。这笔交易不会改变你钱包余额,通常不会引起注意,但会悄悄出现在交易历史里。

  3. 3. 诱导你误选下次你转账时,钱包输入框弹出“最近交易地址”,假地址混在里面。你急着操作,没仔细核对就点了,结果真金白银送给了黑客。

为啥这么“阴”?

  • 0转账没动静:没钱进账,没提示,你根本不会多看一眼。
  • 用户习惯坑人:大家都爱用“最近地址”功能,省时省力,却给了黑客可乘之机。

还原攻击

想知道黑客咋“埋雷”的?我们直接上代码,看看技术细节。

攻击代码示例

针对ETH的0转账:

contract ZeroTransferPhish {
    function plantFakeAddress(address victim) external {
        // 发送0 ETH转账,制造交易记录
        (bool success, ) = victim.call{value: 0}("");
        require(success, "Transfer failed");
    }
}

针对ERC20代币的0转账:

interface IERC20 {
    function transfer(address to, uint256 amount) external returns (bool);
}

contract ZeroTransferPhish {
    function plantFakeAddress(IERC20 token, address victim) external {
        // 发送0代币转账,混进交易历史
        token.transfer(victim, 0);
    }
}

攻击流程

  1. 1. 收集目标黑客在区块链上分析活跃钱包,尤其是高净值用户,锁定目标。
  2. 2. 造假地址生成一个与你常交易地址首尾相似的假地址,比如0x6666...1234...8888 vs 0x6666...1235...8888。
  3. 3. 发送0转账用假地址向你的钱包发送0金额转账,Gas费低到几乎可以忽略,黑客成本极小。
  4. 4. 等待你上钩并转账你下次转账时,钱包推荐“最近交易地址”,假地址混在里面。你没仔细看就选了,钱主动转给了黑客。交易一旦上链,不可逆,想追回都没门。

咋防0转账钓鱼攻击?

0转账攻击不会直接偷你的钱,但能诱导你“亲手送钱”。以下是几招实用防身术,保住你的资产。

1. 转账前必核对地址

  • 逐字检查地址,尤其是前6位和后6位,别被相似地址忽悠。
  • 建个白名单,只用固定的可信收款地址。

2. 关掉“最近交易地址”自动填充

  • 在钱包设置中关闭自动填充功能(如果支持),手动输入或粘贴地址。
  • 用ENS(Ethereum Name Service)这样的人类可读地址(如alice.eth),把复杂地址变成易记名称,出错概率大大降低。

3. 小额转账测试

  • 大额转账前,先发送一笔0.x的交易测试,看看是否能正常收到,避免大额失误。

4. 开启钱包的小额过滤功能

  • 部分钱包支持小额过滤,屏蔽0转账记录,能降低被钓鱼的风险。

5. 定期查交易记录

  • 上Etherscan查看钱包历史,发现可疑的0转账,记下来避开。

6. 清理钱包历史

  • 有些钱包支持手动删除交易记录,定期清理,别让“地雷”有可乘之机。
  • 养成从联系人列表或ENS输入地址的习惯。

7. 用硬件钱包加保险

  • 用Ledger、Trezor这样的硬件钱包,每次转账都得手动确认,黑客再狡猾也没辙。

总结

0转账钓鱼攻击利用交易记录埋‘陷阱’,诱导你选错地址,把钱亲手送给黑客。在区块链世界,地址一错钱就没,转账前不核对,就像不数清楚钞票就给人,损失了可没回头路。

想保住资产,记住这几招:

✅ 转账前逐字核对地址;

✅ 关掉自动填充,手动输入;

✅ 先用小额测试;

✅ 定期查记录,清理隐患;

✅ 用ENS或硬件钱包加保险。



继续阅读

基于全文检索与主题相似度

以太坊2025年3月14日

【以太坊】聊聊智能合约的Permit2钓鱼攻击

说在前面 玩过币的人都知道,ERC20是以太坊上一个常见的代币标准(支持钱包交易交互),里面有个类似开支票的功能——approve授权和transferFrom转账兑现。 如同现实生活中你给人开了一张支票,写上金额,对方拿着支票去银行就能把钱取走。你账户里的钱少了,他的账户里钱多了。 在智能合约里,

以太坊2025年3月15日

【以太坊】聊聊智能合约的时间戳依赖攻击

说在前面 生活中,我们习惯了依赖时间来安排一切。闹钟提醒我们起床,高铁准点发车,考试到点交卷,股票交易精确到毫秒撮合…… 在 Web2 世界里,软件系统同样靠精准的时间戳来自动执行任务,比如定时扣款、会员到期、订单结算,这一切都建立在可信的时间基础上。但到了 Web3 世界里,时间居然能被“调表”!

以太坊2025年3月13日

【以太坊】聊聊智能合约的闪电贷攻击

闪电贷攻击是个啥东东? 先打个生活中的比方: 想象一下你去银行借了一大笔钱,条件是得在离开柜台前还清。你坐在柜台前,拿这钱顺手跟旁边的人做了笔生意,赚了差价,再把钱还给银行,几分钟倒腾下来,口袋里就多了利润(当然这种操作是不现实的,这里只是帮助理解闪电贷——就是速借速还)。 闪电贷(Flash Lo