Helio Protocol Rug Pull
What happened
Helio Protocol here is a copycat BEP-20 token trading on PancakeSwap, not the legitimate project or tokens with a similar name. CertiK Alert flagged a large liquidity removal on the fake token on Sep 7, 2023, and said the deployer profited about $127k in WBNB. De.Fi's REKT database lists the removal at 178,277 USD (829.41 BNB) from PancakeSwap and says part of the funds, held in USDT, remained in the token creator's wallet while another part was deposited to ByBit.
De.Fi gives the deployer address as 0x7335482E…bF414d, a second address 0xc6ae76C4…EE98d5, the ByBit deposit transaction 0xb302194f…3557b3 and the liquidity removal transaction 0x196ece96…22a9d7. In the token's code, a variable called newun is set to the first to address that appears in transferFrom, and every later transfer to that address reverts with "please wait". If that first address is the liquidity pair, holders can buy but cannot sell back into the pool, and only the party that removes the liquidity gets paid out.
How it happened
What the code allows (from the verified source):
- The constructor mints the whole supply to the deployer:
balances[owner] = _totalSupply;with_totalSupply = 100000000000000000;(10^8 tokens at 9 decimals).ownerismsg.senderof the constructor. transferFromcontains a trap that arms itself:if(from != address(0) && newun == address(0)) newun = to; else require(to != newun, "please wait");. The firsttransferFrommade whilenewunis unset stores itstoaddress innewun. On a PancakeSwap pool the router moves tokens withtransferFrominto the pair, so if that first call is the liquidity deposit,newunbecomes the pair address. This is inferred from the code and the router's usual behaviour;newunwas not read from the chain.- After that, both
transfer(require(to != newun, "please wait");) andtransferFromrevert for any transfer whose recipient isnewun. A holder selling through the router sends tokens to the pair withtransferFrom, so the sell reverts, while a buy is atransferfrom the pair to the buyer and is not blocked. - Removing liquidity is not blocked, because the pair sends tokens out to the remover rather than receiving them, and the liquidity tokens are a different contract. The party holding the LP tokens can therefore take the stablecoin/WBNB side of the pool.
- The owner can change the target with
function transfernewun(address _newun) public onlyOwner { newun = _newun; }. Setting it to an address nobody uses lifts the block; setting it toaddress(0)lets the nexttransferFromcapture a new recipient.transferOwnership/acceptOwnershipexist but there is norenounceOwnership, so the owner role stays unless transferred.
(reported by CertiK Alert and the De.Fi listing):
- CertiK Alert detected a large liquidity removal on the fake Helio Protocol token on Sep 7, 2023 and said the deployer profited about $127k in WBNB.
- De.Fi's listing says the deployer removed liquidity worth 178,277 USD (829.41 BNB) from PancakeSwap in transaction 0x196ece96…22a9d7, and that some of the USDT was deposited to ByBit in transaction 0xb302194f…3557b3. These transactions were not opened here (BscScan returned 403).
Protocol details
Evidence
- report CertiK Alert post on the fake Helio Protocol liquidity removal (via fxtwitter) twitter.com
- transaction bscscan.com transaction 0x196e…a9d7 bscscan.com
- transaction bscscan.com transaction 0xb302…57b3 bscscan.com
- address TokenBEP20 / HELIO verified source on BscScan bscscan.com
- address bscscan.com address 0x7335…414d bscscan.com
- address bscscan.com address 0xc6ae…98d5 bscscan.com
- analysis Sourcify match for Helio Protocol token (BSC, chain 56) repo.sourcify.dev
- analysis De.Fi REKT database listing for HELIO de.fi
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.