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")
注意事项
不一定能找到有效的函数选择器
有一些参数存在的猜测,不够可靠
事件解析有些不稳定
不一定能找到有效的函数选择器
有一些参数存在的猜测,不够可靠
事件解析有些不稳定
微信里点“发现”,扫一下二维码便可将本篇文章分享至朋友圈
