Skip to content

ranxi2001/wallet-rescue-7702

Repository files navigation

🚑 EIP-7702 钱包救援工具包

一个用于从EIP-7702被劫持钱包中尝试救援资产的开源工具集

License: MIT Node.js Hardhat

功能特性快速开始使用文档技术细节经验教训


⚠️ 重要声明

免责声明

本项目仅供教育、研究和学习目的使用:

  • 学习EIP-7702技术
  • 理解MEV和抢跑攻击
  • 研究区块链安全
  • 不保证救援成功
  • 作者不对任何损失负责

项目现实

坦诚说明

  1. 📊 实际成功率很低(约0-20%)
  2. 💸 可能损失Gas费用
  3. 对抗专业黑客Bot非常困难
  4. 🎯 仅在特定条件下可能成功

继续阅读前请理解:这个项目记录了一次真实的救援尝试经历,包括成功和失败的部分。它的价值在于教育意义,而非保证成功的救援工具。


📖 项目背景

问题场景

当你的以太坊钱包被通过EIP-7702授权劫持时:

被盗钱包状态:
├─ ✅ 你有私钥(可以签名交易)
├─ ❌ 被黑客设置了EIP-7702授权
├─ ⚡ 任何转入的ETH会被立即转走
├─ 💰 钱包中可能有代币或DeFi资产
└─ 🎯 需要在黑客之前转出资产

技术挑战

为什么救援很困难?

  1. 黑客监控 - 24/7自动化Bot监控
  2. Gas竞争 - 需要比黑客更高的gas
  3. 时间窗口 - 只有200ms-2秒的反应时间
  4. Nonce冲突 - 与黑客争夺同一nonce
  5. 原子性限制 - 某些代币不支持gasless转账

🎯 功能特性

✅ 已实现功能

1. EIP-7702授权检测

npm run check-7702 <address>
  • 多链检测(Ethereum, Base, Polygon, BSC)
  • 识别授权类型(EOA/合约)
  • 显示被授权的地址

2. Gasless授权撤销

npm run revoke-base      # Base链
npm run revoke-mainnet   # 以太坊主网
npm run revoke-all       # 所有链
  • 无需被盗钱包有ETH
  • 使用救援钱包支付gas
  • 支持多链操作

3. Gasless空投领取

npm run claim-virtual
  • 成功案例:Virtual Protocol空投
  • 使用EIP-7702代理领取
  • 无需被盗钱包有ETH

4. 瞬时救援(实验性)

npm run instant-rescue
  • 尝试在黑客前转移代币
  • 支持自定义gas策略
  • 详细的执行日志

5. 辅助工具

  • generate-wallet - 生成救援钱包
  • check-balance-base - 检查Base链余额
  • test-7702-support - 测试代币是否支持EIP-7702
  • traditional-transfer - 传统转账方案

🚀 快速开始

环境要求

  • Node.js >= 18.0.0
  • npm或yarn
  • 稳定的网络连接
  • RPC节点访问权限

1. 安装

# 克隆项目
git clone https://github.com/your-username/ERC7702-del.git
cd ERC7702-del

# 安装依赖
npm install

# 如果遇到网络问题(中国大陆)
npm run install:cn

2. 配置环境变量

# 复制模板
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...

3. 基础使用

# 1. 检查授权状态
npm run check-7702 <被盗钱包地址>

# 2. 撤销恶意授权(如果有)
npm run revoke-base

# 3. 检查是否还有资产
npm run check-balance-base

# 4. 尝试救援(如果值得)
npm run instant-rescue

📚 详细文档

EIP-7702 授权机制

EIP-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 → 被盗钱包 → 立即转代币

🎓 经验教训

✅ 成功经验

1. EIP-7702授权撤销

成功率: ⭐⭐⭐⭐⭐ (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]
});

2. Gasless空投领取

成功率: ⭐⭐⭐⭐ (80%+,取决于空投合约)

成功案例:Virtual Protocol空投

npm run claim-virtual

为什么成功

  • 空投合约允许代理领取
  • 不需要被盗钱包有ETH
  • 黑客无法监控领取操作

❌ 失败经验

1. 转移不支持EIP-7702的代币

成功率: ⭐ (0-20%)

问题

// 某些代币(如BURN/ATM)会检查msg.sender
function transfer(address to, uint256 amount) {
  require(msg.sender == tx.origin, "No proxy!");  // 拒绝代理
  // ...
}

失败原因

  1. 必须给被盗钱包转ETH才能转代币
  2. 转ETH会被黑客检测到
  3. 黑客在200ms-2s内转走ETH或代币
  4. Gas竞争中很难赢过专业Bot

尝试的方案

方案 Gas倍数 成本 成功率 问题
并行发送 10x $0.0001 5% 时序无法保证
延迟1秒 10x $0.0001 10% 给黑客反应时间
高Gas抢跑 100x $0.001 20% 成本高,仍可能失败
超高Gas 200x $0.002 30% 不划算

结论:对于不支持EIP-7702的代币,几乎不可能从被监控的钱包中救援。

2. 与专业黑客Bot对抗

现实情况

黑客优势:

  • ✅ 24/7自动化监控
  • ✅ 可能直连Base Sequencer
  • ✅ 可能使用MEV服务
  • ✅ 零延迟反应(< 100ms)
  • ✅ 可以使用极高Gas

我们的劣势:

  • ❌ 公共RPC(延迟50-200ms)
  • ❌ 交易在公共mempool(可见)
  • ❌ 人工操作(延迟更高)
  • ❌ Base链不完全支持Flashbot

教训:除非代币价值很高(>$50)且愿意承担高成本($5-10),否则不值得继续尝试。


🛠️ 核心脚本详解

1. check-7702-delegation.js

功能:多链检测EIP-7702授权

npm run check-7702 0xYourAddress

支持链

  • Ethereum Mainnet
  • Ethereum Sepolia
  • Base
  • Polygon PoS
  • BNB Chain

输出示例

✅ 发现授权!
   授权给: 0x25e7...
   类型: Contract (智能合约)

2. revoke-7702-base.js

功能:撤销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链)

3. instant-rescue.js

功能:尝试快速救援代币

策略

// 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不够高)

4. test-eip7702-support.js

功能:测试代币是否支持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+

🤝 贡献指南

欢迎贡献!这个项目可以在以下方面改进:

建议改进方向

  1. MEV集成

    • 集成Base链的MEV服务
    • 实现真正的private transaction
    • 提高成功率
  2. 更好的Gas策略

    • 动态gas调整
    • 链上gas价格预测
    • 最优时机选择
  3. 更多DeFi协议支持

    • Uniswap V3
    • Aave V3
    • Compound V3
    • Curve
  4. 自动化增强

    • 更智能的监控
    • 多实例协调
    • 故障自动恢复

如何贡献

# 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 Request

📜 许可证

MIT License - 详见LICENSE文件


🙏 致谢

技术参考

社区资源


💬 联系与支持

问题反馈

如果你遇到问题或有建议:

  • 📬 提交Issue
  • 💬 加入讨论(如果有社区)
  • 📧 联系维护者

安全漏洞

如果发现安全问题,请私下联系,不要公开披露。


📖 扩展阅读

文档

技术博客


⭐ 如果觉得有用

如果这个项目对你有帮助(无论是成功救援还是学习):

  • ⭐ 给项目点个Star
  • 🔄 分享给需要的人
  • 💬 提供反馈和建议
  • 🤝 贡献代码改进

🎯 最后的建议

如果你的钱包被劫持

  1. 评估情况

    • 钱包中有多少资产?
    • 是否支持EIP-7702 gasless转账?
    • 黑客Bot有多活跃?
  2. 选择策略

    • 价值<$5:直接放弃,撤销授权即可
    • 价值$5-50:尝试1-2次,成本$0.001
    • 价值>$50:考虑专业服务或高gas多次尝试
  3. 心理准备

    • 成功率很低(0-30%)
    • 可能损失Gas费
    • 不要投入超过资产价值10%的成本
  4. 学到经验

    • 理解EIP-7702风险
    • 定期检查授权
    • 使用硬件钱包
    • 不随意签名授权

预防措施

最重要的是预防!

  • ✅ 使用硬件钱包
  • ✅ 定期检查授权(revoke.cash)
  • ✅ 不随意连接不明网站
  • ✅ 仔细审查签名内容
  • ✅ 使用多个钱包分散风险

记住:最好的救援是预防!

Made with ❤️ (and frustration 😅) by the community

⬆ 回到顶部

About

针对EVM7702被盗钱包的拯救者工具箱,尤其是base链,Fuck EIP7702 !

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors