opang

Posted on Aug 24, 2022Read on Mirror.xyz

链上投毒——如何发假币每天收割10000U

背景

几年来ERC20标准的假币圈泛滥教程,首先就是发币币资金和窗帘极低,按照网上搜索币220操作,大部分玩家圈出的ERC,都是在10分钟之内发币的的的,与现场中的货币假币相比,在币圈中几乎毫无意义的造作与制造自己的捧场。真币傻傻分下面,用户极易被骗。

而就在过去,我发现了一个假币的行为引发了用户的注意,于是分析了他对某发假币的发现,职业发行的全过程,发现了一个假币。

那个假狗的这个假币,名叫LayerZero,是2022-08-20 9:30(UTC)以下分析币上线uniswap的土狗币,收割用户的已经很详细了。

时间线

代币创建者行为时间线

收割验证

LayerZero 整体币价走势

(以下交易1、2、3等名称是创建者从遵循的顺序交易开始的编号)

1. 创建合约与添加流动性

交易1交易哈希:0x44fcc7d2c10242e98a2d987761b162bc591a1f94c67b855927e6acaefbbf648d

创建合约者在合约中硬编码时创建一个地址lead_deployer = 0x45A01E4e04F14f7A4a6702c74187c5F6222033cd,然后再创建一个地址,然后在合约实例化时铸造1枚令牌给领导部署者

LayerZero 合约构造函数

交易2交易哈希:0x1844b924fc5dbf5f522d67f7f6d7aceaac2679b14dc93f9f2baf10d6f5215ea6

批准授权时,给了uniswapUniswap V2: Router 2:0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D无限大的调用权限

交易3 交易哈希:0x934ec608bdea58282fe54fffda0c8fdd541c2d1f2a03b49e59e4485817d69e0d

添加流动性,创建者将 eth 和 layerzero token 转给 uniswap 合约添加流动性,形成了 LAYER / WETH 的交易对。创建者花费 35 eth,从 lead_deployer 处花费 704,578,849(7亿)个 token,所以一开始形成的交易对币价为 $ 0.000078

值得一提的是,之后发现在合约代码里隐藏了这样一个逻辑:创建者发起的代币转账交易,扣除的是创建者自己钱包的 token,但链上记录的事件显示为 lead_deployer 支付了交易,这就会导致所有人从区块链浏览器上查看交易信息的时候,容易当做是某个具有公信力的地址在向其他地址转账,如果不仔细查找资金来龙去脉的话非常具有欺骗性

LayerZero 合约转账逻辑

2. 转账和空投

交易4 ~ 交易7 交易哈希:0x90738aacba2413359a039987ff1a39df0f7b7aeced972b115fbd33ef8176a24e 0x7efff5bca7e9030ea0c423153d4da7b754e41e1e179de0cd99e260adcef169dd 0xa3e089ff45472eb2b33e0f199b7791965a755dd0e5bdef741be12ccdd664b785 0x5594d681b1416f05d99b8202b71a1611c623181730915b68afddeb598d1dc2d3

创建者伪装成 lead_deployer 发送了部分 token 转给了 4 个地址,均是 STG 前四的头部持有者地址

  • lead_deployer 自己:0x45a01e4e04f14f7a4a6702c74187c5f6222033cd 表面上的 token 发送方

  • STG 头部持有者多签钱包:0x65bb797c2b9830d891d87288f029ed8dacc19705 后续被空投砸中

  • STG 头部持有者多签钱包:0x8a27e7e98f62295018611dd681ec47c7d9ff633a 后续被空投砸中

  • Stargate Finance: STG Token0xaf5191b0de278c7286d6c7cc6ab6bb8a73ba2cd6 后续被空投砸中

LayerZero 持有者排行

交易8 交易哈希:0x518a1c329d6077b7c70182e39755988a4068cb56f9f6e04f0f9854ad97030fca

空投【本次假币的核心骗术】,创建者伪装成 lead_deployer 空投给 500 个地址,调用 airdrop 函数 在区块链浏览器上看见这笔空投交易很正常

空投交易记录

但是仔细追踪发现很奇怪,创建者(用户地址)调用合约,使一个知名地址(STG,排行一百七的 token 创建者地址 Stargate Finance: Deployer:0x1d7c6783328c145393e84fb47a7f7c548f5ee28d用户地址))向链上巨鲸们空投。用户地址调用合约使用户地址向其他地址空投,首先想到有可能是小号,其次想到必须要有权限调用别人的 token 才行,也就是 approve 调用,顺着链上交易信息往前找也没有找到 STG deployer 地址的授权交易数据,仔细一看甚至连 Layer Zero 代币都没有转入过,可是它却给500个地址空投了

STG deployer 历史交易没有收到过 Layer

同时,发现得到空投的地址余额里并没有这个 token,在 token 界面里发现空投的500个交易被记录到了交易次数中,但是持有者数量并没有加上500

LayerZero Token 交易和持有情况

这太可疑了,最后从合约源码看到 airdrop 函数其实是有问题的。这里补一下 erc20 标准的基础知识,只要定义了以下函数的合约都算是遵循 ERC20 标准的函数,都能称作 erc20

// 方法
function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
// 事件
event Transfer(address indexed _from, address indexed _to, uint256 _value)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)

正常的空投函数是调用 transferFrom 函数,按照 approve 授权 - transfer 转账 - Transfer 记录事件 的顺序执行

正常的转账逻辑是 减少发送者的 balance - 增加接收者的 balance - Transfer 记录事件

/**
 * 授权转账;从 sender 发送 amount 数量的代币给到 recipient 。
 * 会触发 Transfer 事件
 * Emits a {Transfer} event.
 */
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

而这个 token 的 airdrop 代码只是循环记录事件,没有在记录事件之前调用 transfer 或 transferFrom 或者改变 balance 的映射值,甚至在注释里还标注了 spoofer(欺骗者)

LayerZero 空投函数

所以,创建者调用空投函数时随便输入一个想要伪装的地址,形成该地址向空投列表转账的事件记录,并没有代币的流动转移,事件记录的 Transfer event 并不会去校验发送者是否有足够的代币完成转账,所以才会执行成功

而该创建者调用时设置的 Stargate Finance: Deployer 非常巧妙,导致很多用户认为是 STG 项目方正在进行空投,并结合一些搜索引擎上已存在的新闻,可以大幅增加可信度,吸引很多用户购买这个假币

LayerZero 相关新闻

3. 销毁部分用户代币

交易9 ~ 交易18 交易哈希:0x9d471759aa0e753ce8b4653dca5649089a3f16e1bf9d53f644038cb8585bb85c 0x84aeaa155c558a3e04292501e9a7013930098c19b0106c0e648a700178f0a6c3 0x1453979c433e14f05905ffe723a450f07006d1c41f9a4767f84ed19989f5378d 0xaa5df046b968996988743577f7da77c13b0b80c456831ac6ca3ea9c083609ff0 0xb7407d20937a77eaaaf04c405e54d5ece5a7ea926ce84edc181ea7cdfc7483c7 0x2fccfb502c110e1ba350757b8b1e74b4b1e5083aa0d728a9936b7c2ead23b1e8 0x016dfc90fe014d7ec066cbdf795e14057de56cbb565e741dcba1418f7c8cd555 0x111e4ce61efcf519e7b08defc1eeba80397c98aa2dd3424443b21f982d6b520a 0x588668f2caff2fceb7cbec51522c3a06240d8e5bb1478591de46f92eea6a815a 0xad5264f4a8b99ddcb2094a99a67f58e9792e29855cc229bd4537f1292b1d7185

是创建者在执行 Bridge To Layer Zero 函数,函数内部是将指定用户的代币余额销毁,这些用户的代币来自于 uniswap 的正常购买,如果能看到这里的销毁交易记录,其实就可以肯定是空气币、假币了

Bridge To Layer Zero 函数

删除流动性和资金转出

交易19 交易哈希:0x1e6a6e4c1fe05cfcc3f850385776029eb4d8955e634a3def9760cadc1b811cff

创建者在 uniswap 删除了流动性,uniswap 从交易对的池子里返回剩余的 308,789,142(3亿) Layer 代币和 80 个 WETH

交易20 交易哈希:0x710fbb29471cab468c0acd0e2d7b4bab38a54ef14ee0eb5190173dbabd9be3bc

创建者从另一个账户(0xaecf)归集了 9 个 eth,这个账户在 uniswap 多次买入layer,炒价格花了 41 eth

交易21 交易哈希:0xd42c9211958c2dbf446d116c592708ba38c6a2efe8ac55259778d9cd849c1d72

创建者将从 uniswap 撤销流动性得到的 80 个 eth 和 接收转账得到的 9 eth 共 90.11 eth 转移到了 0xc0f3 账户

深入分析

空投地址:

空投主要面向交易所地址、被伪装者合约地址和交易所用户地址,交易所有Binance、FTX、Huobi、KuCoin、Bybit、Gate、Cobo、MXC、Poloniex,在链上空投交易所十分具有迷惑性,让用户以为该币即将在交易所上线,也会使用户对该币价有错误的估计

收割用户:

购买者都是热衷于冲土狗的用户,这部分用户才有专门针对土狗的监控,他们交易里有时常大亏大赚,类似赌徒心理,很容易被割,部分地址如下: 0xbdBcA311A3c68bD2C32F62311235a7c4763FF472 0xdcccdd4696f0db1377097cc45d108dc0ce0f8fc4 0x6d1661063d37b61c46c3840a48f87ea5bd0c2443 0xf9de0f1705f3cae4211b8161d28c201441bfdd50 0x6d1661063d37b61c46c3840a48f87ea5bd0c2443

Layer Zero:

  • 盈利:单看假币创建者支出 35 eth,收回 80 eth,还以为挣了 (80-35) * 1575 = 70875 USD,仔细调查后排出创建者小号自己炒价格使用的 41 eth 其实这个假币真实净赚 4 eth = 6300 USD

  • 不足:从整个流程来讲其实有很多地方不足,是可以让创建者挣更多的

    1. 空投比较可疑:既然是假空投,完全可以铺的广一些,多几千个巨鲸地址发币,最后以五百以内的随机空投人数结尾,造成大范围巨鲸空投的影响力,且数量上也不会引起怀疑

    2. 收割时间太快:从空投开始到删除流动性也才一个小时,99% 的用户还没收到消息,只有监控了 uniswp 发币和链上空投行为的机器人能收到消息,完全可以把时间线拉长,炒币价的地址也把交易速度放慢

    3. 合约代码问题:可以粉饰一下代码,比如格式问题,不说骗到懂代码的人,至少让小白用户看不出格式有问题,让用户第一印象是这个代码是项目方认真写的

  • 优点

    1. 冒充的目标选的好:lead_deployer 是 STG 创建者之前创建的一个合约,该钱包里还有很多类似 Layer 的币种,并且假币实例化后该地址余额充足,形成了Stargate Finance: Deployer 在发新币空投,他创建的子合约在出资 token 的情况,使得很多投机用户被骗

    2. 周期短,速度快,可以迅速开始下一轮

资金流向:

通过对资金流向和地址的深入挖掘,挖出了该作案者的历史地址和行为,发现该作案者是惯犯,所有的操作都类似下图

作案者假币套利资金流转模式

历史行为和地址:

假币创建者历史地址和历史假币

比较有意思的是 HSynapse Token:刚在 uniswap 上添加好两个交易对不到50秒,就被人寻找到价差进行了套利,感兴趣可以看看这个https://etherscan.io/token/0x2385f55672475fb9263c41d44092a761454bca82

下表是在 uniswap 上刷交易量的子地址,假币套利隔几个币就会有0.2左右的 eth 从创建者盈利部分转入刷量地址,同时,刷量地址也会进行卖出套利

刷量地址

总结

发假币用户根据同一套流程线性复制,将资产滚雪球式的放大

假币历史资金流向

造假流程:

  1. 找准目标,比如前几天的 STG 刚上 binance 创新区,就可以造一个有过即将发币通知新闻的项目,冒充其合约部署者

  2. 改改 erc20 模版,可以借鉴 Layer 这个假币,粉饰一下代码和逻辑

  3. 给被冒充者的子合约声明 token,再冒充其子合约身份进行添加流动性

  4. 假装被冒充者进行空投,吸引用户

  5. 控盘,操纵币价

  6. 收盘,直接删除流动性

拓展思路:

不仅可以用发假币的方式盈利,甚至可以通过发币的方式进行洗钱

防护建议

大部分人看不懂或者懒得看 token 合约,特别是冲土狗这种紧张并且非常需要时间的时刻,所以建议按照以下注意事项大致看看,甚至可以先少冲一点,然后花个几分钟看看合约,感觉不对劲也能及时跑路

  1. 大致检查合约内部注释,一些明显的词,如 spoofer,fake 等,可能攻击者写完忘代码后了遮一遮注释里的大实话

  2. 检查合约内部硬编码的地址,查看这些地址的交易信息是否可疑,比如余额里全是不知名甚至是假币,或者交易历史全是 failed,这种就可以肯定是有问题的地址以及有问题的 token 合约

  3. 检查 erc20 用套模版的行为,一张假币都是一键发币或者自己修改的契约,会有很明显的粗制滥造行为,比如有重要的令牌信息有一定的分割线、模板代码底下是自己写的的代码,也有重要的分割线、(函数见行函数,代码空代码格式)不同的代码习惯与模版

  4. 会编程的地址可以加入黑名单,通过地址将其伪造,创建行为完善风险情报

假币合约代码的明显缺陷1

假币代码的明显缺陷2

Recommended Reading