mirror of https://github.com/ConsenSys/mythril
commit
5c5e1aef5a
@ -0,0 +1,66 @@ |
|||||||
|
# Mythril |
||||||
|
|
||||||
|
Mythril is an assembler and disassembler for Ethereum VM bytecode. It was created for low-level testing/fuzzing of EVM implementations. |
||||||
|
|
||||||
|
## Installation |
||||||
|
|
||||||
|
Clone the git repo: |
||||||
|
|
||||||
|
```bash |
||||||
|
$ git clone https://github.com/b-mueller/mythril/ |
||||||
|
$ pip install -r requirements.txt |
||||||
|
``` |
||||||
|
|
||||||
|
## Usage |
||||||
|
|
||||||
|
To disassemble a piece of bytecode, pass it on the command line: |
||||||
|
|
||||||
|
```bash |
||||||
|
$ ./mythril.py -d -c "0x606060405050" |
||||||
|
PUSH1 0x60 |
||||||
|
PUSH1 0x40 |
||||||
|
POP |
||||||
|
POP |
||||||
|
``` |
||||||
|
|
||||||
|
### Modifying and re-assembling code |
||||||
|
|
||||||
|
Mythril can assemble code from input files that contain one instruction per line. To start from an existing contract, save the disassembly to a text file: |
||||||
|
|
||||||
|
```bash |
||||||
|
$ ./mythril.py -d -c "0x606060405050" -o code.easm |
||||||
|
``` |
||||||
|
|
||||||
|
Edit the instructions in a text editor. For example, we can change the two `PUSH` instruction from the original example: |
||||||
|
|
||||||
|
``` |
||||||
|
PUSH2 0x4050 |
||||||
|
PUSH4 0x60708090 |
||||||
|
POP |
||||||
|
POP |
||||||
|
``` |
||||||
|
|
||||||
|
Save the file and run Mythril with the `-a` flag to re-assemble: |
||||||
|
|
||||||
|
``` |
||||||
|
$ ./mythril.py -a code.easm |
||||||
|
0x61405063607080905050 |
||||||
|
``` |
||||||
|
|
||||||
|
The virtual machine language is described in the [Ethereum Yellowpaper](http://gavwood.com/paper.pdf). |
||||||
|
|
||||||
|
### Loading a contract from the Ethereum blockchain |
||||||
|
|
||||||
|
You can also load code from an existing contract in the Ethereum blockchain. For this, you need to have a full node running, and the RPC debug interface must be activated. For example, when running `geth` you can do this as follows: |
||||||
|
|
||||||
|
```bash |
||||||
|
$ geth --syncmode full --rpc --rpcapi eth,debug |
||||||
|
``` |
||||||
|
|
||||||
|
To load contract code from your node, pass the TxID of the transaction that created the contract: |
||||||
|
|
||||||
|
```bash |
||||||
|
./mythril.py -d -t 0xbf7518b40ab1242af74229512592f77736569157faffbf373cc1b4f5d499b967 |
||||||
|
``` |
||||||
|
|
||||||
|
Note: If you want to get code from the Ethereum mainnet, it is easier to download it from [Etherscan](https://etherscan.io). |
Loading…
Reference in new issue