EVM反编译软件Porosity的使用-mac
生活随笔
收集整理的這篇文章主要介紹了
EVM反编译软件Porosity的使用-mac
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先給出 porosity 的 GitHub 地址:?here
本文也是根據這個網址進行學習。
1. 創建和約
可以使用自己寫的合約,也可以在etherscan?上面找一些合約, 給出例子如下:
//vulnerable.sol pragma solidity ^0.4.4; contract SendBalance {mapping ( address => uint ) userBalances;function SendBalance(){}function getBalance (address u) constant returns ( uint ){return userBalances [u];}function addToBalance () payable{userBalances[msg.sender] += msg.value ;}function withdrawBalance (){if (!(msg.sender.call.gas(0x1111).value (userBalances [msg . sender])())) { throw ; }userBalances [msg.sender ] = 0;} }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
2. 下載porosity 并編譯
下載之后,在終端進入porosity/porosity/porosity目錄 然后輸入:make //編譯你會看到生成了porosity(exec)- 1
- 2
- 3
- 4
- 5
3. 使用porosity
a. 在porosity下創建文件夾 solidity-example (自己取得名字隨意創),并將合約放在該目錄下面。
b. 創建decompile.sh
#!/bin/bash solc --abi -o output vulnerable.sol solc --bin -o output vulnerable.sol solc --bin-runtime -o output vulnerable.solabi=$(< output/SendBalance.abi) echo "This is abi variable: " echo $abibin=$(< output/SendBalance.bin) echo "" echo "This is bin variable: " echo $binbinRuntime=$(< output/SendBalance.bin-runtime) echo "" echo "This is binruntime variable: " echo $binRuntimeecho "" echo "Firstly listing functions: " #注意路徑,指向的是前面編譯之后生成的porosity文件 ../porosity/porosity/porosity --code $bin --abi $abi --list --verbose 0 echo "Now performing decompilation: " ../porosity/porosity/porosity --code $bin --abi $abi --decompile --verbose 0- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
c. 授權decompile.sh (只有第一次需要)
輸入:chmod 777 decompile.sh- 1
- 2
d.運行decompile.sh
輸入:./decompile.sh- 1
- 2
e. 結果,類似于
Porosity v0.1 (https://www.comae.io) Matt Suiche, Comae Technologies <support@comae.io> The Ethereum bytecode commandline decompiler. Decompiles the given Ethereum input bytecode and outputs the Solidity code.Attempting to parse ABI definition... Success. [+] Hash: 0x0A19B14A (trade) (1 references) [+] Hash: 0x0B927666 (order) (1 references) [+] Hash: 0x19774D43 (orderFills) (1 references) [+] Hash: 0x278B8C0E (cancelOrder) (1 references) [+] Hash: 0x2E1A7D4D (withdraw) (1 references) [+] Hash: 0x338B5DEA (depositToken) (1 references) [+] Hash: 0x46BE96C3 (amountFilled) (1 references) [+] Hash: 0x508493BC (tokens) (1 references) [+] Hash: 0x54D03B5C (changeFeeMake) (1 references) [+] Hash: 0x57786394 (feeMake) (1 references) [+] Hash: 0x5E1D7AE4 (changeFeeRebate) (1 references) [+] Hash: 0x65E17C9D (feeAccount) (1 references) [+] Hash: 0x6C86888B (testTrade) (1 references) [+] Hash: 0x71FFCB16 (changeFeeAccount) (1 references) [+] Hash: 0x731C2F81 (feeRebate) (1 references) [+] Hash: 0x8823A9C0 (changeFeeTake) (1 references) [+] Hash: 0x8F283970 (changeAdmin) (1 references) [+] Hash: 0x9E281A98 (withdrawToken) (1 references) [+] Hash: 0xBB5F4629 (orders) (1 references) [+] Hash: 0xC281309E (feeTake) (1 references) [+] Hash: 0xD0E30DB0 (deposit) (1 references) [+] Hash: 0xE8F6BC2E (changeAccountLevelsAddr) (1 references) [+] Hash: 0xF3412942 (accountLevelsAddr) (1 references) [+] Hash: 0xF7888AEC (balanceOf) (1 references) [+] Hash: 0xF851A440 (admin) (1 references) [+] Hash: 0xFB6E155F (availableVolume) (1 references)- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
總結
以上是生活随笔為你收集整理的EVM反编译软件Porosity的使用-mac的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android通过Geth RPC接口实
- 下一篇: Truffle合约交互 - WEB端对以