0%

StudyRecord-逆向工具BinaryNinja搭配ethersplay使用记录

Pre:

对EVM字节码进行反编译是理解高级语言solidity如何在EVM中运作的一个极好的方式 ——《精通以太坊》

逆向工具BinaryNinja:

破解版安装:

下载链接

app,找到Binary Ninja,显示包内容,替换文件
20220717095312

1
2
3
# 进入到Crack目录
# 签名方法
codesign --sign - --force --deep /Applications/Binary\ Ninja.app

然后就能正常打开了

20220717105254

ethersplay插件:

github链接

安装:

  • git clone下载

  • 创建venv环境

  • 安装依赖包 $ pip install -r requirements.txt

链接到BinaryNinja插件文件夹:

20220717105648

1
2
3
# 进入到插件文件夹
# 创建链接
ln -s <your_download_location>/ethersplay/ethersplay .

20220717105809

配置BinaryNinja的python环境:

20220717110136

Demo使用:

Ethersplay将原始二进制格式的 evm 字节码作为输入。

要获得solidity 文件的字节码,请使用solc

  • solc --bin-runtime file.sol:打印合约运行时部分的字节码(大多数情况下)。

  • solc --bin file.sol:打印合约(构造函数)的初始化字节码,

test.sol使用以下内容的示例:

1
2
3
4
5
6
7
8
9
10
contract Test {
uint256 value;
function Test() {
value = 5;
}
function set_value(uint256 v) {
value = v;
}
function() payable {}
}

运行solidity编译:

1
solc --bin-runtime test.sol

solc 将字节码打印到标准输出:

1
2
3
======= test.sol:Test =======
Binary of the runtime part:
60606040523615603d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b0f2b72a146041575b5b5b005b3415604b57600080fd5b605f60048080359060200190919050506061565b005b806000819055505b505600a165627a7a72305820c177a64bf54a26574918ddc2201f7ab2dd8619d6c3ee87ce9aaa1eb0e0b1d4650029

复制 ascii 十六进制字符串,然后在 Binary Ninja 中创建一个新文件。右键单击并选择Paste From -> Raw Hex。将此文件另存为test.evm并关闭它。

或者,将 ascii 十六进制字符串粘贴到一个新的文本文件中,然后utils/convert_bytecode.py在该文件上运行。

test.evm现在可以加载到BinaryNinja中。

注意:文件必须.evm以EVM字节码二进制文件结尾。

20220717110953

Refs: