mcpField
M
meme-coin-audit

meme-coin-audit

github.com/elementalsouls安全5.3k276 次安装今天更新
代码仓库

关于 meme-coin-audit

meme-coin-audit 是针对 EVM 和 Solana 迷因币与代币的安全审计技能,结合源码检查和链上尽调,帮助评估权限、流动性及转账控制风险。

主要功能

  1. 01八类代币专属漏洞检查
  2. 02EVM 与 Solana 源码检索指引
  3. 03链上权限与流动性检查
  4. 04Solana Token-2022 风险信号
  5. 05Foundry 概念验证模板

适用场景

  1. 01投资前筛查迷因币
  2. 02检查代币合约的铸币或费用控制
  3. 03检查 Solana 代币权限与扩展
  4. 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 个问题的快速筛查:

  1. 铸造权限是否已置空?
  2. 冻结权限是否已置空?
  3. 更新权限是否已置空(确保元数据不可变)?
  4. LP 是否已在经验证的合约中锁定超过 6 个月?
  5. 前 10 大持有者的持仓集中度是否低于 30%(不包括池子/销毁地址)?
  6. 绑定曲线是否已完成(针对 pump.fun),且完成后铸造权限是否已置空?

有 5 项回答“否”=离场。有 3 项回答“否”=风险高,只投入你能承受损失的资金。有 2 项回答“否”,同时叙事强劲、流动性稀薄=典型的散户陷阱。

流动性不足的铸币上的 MEV/夹击交易放大效应

买入流动性低于 50K 美元的铸币,必然会遭遇夹击交易。到 2026 年,Solana 和 Ethereum 上的机器人基础设施已实现机构化,例如 Jito MEV-share 和私有订单流拍卖。如果你的交易规模超过可用流动性的 1%,预计夹击损失会超过 5%;若超过流动性的 5%,仅夹击交易就会造成超过 20% 的滑点。

缓解措施(按 2026 年的有效性排序):

  1. Jito bundles(Solana)——提交时附带优先费,原子化执行,不留 MEV 窗口
  2. Flashbots Protect RPC(Ethereum)——通过私有内存池提交
  3. 受 MEV 保护的 DEX 聚合器——Jupiter 的滑点保护、1inch Fusion、CoWSwap
  4. 拆分订单——将 1 笔大额交易拆成 N 笔小额交易,降低每笔交易的夹击获利空间

如果铸币的流动性过于稀薄,即使拆分订单也会遭遇夹击——这就是应该放弃交易的信号,而不是改用更好的工具的信号。

评论

支持 Markdown