我就点了一下授权,为什么 U 被盗了!?实战演示如何把别人的 USDT 盗走!警惕钱包骗授权操作!币圈骗局!

通过实际的例子演示授权被盗的操作,小伙伴在使用钱包的时候,不要轻易授权!!!

概述

  • 账户 A 授权给账户 B 之后,那么账户 B 就可以把账户 A 里面的所有加密货币盗走!
  • 授权的原理有很多人分享了,但是你知道,和亲眼看到被盗的感受是不一样的。我这里演示授权之后,把别人的资产盗走的操作。

为什么需要授权?

  • 智能合约授权是一个比较中性的功能,只是被骗子滥用,导致资产被盗。
  • 其实我们可以举个例子,我想订阅 youku 的会员,假设会员费用是 10 块钱,于是我委托支付宝,每个月支付 10 块钱给 youku。这个就是我们平常使用授权的例子。
  • 其实在智能合约上面也是类似的,我们授权给一个 DEX,让他帮我们把钱包的资金进行交易/或者进行质押获取收益。这个也是涉及到授权的操作。授权之后,Dex 就可以把我们钱包的资金转走。骗子就是通过这个方式,骗你的授权,把你资产盗走的。
  • 如果你授权给一个 Dex,并且这个 Dex 是通过代码审计的,那么授权就没有任何问题。

盗 U 智能合约

这个是部署的 ERC20 代币:
ERC20 代币的 Approve 的方法就是授权的操作!

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract USDT is ERC20 {
    constructor(uint256 initialSupply) ERC20("Tether", "USDT") {
        _mint(msg.sender, initialSupply * (10 ** 18));
    }
}

这个是部署的 MyDex 的智能合约:


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyDex{

    ERC20 public ERC20Token;
    address public owner;
    constructor(address _address){
        ERC20Token = ERC20(_address); // 初始化代币合约地址
        owner=msg.sender;
    }

    modifier onlyOwner(){
        require(msg.sender == owner,"Only owner can transfer!");
        _;
    }

    function transferFrom(address from,address to,uint256 amount) external onlyOwner{
        ERC20Token.transferFrom(from, to, amount);
    }
}

盗 U 操作

  • 我用账号 1 发布了 USDT,然后部署了一个 Dex,那么当账号 2,授权给一个 Dex 之后(被骗授权),那么账号 1 就可以用这个 Dex 就可以把账号 2 的资金盗走!(调用:transferFrom 的方法)

  • 账号 1 就可以随意控制账号 2 里面的 USDT,我是演示用账号 1,把账号 2 的 USDT,转账给账号 3 的!

  • 账号 2 只是授权了,它的资产就不知不觉被盗!!!

我们可以在相应的区块浏览器,取消授权的操作,不过,授权之后,应该是来不及取消,你的资产就会被盗了!

  • 在实际的例子中,骗子做一个网页,你以为点击的是转账的操作,其实是授权!你输入只转账 1 个 USDT,但是它后台代码修改成无限制的授权,这个就是很多小伙伴资产被盗的主要原因。

总结

很多的小伙伴资金被盗,就是通过扫描,跳转到一个网页端,骗子做了一个类似转账的界面,实际上你点击转账它触发的是授权的操作。如果你不注意,点击了确定,那么资产就会被盗!!!

相关视频:https://youtu.be/SJ9ajkuGvN4

以下是我用过的交易所,有需要的小伙伴欢迎使用我的邀请连接来注册,你的支持是我最大的创作动力!