关于 meme-coin-audit
meme-coin-audit 是针对 EVM 和 Solana 迷因币与代币的安全审计技能,结合源码检查和链上尽调,帮助评估权限、流动性及转账控制风险。
主要功能
- 01八类代币专属漏洞检查
- 02EVM 与 Solana 源码检索指引
- 03链上权限与流动性检查
- 04Solana Token-2022 风险信号
- 05Foundry 概念验证模板
适用场景
- 01投资前筛查迷因币
- 02检查代币合约的铸币或费用控制
- 03检查 Solana 代币权限与扩展
- 04为代币安全发现编写概念验证
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ elementalsouls/ claude-bughunter --skill meme-coin-audit安装后在 Claude Code 中输入/meme-coin-audit确认已加载。
详细介绍
MEME 币和代币安全审计
快速识别跑路风险,并对 EVM 和 Solana 的 Meme 币进行深度代币安全分析。
预审风险信号
在阅读任何代码之前,先检查以下项目。如果符合任何一项,请跳过审计——该代币很可能是跑路盘,或者不值得花时间。
一票否决项(立即跳过)
- 合约未经验证(Etherscan/Solscan)→ 无法审计源代码 = 无法信任
- 部署者钱包有跑路历史(查看 Etherscan 部署者页面)
- 代币年龄 < 1 小时且没有已知团队 → 时间太早,等待更多数据
- 保留了铸造权限(Solana)且没有上限 → 无限铸造 = 必然跑路
- Meme 币仍保留冻结权限(Solana)→ 已确认是蜜罐
- 存在转账钩子(Token-2022),且钩子程序可变 → 蜜罐攻击途径
- 永久代理扩展(Token-2022)→ 可以窃取所有持有者的代币
软性否决项(极度谨慎地继续)
- 最大持有者持有 > 20% 的供应量(DEX 池除外)
- LP 未销毁,也未锁定在经过验证的合约中
- 合约可升级,或为保留了管理员权限的代理合约
- 池中流动性少于 $5K
- 没有社交媒体账号/部署者匿名且没有历史记录
一条规则
“检查所有权限和所有者函数。保留的权限就是跑路途径。”
每次跑路都需要执行特权操作:铸造、拉黑、修改费用、移除 LP,或滥用权限。找到特权操作,就找到了漏洞。
漏洞类别(8 种代币专属)
1. 隐藏铸造/无限供应
常见的跑路模式。部署者在上线后铸造代币,然后抛售到 LP 中。
快速 grep(EVM):
grep -rn "function mint\|_mint(\|_balances\[.*\] +=" src/ --include="*.sol" | grep -v "test\|lib\|node_modules"
快速 grep(Solana):
grep -rn "MintTo\|mint_to\|mint_authority" src/ --include="*.rs" | grep -v "test\|target"
否决条件: 每条铸造路径都强制执行 MAX_SUPPLY,或完全移除了铸造函数。
2. 蜜罐/转账限制
常见的诈骗模式。可以买入,但会阻止卖出。
快速 grep:
grep -rn "blacklist\|isBlacklisted\|_bots\|maxTxAmount\|approve.*override\|tradingEnabled" src/ --include="*.sol"
Solana 对应项:
grep -rn "freeze_authority\|transfer_hook\|TransferHook\|permanent_delegate" src/ --include="*.rs"
否决条件: 没有黑名单映射、没有转账钩子、没有冻结权限。
3. 费用操纵
常见的跑路模式。初始买入后,将卖出费用设为 99%。
快速 grep:
grep -rn "setFee\|setSellFee\|_taxFee\|_sellFee" src/ --include="*.sol"
grep -rn "function set.*Fee" -A5 src/ --include="*.sol" | grep -v "require\|MAX\|<="
否决条件: 费用设置函数包含 require(fee <= MAX_FEE),且 MAX_FEE <= 10%。
4. 流动性池抽干
移除 LP、迁移或操纵池子,导致价格崩盘。
快速 grep:
grep -rn "migrateLP\|emergencyWithdraw\|\.sync()\|setPair\|setRouter" src/ --include="*.sol"
否决条件: LP 代币已销毁至死地址,没有迁移函数,也没有交易对设置函数。
5. 联合曲线操纵
利用 pump.fun 风格联合曲线中的漏洞。
快速 grep:
grep -rn "virtualReserve\|setCurve\|graduate\|bonding_curve" src/ --include="*.sol" --include="*.rs"
否决条件: 曲线参数不可变,任何人都可以触发毕业迁移。
6. 保留权限(SOLANA)
Solana 代币仍保留铸造/冻结/更新权限。
快速 grep:
grep -rn "mint_authority\|freeze_authority\|update_authority\|close_authority" src/ --include="*.rs"
grep -rn "set_authority.*None" src/ --include="*.rs" # Good sign: revocation
否决条件: 所有权限均为 None,且已在链上验证。
7. 虚假放弃权限/隐藏所有权
表面上已放弃所有权,但仍保留后门控制权。
快速 grep:
grep -rn "renounceOwnership.*override\|_shadowAdmin\|_backupOwner\|selfdestruct" src/ --include="*.sol"
否决条件: renounceOwnership 未被重写,没有第二个管理员角色,也没有 selfdestruct。
8. 设计导致的三明治攻击放大
合约让持有者极易受到三明治攻击。
快速 grep:
grep -rn "swapExactTokensForETH" -A5 src/ --include="*.sol" | grep "0,"
grep -rn "swapThreshold\|_rebase\|mandatoryPool" src/ --include="*.sol"
否决条件: 自动兑换设置了适当的滑点,且没有 Rebase 机制。
快速红旗排查
在整个源代码树中运行上述 8 类漏洞的 grep,快速检测红旗。这些检查合起来可以发现:
- 直接铸造/操纵余额
- 黑名单和转账限制模式
- 无上限的费用设置函数
- LP 迁移和紧急提取函数
- 虚假的放弃权限重写
- 零滑点自动兑换
- 所有 Solana 权限模式
- Token-2022 危险扩展
源代码 grep 不会检查(请在其他渠道验证):
- 链上状态(使用 Etherscan/Solscan 验证权限)
- 持有者分布(使用 DEXTools/Birdeye)
- LP 锁定状态(使用 Unicrypt/PinkLock/Solscan)
- 部署者钱包历史记录(手动检查)
FOUNDRY POC 模板(代币漏洞利用)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "forge-std/Test.sol";
import "../src/Token.sol";
contract TokenExploitTest is Test {
Token token;
address owner = makeAddr("owner");
address victim = makeAddr("victim");
address attacker = makeAddr("attacker");
// Uniswap V2 router (mainnet fork)
address constant ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
function setUp() public {
vm.createSelectFork("mainnet");
// Deploy token as owner
vm.startPrank(owner);
token = new Token();
// Add liquidity...
vm.stopPrank();
}
function test_hiddenMint_rug() public {
// Step 1: Victim buys tokens
vm.startPrank(victim);
// ... buy tokens on Uniswap
vm.stopPrank();
// Step 2: Owner mints and dumps
vm.startPrank(owner);
uint256 supplyBefore = token.totalSupply();
token.mint(owner, 1_000_000_000e18);
assertGt(token.totalSupply(), supplyBefore, "Supply should increase");
// ... sell minted tokens
vm.stopPrank();
// Step 3: Victim's tokens are now worthless
// Assert token price crashed
}
function test_honeypot_blacklist() public {
// Step 1: Victim buys
vm.startPrank(victim);
// ... buy tokens
vm.stopPrank();
// Step 2: Owner blacklists victim
vm.startPrank(owner);
token.blacklist(victim);
vm.stopPrank();
// Step 3: Victim cannot sell
vm.startPrank(victim);
vm.expectRevert("Blacklisted");
token.transfer(address(1), 100e18);
vm.stopPrank();
}
function test_fee_manipulation_rug() public {
// Step 1: Verify initial fee is low
assertEq(token.sellFee(), 3); // 3%
// Step 2: Owner sets fee to 99%
vm.prank(owner);
token.setFees(3, 99); // Buy 3%, Sell 99%
// Step 3: Victim sells — loses 99% to fees
vm.startPrank(victim);
uint256 balanceBefore = address(victim).balance;
// ... sell tokens
// Assert: received almost nothing
vm.stopPrank();
}
}
SOLANA 快速检查(无需源代码)
没有源代码时,请检查链上信息:
1. MINT AUTHORITY → solana account <MINT> --output json | check mint_authority
- Should be null
- If Some(pubkey) → CRITICAL: can mint infinite tokens
2. FREEZE AUTHORITY → same as above, check freeze_authority
- Should be null
- If Some(pubkey) → CRITICAL: honeypot
3. LP STATUS → Check Raydium/Orca pool
- LP burned? (tokens sent to 1111...1111)
- LP locked? (in verified locker with no backdoor)
- LP held by deployer? → CRITICAL: instant rug
4. TOP HOLDERS → Birdeye/Solscan holders tab
- Top 10 < 30% of supply (excluding pools)
- Creator wallets (check first transactions)
5. PROGRAM UPGRADEABILITY
- Is the program upgradeable? → can change any logic
- Upgrade authority should be None for immutable programs
6. TOKEN-2022 EXTENSIONS
- Any transfer hook? → potential honeypot
- Permanent delegate? → CRITICAL
相关技能与链路
web3-audit— 当目标是 DeFi 协议(而不仅仅是代币)时使用。工作流基元:本技能的 8 类代币特定漏洞属于web3-audit的范围;如果目标除了代币合约本身之外,还有借贷 / 金库 / 预言机逻辑,也加载web3-audit,以涵盖更广泛的 10 类 DeFi 漏洞。triage-validation— 判断拉地毯式攻击发现是否符合提交漏洞赏金报告的条件时使用。工作流基元:许多“拉地毯向量”观察结果只是拉地毯前的预警,而不是已部署协议中的可利用漏洞;运行 7Q 门槛检查,区分“部署者 COULD rug”(仅供参考)与“合约 IS exploitable now”(可报告)。report-writing— 为 Immunefi / 私有漏洞赏金撰写已确认的代币安全发现报告时使用。工作流基元:此处的 Foundry PoC 模板可用于report-writing的 Immunefi 正文模板。offensive-osint— 当代币具有链下基础设施(项目网站、Telegram、部署者身份信息)时使用。工作流基元:链上审计属于本技能的范畴;部署者钱包历史、社交媒体动态和项目合法性检查则交由offensive-osint处理。bb-methodology— 确认参与模式时使用。工作流基元:PART 0 区分“投资前尽职调查”(本技能的主要用途)与“Immunefi 漏洞赏金提交”(报告和严重性标准不同);答案会决定正确的审计后交接流程。
操作员备注(Claude-BugHunter)
根据实际参与情况补充的内容,以及针对 2026 年的供应内容扩展。 来自真实授权参与项目的经验,以及本仓库 31+ 个技能领域现场测试的 第 2 阶段验证。上游内容涵盖 WHAT; 本层则涵盖 WHEN-IT-WORKS 与 WHEN-IT-DOESN'T。
Solana 特有信号 — 2025-2026 年的实际情况
Token-2022 转账钩子是新的拉地毯攻击向量。钩子权限可以设为单个密钥;该密钥可在上线后暂停 / 拉黑任意地址,或对其收取转账手续费。对于 Token-2022 铸币,务必检查钩子权限和永久委托权限:
# get mint extensions for a Token-2022 mint
spl-token display <MINT_ADDRESS> --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
# look for: TransferHook { authority: ... }, PermanentDelegate { delegate: ... }
如果 TransferHook 权限非空 → 持有该密钥的人可以在交易过程中撤销转账权限。如果 PermanentDelegate 非空 → 该委托可以随时转移任意持有者的代币(实际上相当于内置没收功能)。仅有其中任意一项就属于拉地毯攻击级别。
pump.fun 联合曲线可以通过曲线的 K 参数操纵;联合曲线完成后仍保留铸币权限,是典型的退出骗局特征。联合曲线完成后检查 mintAuthority —— 正常项目会将其置空,骗局则会保留它,以便在项目毕业后抛售。
蜜罐检测 — 不止于显而易见的迹象
transfer() 在试运行中成功,但在某些地址上失败(发送者允许列表 / 阻止列表)。测试方法:模拟买入 → 模拟转账至另一个地址 → 模拟卖出。如果买入和转账成功,但卖出失败,就是蜜罐。
快速分诊矩阵:
| 测试 | 蜜罐信号 |
|---|---|
| 从随机钱包买入 | 成功(必须如此,否则没人会碰它) |
| 转账至第二个随机钱包 | 蜜罐通常会在此处失败 |
| 从原始钱包卖出 | 失败或收取 > 50% 的税费 |
| 从团队控制的钱包卖出 | 成功(这就是破绽) |
交叉验证多个来源:solana-rugcheck、rugcheck.xyz、dexscreener 风险信号、honeypot.is(EVM)。切勿相信单一来源 —— 拉地毯检测工具可能被延迟恶意模式骗过(前 7 天表现正常,之后才激活钩子)。
LP 锁仓声明——核实,不要轻信
DexScreener 上的 LP 锁仓徽章未经链上核实毫无意义。检查实际的锁仓合约(Unicrypt、TeamFinance、Bonkbot、PinkLock):
- 解锁日期——链上时间戳,而不是徽章上的文字
- 锁仓所有者——是部署者的钱包吗?是否有多个锁仓方分散持有 LP?
- 延长/缩短权限——有些锁仓合约允许所有者缩短锁仓期限:这根本不是锁仓,而是伪装成锁仓的退场通道
- 锁仓合约字节码——确认它是规范的锁仓合约,而不是带有后门的分叉版本
有些“已锁仓”的 LP 只锁 1 天,每周续期一次——买家看起来会觉得它和锁 1 年一样,但部署者可以在任意一个星期二任其到期。务必在链上浏览器中查看锁仓合约的源代码。
5 分钟内完成投资前尽职调查
6 个问题的快速筛查:
- 铸造权限是否已置空?
- 冻结权限是否已置空?
- 更新权限是否已置空(确保元数据不可变)?
- LP 是否已在经验证的合约中锁定超过 6 个月?
- 前 10 大持有者的持仓集中度是否低于 30%(不包括池子/销毁地址)?
- 绑定曲线是否已完成(针对 pump.fun),且完成后铸造权限是否已置空?
有 5 项回答“否”=离场。有 3 项回答“否”=风险高,只投入你能承受损失的资金。有 2 项回答“否”,同时叙事强劲、流动性稀薄=典型的散户陷阱。
流动性不足的铸币上的 MEV/夹击交易放大效应
买入流动性低于 50K 美元的铸币,必然会遭遇夹击交易。到 2026 年,Solana 和 Ethereum 上的机器人基础设施已实现机构化,例如 Jito MEV-share 和私有订单流拍卖。如果你的交易规模超过可用流动性的 1%,预计夹击损失会超过 5%;若超过流动性的 5%,仅夹击交易就会造成超过 20% 的滑点。
缓解措施(按 2026 年的有效性排序):
- Jito bundles(Solana)——提交时附带优先费,原子化执行,不留 MEV 窗口
- Flashbots Protect RPC(Ethereum)——通过私有内存池提交
- 受 MEV 保护的 DEX 聚合器——Jupiter 的滑点保护、1inch Fusion、CoWSwap
- 拆分订单——将 1 笔大额交易拆成 N 笔小额交易,降低每笔交易的夹击获利空间
如果铸币的流动性过于稀薄,即使拆分订单也会遭遇夹击——这就是应该放弃交易的信号,而不是改用更好的工具的信号。