以太坊上的智能合约几乎都是开源的,没有开源的智能合约就无从信任。但有些智能合约没有开源,那怎么办呢?反编译。直接研究EVM的ByteCode。
比如说Theta代币的智能合约就没有开源:
1)逆向工具Ethersplay和Porosity
这篇博客很详细的介绍Ethersplay的使用以及EVM智能合约的结构:https://arvanaghi.com/blog/reversing-ethereum-smart-contracts/。Etherplay是Binary Ninja的插件。Binary Ninja是收费软件,暂时没有尝试。
Porosity是开源的反编译工具:https://github.com/comaeio/porosity。我在Mac上尝试反编译Theta的智能合约,发现解析的有问题。
2)手动分析
从上图,我们可以发现transferFrom的跳转偏移地址(一般的智能合约是有初始程序的,Theta没有。如果有初始程序的话,需要加上初始程序的大小)。
用编辑工具获取从编译地址后的ByteCode,并使用EtherScan提供的翻译工具查看操作字:https://etherscan.io/opcode-tool。
下图是从0x212开始的代码信息:
总结:EVM的ByteCode反编译最好用反编译工具(推荐收费软件Binary Ninja + Ethersplay插件)。在没有好用的工具的情况下,可以考虑手动分析,虽然慢,但是完全可行。
领取专属 10元无门槛券
私享最新 技术干货