本项目仅供教育、研究和学习目的使用:
- ✅ 学习EIP-7702技术
- ✅ 理解MEV和抢跑攻击
- ✅ 研究区块链安全
- ❌ 不保证救援成功
- ❌ 作者不对任何损失负责
坦诚说明:
- 📊 实际成功率很低(约0-20%)
- 💸 可能损失Gas费用
- ⚡ 对抗专业黑客Bot非常困难
- 🎯 仅在特定条件下可能成功
继续阅读前请理解:这个项目记录了一次真实的救援尝试经历,包括成功和失败的部分。它的价值在于教育意义,而非保证成功的救援工具。
当你的以太坊钱包被通过EIP-7702授权劫持时:
被盗钱包状态:
├─ ✅ 你有私钥(可以签名交易)
├─ ❌ 被黑客设置了EIP-7702授权
├─ ⚡ 任何转入的ETH会被立即转走
├─ 💰 钱包中可能有代币或DeFi资产
└─ 🎯 需要在黑客之前转出资产
为什么救援很困难?
- 黑客监控 - 24/7自动化Bot监控
- Gas竞争 - 需要比黑客更高的gas
- 时间窗口 - 只有200ms-2秒的反应时间
- Nonce冲突 - 与黑客争夺同一nonce
- 原子性限制 - 某些代币不支持gasless转账
npm run check-7702 <address>- 多链检测(Ethereum, Base, Polygon, BSC)
- 识别授权类型(EOA/合约)
- 显示被授权的地址
npm run revoke-base # Base链
npm run revoke-mainnet # 以太坊主网
npm run revoke-all # 所有链- 无需被盗钱包有ETH
- 使用救援钱包支付gas
- 支持多链操作
npm run claim-virtual- 成功案例:Virtual Protocol空投
- 使用EIP-7702代理领取
- 无需被盗钱包有ETH
npm run instant-rescue- 尝试在黑客前转移代币
- 支持自定义gas策略
- 详细的执行日志
generate-wallet- 生成救援钱包check-balance-base- 检查Base链余额test-7702-support- 测试代币是否支持EIP-7702traditional-transfer- 传统转账方案
- Node.js >= 18.0.0
- npm或yarn
- 稳定的网络连接
- RPC节点访问权限
# 克隆项目
git clone https://github.com/your-username/ERC7702-del.git
cd ERC7702-del
# 安装依赖
npm install
# 如果遇到网络问题(中国大陆)
npm run install:cn# 复制模板
cp env.template .env
# 编辑.env文件
nano .env必需配置:
# Base链RPC(推荐使用Alchemy或快速RPC)
BASE_RPC_URL=https://base-mainnet.g.alchemy.com/v2/YOUR_KEY
# 被盗钱包私钥(!!小心保管!!)
COMPROMISED_PRIVATE_KEY=0x...
# 救援钱包私钥(用于支付gas)
RESCUE_PRIVATE_KEY=0x...
# 安全接收地址
SAFE_WALLET_ADDRESS=0x...# 1. 检查授权状态
npm run check-7702 <被盗钱包地址>
# 2. 撤销恶意授权(如果有)
npm run revoke-base
# 3. 检查是否还有资产
npm run check-balance-base
# 4. 尝试救援(如果值得)
npm run instant-rescueEIP-7702允许外部账户(EOA)临时委托代码执行给智能合约:
// 授权结构
{
type: 4, // EIP-7702交易类型
authorizationList: [{
chainId: 8453, // Base链
address: "0x...", // 委托给的合约地址
nonce: 1234,
signature: "0x..." // 被盗钱包的签名
}]
}黑客利用方式:
被盗钱包 → EIP-7702授权 → 黑客合约
↓
接收ETH → 立即转走
我们的对抗方式:
方案1: 撤销授权
被盗钱包 → EIP-7702撤销 → ZeroAddress
方案2: Gasless转账(如果代币支持)
救援钱包 → EIP-7702授权 → 代理被盗钱包转账
方案3: 传统转账(需要ETH)
救援钱包 → 转ETH → 被盗钱包 → 立即转代币
成功率: ⭐⭐⭐⭐⭐ (95%+)
npm run revoke-base关键点:
- 使用救援钱包支付gas,不需要被盗钱包有ETH
- Base链gas费很低(约$0.0001)
- 撤销后黑客无法再自动转走ETH
代码实现:
const authorization = await compromisedWallet.authorize({
address: ethers.ZeroAddress, // 撤销 = 设为零地址
nonce: currentNonce,
chainId: 8453
});
await rescueWallet.sendTransaction({
type: 4,
authorizationList: [authorization]
});成功率: ⭐⭐⭐⭐ (80%+,取决于空投合约)
成功案例:Virtual Protocol空投
npm run claim-virtual为什么成功:
- 空投合约允许代理领取
- 不需要被盗钱包有ETH
- 黑客无法监控领取操作
成功率: ⭐ (0-20%)
问题:
// 某些代币(如BURN/ATM)会检查msg.sender
function transfer(address to, uint256 amount) {
require(msg.sender == tx.origin, "No proxy!"); // 拒绝代理
// ...
}失败原因:
- 必须给被盗钱包转ETH才能转代币
- 转ETH会被黑客检测到
- 黑客在200ms-2s内转走ETH或代币
- Gas竞争中很难赢过专业Bot
尝试的方案:
| 方案 | Gas倍数 | 成本 | 成功率 | 问题 |
|---|---|---|---|---|
| 并行发送 | 10x | $0.0001 | 5% | 时序无法保证 |
| 延迟1秒 | 10x | $0.0001 | 10% | 给黑客反应时间 |
| 高Gas抢跑 | 100x | $0.001 | 20% | 成本高,仍可能失败 |
| 超高Gas | 200x | $0.002 | 30% | 不划算 |
结论:对于不支持EIP-7702的代币,几乎不可能从被监控的钱包中救援。
现实情况:
黑客优势:
- ✅ 24/7自动化监控
- ✅ 可能直连Base Sequencer
- ✅ 可能使用MEV服务
- ✅ 零延迟反应(< 100ms)
- ✅ 可以使用极高Gas
我们的劣势:
- ❌ 公共RPC(延迟50-200ms)
- ❌ 交易在公共mempool(可见)
- ❌ 人工操作(延迟更高)
- ❌ Base链不完全支持Flashbot
教训:除非代币价值很高(>$50)且愿意承担高成本($5-10),否则不值得继续尝试。
功能:多链检测EIP-7702授权
npm run check-7702 0xYourAddress支持链:
- Ethereum Mainnet
- Ethereum Sepolia
- Base
- Polygon PoS
- BNB Chain
输出示例:
✅ 发现授权!
授权给: 0x25e7...
类型: Contract (智能合约)
功能:撤销Base链的EIP-7702授权
关键代码:
// 使用ethers.js v6的authorize API
const authorization = await compromisedWallet.authorize({
address: ethers.ZeroAddress,
nonce: currentNonce,
chainId: 8453
});
// 发送Type 4交易
await rescueWallet.sendTransaction({
type: 4,
to: compromisedWallet.address,
authorizationList: [authorization],
gasLimit: 50000n
});成本:约$0.0001(Base链)
功能:尝试快速救援代币
策略:
// 1. 转ETH到被盗钱包(救援钱包付gas)
await rescueWallet.sendTransaction({
to: compromisedWallet.address,
value: ethers.parseEther("0.000005"),
gasLimit: 50000n,
maxFeePerGas: baseFee * 2n // 2x gas
});
// 2. 等待1秒让ETH到账
await new Promise(r => setTimeout(r, 1000));
// 3. 被盗钱包立即转代币
await compromisedWallet.sendTransaction({
to: tokenAddress,
data: transferData,
gasLimit: 100000n,
maxFeePerGas: ethers.parseEther("0.000004") / 100000n // 用全部余额做gas
});限制:
- 成功率低(0-20%)
- 仅适用于代币价值>$10的情况
- 需要运气(黑客暂时不在线/gas不够高)
功能:测试代币是否支持EIP-7702 gasless转账
npm run test-7702-support原理:模拟EIP-7702代理调用,检测是否会revert
常见错误码:
0x5dd58b8b- UnauthorizedVia7702(不支持)0x123228f0- Unauthorized()- 成功 - 支持gasless
- Ethereum/Base: 区块链平台
- Hardhat: 开发环境
- ethers.js v6: Web3库
- Node.js: 运行环境
- Solidity: 智能合约语言
关键依赖:
{
"ethers": "^6.15.0",
"hardhat": "^2.19.0",
"@nomiclabs/hardhat-ethers": "^2.2.3",
"dotenv": "^16.0.3"
}- 开发时间: 约1周
- 总尝试次数: 15+次
- 总花费Gas: 约$0.005
- 成功救援: 0 ETH(代币被黑客抢先)
- 成功操作: 撤销授权✅、领取空投✅
- 总脚本数: 20+
- 总代码行数: 约8000行
- 支持链数: 5条链
- 文档数: 10+
欢迎贡献!这个项目可以在以下方面改进:
-
MEV集成
- 集成Base链的MEV服务
- 实现真正的private transaction
- 提高成功率
-
更好的Gas策略
- 动态gas调整
- 链上gas价格预测
- 最优时机选择
-
更多DeFi协议支持
- Uniswap V3
- Aave V3
- Compound V3
- Curve
-
自动化增强
- 更智能的监控
- 多实例协调
- 故障自动恢复
# 1. Fork项目
# 2. 创建特性分支
git checkout -b feature/amazing-feature
# 3. 提交更改
git commit -m 'Add amazing feature'
# 4. 推送到分支
git push origin feature/amazing-feature
# 5. 开启Pull RequestMIT License - 详见LICENSE文件
- eip7702.app - EIP-7702授权查看工具
- Revoke.cash - 授权管理工具
- codeesura/eip7702-clean-delegation - 参考实现
如果你遇到问题或有建议:
- 📬 提交Issue
- 💬 加入讨论(如果有社区)
- 📧 联系维护者
如果发现安全问题,请私下联系,不要公开披露。
- QUICKSTART.md - 快速开始指南
- REVOKE_GUIDE.md - 撤销授权详细教程
- MEV_BATTLE_GUIDE.md - MEV对抗策略
- ANTI_FRONTRUN_STRATEGY.md - 反抢跑策略
如果这个项目对你有帮助(无论是成功救援还是学习):
- ⭐ 给项目点个Star
- 🔄 分享给需要的人
- 💬 提供反馈和建议
- 🤝 贡献代码改进
-
评估情况
- 钱包中有多少资产?
- 是否支持EIP-7702 gasless转账?
- 黑客Bot有多活跃?
-
选择策略
- 价值<$5:直接放弃,撤销授权即可
- 价值$5-50:尝试1-2次,成本$0.001
- 价值>$50:考虑专业服务或高gas多次尝试
-
心理准备
- 成功率很低(0-30%)
- 可能损失Gas费
- 不要投入超过资产价值10%的成本
-
学到经验
- 理解EIP-7702风险
- 定期检查授权
- 使用硬件钱包
- 不随意签名授权
最重要的是预防!
- ✅ 使用硬件钱包
- ✅ 定期检查授权(revoke.cash)
- ✅ 不随意连接不明网站
- ✅ 仔细审查签名内容
- ✅ 使用多个钱包分散风险