| name | mythril-symbolic |
| description | Symbolic execution analysis using Mythril for deep vulnerability detection in smart contracts. Supports configurable transaction depth, timeout settings, and proof-of-concept exploit generation. |
| allowed-tools | Read, Grep, Write, Bash, Edit, Glob, WebFetch |
Mythril Symbolic Execution Skill
Deep vulnerability detection through symbolic execution using Mythril, a security analysis tool for EVM bytecode.
Capabilities
- Symbolic Execution: Configure and run symbolic execution analysis
- Transaction Depth Control: Set appropriate depth for complex interactions
- Trace Analysis: Interpret symbolic execution traces
- Integer Issues: Detect overflow/underflow paths (pre-0.8 Solidity)
- State Analysis: Find reentrancy via state change analysis
- Assertion Detection: Identify assertion failures and edge cases
- PoC Generation: Generate proof-of-concept exploit inputs
Installation
pip install mythril
docker pull mythril/myth
myth version
Basic Usage
Analyze Source Code
myth analyze Contract.sol
myth analyze Contract.sol --solv 0.8.20
myth analyze Contract.sol:MyContract
Analyze Bytecode
myth analyze -a 0x<address> --rpc <rpc_url>
myth analyze --bin-runtime contract.bin
Configuration Options
Transaction Depth
myth analyze Contract.sol
myth analyze Contract.sol --execution-timeout 300 -t 3
myth analyze Contract.sol --execution-timeout 600 -t 4
Timeout Settings
myth analyze Contract.sol --execution-timeout 300
myth analyze Contract.sol --solver-timeout 10000
myth analyze Contract.sol --execution-timeout 60 -t 2
Module Selection
myth analyze Contract.sol --modules ether_thief,suicide
Output Formats
Standard Output
myth analyze Contract.sol
JSON Output
myth analyze Contract.sol -o json > report.json
Markdown Output
myth analyze Contract.sol -o markdown > report.md
JSONV2 (Detailed)
myth analyze Contract.sol -o jsonv2 > detailed.json
Vulnerability Detection
Reentrancy Detection
Mythril detects reentrancy by tracking:
- External calls
- State changes after calls
- ETH transfers
==== External Call To User-Supplied Address ====
SWC ID: 107
Severity: Low
Contract: Vulnerable
Function name: withdraw()
PC address: 1234
Estimated Gas Usage: 2500 - 10000
Type: Informational
...
Integer Overflow/Underflow
==== Integer Overflow ====
SWC ID: 101
Severity: High
Contract: Token
Function name: transfer(address,uint256)
PC address: 567
Estimated Gas Usage: 3000 - 5000
A possible integer overflow exists in the function...
Unprotected Self-Destruct
==== Unprotected Selfdestruct ====
SWC ID: 106
Severity: High
Contract: Vulnerable
Function name: kill()
Any sender can trigger self-destruction...
Advanced Usage
Concolic Execution
myth analyze Contract.sol --strategy dfs --execution-timeout 300
Custom Constraints
myth analyze Contract.sol --constraints constraints.json
State Space Pruning
myth analyze Contract.sol --max-depth 30 --call-depth-limit 3
CI/CD Integration
GitHub Actions
name: Mythril Analysis
on: [push]
jobs:
mythril:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Mythril
uses: docker://mythril/myth
with:
args: analyze /github/workspace/contracts/*.sol --solv 0.8.20
Custom Script
#!/bin/bash
for file in contracts/*.sol; do
myth analyze "$file" --solv 0.8.20 -o json > "reports/$(basename $file .sol).json"
done
Interpreting Results
Severity Levels
| Level | Description | Action |
|---|
| High | Critical vulnerability | Fix immediately |
| Medium | Potential issue | Investigate |
| Low | Minor concern | Consider fixing |
| Informational | Code quality | Optional fix |
SWC Registry
| SWC ID | Name | Description |
|---|
| SWC-101 | Integer Overflow | Arithmetic overflow |
| SWC-104 | Unchecked Return | Ignored return values |
| SWC-106 | Unprotected Destruct | Accessible selfdestruct |
| SWC-107 | Reentrancy | State change after call |
| SWC-110 | Assert Violation | Reachable assertion |
| SWC-116 | Timestamp Dependence | Block timestamp usage |
Process Integration
| Process | Purpose |
|---|
smart-contract-security-audit.js | Deep vulnerability analysis |
smart-contract-fuzzing.js | Complement to fuzzing |
invariant-testing.js | Property verification |
Comparison with Other Tools
| Tool | Technique | Speed | Depth |
|---|
| Mythril | Symbolic Execution | Slow | Deep |
| Slither | Static Analysis | Fast | Surface |
| Echidna | Fuzzing | Medium | Medium |
| Certora | Formal Verification | Slow | Deepest |
Best Practices
- Start with quick scans, increase depth as needed
- Use Docker for consistent environment
- Run on CI for automated security checks
- Combine with static analysis (Slither)
- Verify findings manually before reporting
- Use appropriate Solidity version flag
Troubleshooting
Out of Memory
myth analyze Contract.sol --execution-timeout 600 -t 2
Solver Timeout
myth analyze Contract.sol --solver-timeout 30000
Compilation Errors
myth analyze Contract.sol --solv 0.8.20
myth analyze Contract.sol --solc-json solc.json
See Also
skills/slither-analysis/SKILL.md - Static analysis
skills/echidna-fuzzer/SKILL.md - Property-based fuzzing
agents/solidity-auditor/AGENT.md - Security auditor
- Mythril Documentation