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字节码二进制文件结尾。