WhatsABI 简介

从 EVM 字节码中猜测出 ABI(和其他元数据),即使没有源代码。

特点

WhatsABI 在一些重要方面与其他 EVM 分析工具不同:

  • 使用 TypeScript 构建,依赖最小化,以便在浏览器中运行并嵌入钱包中

  • 所使用的算法仅限于具有较小常数因子的算法,以确保复杂的合同不会导致超时或使用无限内存

  • 不依赖于源代码,因此可以与未经验证的合约一起使用。

  • 不假设源语言,因此可以适用于除 Solidity(Vyper,甚至手写汇编)之外的源语言

  • 开放源代码(MIT 许可证),以便任何人都可以使用它

使用 TypeScript 构建,依赖最小化,以便在浏览器中运行并嵌入钱包中

所使用的算法仅限于具有较小常数因子的算法,以确保复杂的合同不会导致超时或使用无限内存

不依赖于源代码,因此可以与未经验证的合约一起使用。

不假设源语言,因此可以适用于除 Solidity(Vyper,甚至手写汇编)之外的源语言

开放源代码(MIT 许可证),以便任何人都可以使用它

可以做什么

  • 从字节码返回选择器

  • 从选择器中查找函数签名

  • 解决代理合同

从字节码返回选择器

从选择器中查找函数签名

解决代理合同

使用方法

安装

使用

控制台将打印合约地址、abi 等数据

(完整项目见 whatsabi [2] )

其它方法

  • selectorsFromBytecode : 从合约字节码中获取函数选择器
    whatsabi.selectorsFromBytecode(code)

  • abiFromBytecode :从合约字节码中获取 ABI
    whatsabi.abiFromBytecode(code)

  • loadFunctions :获取函数选择器匹配的函数签名
    new whatsabi.loaders.OpenChainSignatureLookup().loadFunctions("0x06fdde03")

  • loadEvents :获取函数选择器匹配的函数签名
    new whatsabi.loaders.OpenChainSignatureLookup().loadEvents("0x721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f")

selectorsFromBytecode : 从合约字节码中获取函数选择器
whatsabi.selectorsFromBytecode(code)

abiFromBytecode :从合约字节码中获取 ABI
whatsabi.abiFromBytecode(code)

loadFunctions :获取函数选择器匹配的函数签名
new whatsabi.loaders.OpenChainSignatureLookup().loadFunctions("0x06fdde03")

loadEvents :获取函数选择器匹配的函数签名
new whatsabi.loaders.OpenChainSignatureLookup().loadEvents("0x721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f")

注意事项

  • 不一定能找到有效的函数选择器

  • 有一些参数存在的猜测,不够可靠

  • 事件解析有些不稳定

不一定能找到有效的函数选择器

有一些参数存在的猜测,不够可靠

事件解析有些不稳定

微信里点“发现”,扫一下二维码便可将本篇文章分享至朋友圈