一步步拆解以太坊「十六进制 mint」:用 Input Data 免授权撸 NFT 的全过程

·

早上一睁眼,朋友圈都在晒 WomenUniteNFT 的“白嫖”战果,核心秘诀只有一个:通过 MetaMask 手动输入 十六进制 Input Data 直接调用合约「mint」。
下文把整个过程拆到最细,带你从 0 开始复刻这一技巧——看懂它,以后再遇到「零元购」空投或薅羊毛项目就能举一反三。

一、为什么用 Transaction Input Data 就能免费 mint?

很多时候,合约里会留下开发者急于删掉的 payable = 0 的铸币函数,只要传对参数就能 0 ETH 抢 NFT。但因为公开的前端已经下线,普通人无从下手。
解决思路很简单:用 Transaction Input Data 在 MetaMask 里硬切掉前端,直接与合约对话——这就是“十六进制 mint”的由来。

核心关键词:

以太坊 Transaction、Input Data、十六进制 mint、合约调用、MetaMask、WomenUniteNFT


二、以太坊 Transaction 的四个关键字段

字段作用说明
from你的钱包地址
to转账地址 调用合约地址
value要发送的 ETH 数量
inputData这次交易的“附加信”——告诉合约想执行哪个函数、附带什么参数

普通转账的 Input Data 为 0x,因为「who、how much、to whom」已经刻在 from/to/value 里;
合约交互必须把函数名和参数压缩进 Input Data,矿工/验证节点读取后才知道你想干什么。


三、实战:把 WomenUniteNFT 合约当成案例

Tx 哈希:0x64c55a520934460ef87a1bd5f0e86c837babae86897ddf285ae4dc2feafa166d
这张链上交易实况可以一眼看出:value 为 0,Input Data 超长,正是 免费铸造 250 个 Token 的证据。

1. 定位要调用的函数

开发者反编译后发现漏洞函数为
def mint(uint256 _wad) payable:
简单说:传任意整数 _wad,就能 一次性铸造 _wad 个 NFT且无需支付 mint 费用

2. 如何生成「方法标识」(Method ID)

  1. 取函数签名文本:mint(uint256)
  2. 用 Keccak-256 哈希:得到 a0712d68… 取前八位 ⇒ 就是 方法标识

3. 补充参数至 64 位

uint256 类型需要 64 位十六进制(256 bit / 4 = 64 字符)。
我要一次 mint 250 个:

4. 合并成完整 Input Data

把「方法标识」+「补零后的参数」黏在一起:

a0712d6800000000000000000000000000000000000000000000000000000000000000fa

👆 这就是最终要塞进 MetaMask Input Data 框的一大坨十六进制。

FAQ · 现场解惑

问:是不是所有函数都只要复制字符串就行?
答:错!函数名或参数类型一变,生成的哈希就会变,方法标识随之完全不同,必须重新算。

问:多参数时怎么办?
答:一个参数 = 64 位十六进制。若函数签名为 mint(address,uint256),Input Data 就依次拼接:Method ID + Address(64位) + _wad(64位)

问:6000 gas limit 够吗?
答:不够。免费铸造通常仍在链上存数据,gas limit 建议设 120,000 起步,实测 WomenUniteNFT 140k 以上更稳


四、在 MetaMask 里“十六进制 mint”的 30 秒流程

  1. 官方合约地址(Etherscan 打开 → Contract → Code → 复制地址
  2. 打开 MetaMask → 发起转账 → 填入合约地址 作为 receiving address
  3. 在 “Hex Data” 栏粘贴上面生成的 Input Data
  4. amount 设为 0,叫矿工费后确认即可
示例数值对照
amount: 0 ETH
gas limit: 150000
Hex Data: a0712d6800...00fa

👉 现在就打开浏览器验证以上 hex 数据吧,边读边动手,印象更深!


五、安全细节 & 进阶玩法

场景注意点
合约重名先确认字节码里的方法签名完全一致,再去拼十六进制。用 Etherscan 的 Bytecode Decompiler 反编译后对一遍源码。
前端阻塞若项目方在前端把 mint 按钮藏起,你只能手动 Input 调用。
限时白名单十六进制也跳不过 merkle 树验证,方法一样,需先拿到 proof,再手动拼接到参数里。
批量脚本进阶玩家可以用 web3.js / ethers.js 动态生成 byte4 + bytes32 格式,把 10 行 js 变成一次性脚本。

👉 如何用 Etherscan 反编译并核实函数,这里有完整实操领进门,10 分钟上手。


六、浏览器工具齐上阵:一条龙算出方法标识

  1. 打开 https://emn178.github.io/online-tools/keccak_256.html
  2. 输入 mint(uint256) 点计算 → 复制前 8 位
  3. 用 Windows 计算器或脚本把 250 转十六进制→补零→拼接
  4. 最终得到 1 行 hex,用任意钱包直接执行

再举一例:动态参数拼接计算

假设你想 mint 1337 个:


FAQ · 常见问题速查

Q1 Input Data 长度必须是 74 位吗?
A:没固定长度。Method ID 8 位 + 64 × 参数个数,三部分加起来就是总长度。

Q2 手动 Gas Price 填多少?
A:看区块浏览器「Gas Tracker」实时 Gas,高于平均值 1–2 Gwei 快速打包最划算。高峰期可翻倍。

Q3 MetaMask 报错“execution reverted”怎么办?
A:99% 是三件事:

Q4 如果项目方把函数改名 openMint
A:把函数签名 openMint(uint256) 重新跑 Keccak-256 即可,只要新的方法标识对,逻辑不变就能继续 mint


七、小结 & 思维拓展

“十六进制 mint”的本质:
跳过前端,通过 Assembly 级精准指令与合约交流
掌握后,不仅能薅空投,还能快速验证合约逻辑漏洞、做前端被墙时代下的应急交互,甚至给自己的 DApp 构建更灵活的可组合入口。

当然,链游无风险,入市需谨慎。动钱包前做好这些:

愿下次一睁眼就是钱包红利的截图,而非 phishing 链接的陷阱。