科学分析之如何撸空某项目红包奖池
February 17th, 2024

1. 背景

在春节期间,某项目开启了送红包活动,奖池数量为8k个代币,其中领取奖励分为0.1,1,10,100,四个档位

2. 分析

首先进行一次正常领取红包交互,我们会发现项目方并没有做任何限制,只要向合约0xaaaffffffffffffffff8去调用0xffffffff方法,合约就会返回随机数量的代币。

注意这里项目方并没有做任何的限制,那么现在就意味着我们可以使用任意EVM地址调用合约领取一次红包。

至于奖池中代币数量如何查看,通过区块链浏览器中可以看到这个合约所持有的ERC20代币数量为8K。

3. 代码

开始编写代码, 思路很清晰

我需要:

  1. 生成N个地址

  2. 分发Gas到N个地址

  3. 调用合约领取红包

  4. 归集

1. 生成N个地址

第一个很简单,直接使用Ethers.js的createRandom()来生成1.2W个以太坊钱包,代码如下

2. 分发Gas到N个地址

从seeds.txt中读取地址后并发送交易,发送交易的方式每个人都有各自的实现方式,这里不多赘述

3. 调用合约领取红包

原理依旧是发送交易,但是增加一个data字段来调用领取红包方法(对,就是打铭文时的十六进制,只不过可以通过这个十六进制调用合约的方法)

4.归集

最后的归集,因为归集的是ERC20代币,所以我直接通过对应合约的ABI方式来归集

给大家看一下hash,第一笔分发gas,第二笔调用合约,第三笔归集,十分简单明了

收获

最后通过1.2w个地址拿到了N个币,本文结束

Subscribe to b1oc4
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from b1oc4

Skeleton

Skeleton

Skeleton