Pre:
对EVM字节码进行反编译是理解高级语言solidity如何在EVM中运作的一个极好的方式 ——《精通以太坊》
逆向工具BinaryNinja:
破解版安装:
app,找到Binary Ninja,显示包内容,替换文件

1 | # 进入到Crack目录 |
然后就能正常打开了

ethersplay插件:
安装:
-
git clone下载
-
创建venv环境
-
安装依赖包
$ pip install -r requirements.txt
链接到BinaryNinja插件文件夹:

1 | # 进入到插件文件夹 |

配置BinaryNinja的python环境:

Demo使用:
Ethersplay将原始二进制格式的 evm 字节码作为输入。
要获得solidity 文件的字节码,请使用solc:
-
solc --bin-runtime file.sol:打印合约运行时部分的字节码(大多数情况下)。
-
solc --bin file.sol:打印合约(构造函数)的初始化字节码,
test.sol使用以下内容的示例:
1 | contract Test { |
运行solidity编译:
1 | solc --bin-runtime test.sol |
solc 将字节码打印到标准输出:
1 | ======= test.sol:Test ======= |
复制 ascii 十六进制字符串,然后在 Binary Ninja 中创建一个新文件。右键单击并选择Paste From -> Raw Hex。将此文件另存为test.evm并关闭它。
或者,将 ascii 十六进制字符串粘贴到一个新的文本文件中,然后utils/convert_bytecode.py在该文件上运行。
test.evm现在可以加载到BinaryNinja中。
注意:文件必须.evm以EVM字节码二进制文件结尾。
