Merge branch 'master' of github.com:b-mueller/mythril

pull/2/head
Bernhard Mueller 7 years ago
commit 5c5e1aef5a
  1. 66
      README.md

@ -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…
Cancel
Save