# 通过16进制调用闭源合约 **Published by:** [GZY499](https://paragraph.com/@gzy499/) **Published on:** 2025-06-27 **URL:** https://paragraph.com/@gzy499/16 ## Content 在日常我们与合约交互的时候,通常是走网页前端弹出钱包,确认交易进行的; 但是如果网页卡住了,那么往往会错过一些重要的机会; 这个时候我们其实也可以直接在链上与合约交互; -如图所示: 1️⃣进入区块浏览器;2️⃣输入合约地址;3️⃣选择交易的函数;4️⃣填入交易的参数,5️⃣点write就可以了!但是有些时候,合约可能是闭源的,比如 fourmeme平台公售UPTOP代币 那次这种就没有办法,像调用开源合约一样去调用合约了; 但是 依旧是可以调用 的; 1️⃣第一步:我们可以先去区块浏览器,找到别人成功调用的哈希(也可以自己手动调用一次) 2️⃣第二步:查看哈希最下面的input Data比如这个哈希,是关于UPTOP的退款调用通过这个哈希的input data,我们就知道了: 调用了0xfa89401a这个方法 + 传入了一个参数 这个时候 我们可以点进合约,多看几个别人的哈希,会发现: 别人调用的哈希input data都一样;那就说明,所有人传入的参数都一样; 这种时候我们复制这段16进制data,向合约地址转账0BNB,携带这段16进制,就可以成功调用了 但是有一些时候,合约是闭源的,同时大家传入的16进制data也不一样的时候,这种时候怎么办呢? 其实 依旧是有办法的,就是需要我们去通过16进制 calldata去 猜参数比如这个哈希,是当时公售UPTOP代币那次的哈希依旧按照同样的方法找到input data: “0xf581463e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a0db359c38414b5f145f65cc1c69d9253067c4300000000000000000000000000000000000000000000003635c9adc5dea00000000000000000000000000000000000000000000000000000e492fea5dcb6cdb100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000” 通过解析可以大概分析出 包含6️⃣个参数 (怎么解析后面会说~) 1️⃣:0 2️⃣:0x8a0db359c38414b5f145f65cc1c69d9253067c43 (UPTOP代币合约地址) 3️⃣:1000 4️⃣:16.47050677557335 5️⃣:0 6️⃣:0 通过这6️⃣个参数,我们大概可以猜出 1️⃣ 、 5️⃣ 、 6️⃣号参数 都是固定的为: 0 2️⃣号参数代表 UPTOP合约地址 ,也是固定的 3️⃣号参数代表 购买的UPTOP代币数量,也可以是固定的 那么4️⃣号参数就是唯一一个不固定的参数,我们就可以分析,这代表什么意思 因为UPTOP代币的价格是波动的,越来越高,所以我们可以大概猜出4️⃣号参数是类似 “滑点” 、 最多接受使用多少USD1的一个参数 那么如果我们把这个值直接改到20(公售的最高价) 代表最多接受使用20USD1 去 购买1000UPTOP,那么这个参数也可以被固定住了; 修改以后的16进制为: 0xf581463e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a0db359c38414b5f145f65cc1c69d9253067c4300000000000000000000000000000000000000000000003635c9adc5dea00000000000000000000000000000000000000000000000000001158e460913d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 向合约转账0BNB,携带这段16进制data,就可以完成与合约的交互啦最后:简单类型的 16进制数据解析 和 修改器 网站: https://calldata-evm.vercel.app/ 总结: 面对闭源合约时 ,如果16进制一样,那么直接复制 inputdata 调用即可 如果是简单的参数,可以通过分析修改器,解析修改,然后调用 如果是复杂的参数 ,比如一些bytes tuple[] 类型的参数,就有点复杂了….放弃吧 最后欢迎大家关注我的推特: https://x.com/GZY499G ## Publication Information - [GZY499](https://paragraph.com/@gzy499/): Publication homepage - [All Posts](https://paragraph.com/@gzy499/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@gzy499): Subscribe to updates