Created
October 10, 2023 02:09
-
-
Save narcelio/5968047c1ab2a5abcd725807a4cc59ea to your computer and use it in GitHub Desktop.
Crack da seed do SOUL Bitcoin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env -S pipenv run python3 | |
# -*- coding: utf-8 -*- | |
# | |
# (c) Copyright 2023 by Narcelio Filho <[email protected]> | |
import aiorpcx | |
import asyncio | |
import sys | |
import traceback | |
from electrum import bitcoin | |
from electrum.bip32 import BIP32Node | |
from electrum.bitcoin import pubkey_to_address | |
from electrum.keystore import bip39_is_checksum_valid | |
from electrum.keystore import bip39_to_seed | |
from electrum.mnemonic import Wordlist | |
async def electrumx(method, args=()): | |
async with aiorpcx.connect_rs('localhost', 50001) as session: | |
result = await session.send_request(method, args) | |
return result | |
async def get_balance(addr): | |
sh = bitcoin.address_to_scripthash(addr) | |
balance = await electrumx('blockchain.scripthash.get_balance', [sh]) | |
return balance | |
def parse_seed(seed): | |
seed = bip39_to_seed(seed, passphrase='') | |
hexadecimal = seed.hex() | |
root = BIP32Node.from_rootseed(seed, xtype='standard') | |
xprv = root.to_xprv() | |
root = BIP32Node.from_rootseed(seed, xtype='p2wpkh') | |
zprv = root.to_xprv() | |
xnode = BIP32Node.from_xkey(zprv) | |
return xnode | |
def derive_address(node, path, addr_type='p2wpkh'): | |
sub = node.subkey_at_private_derivation(path) | |
xpub = sub.convert_to_public() | |
addr = pubkey_to_address(addr_type, pubkey=xpub.eckey.get_public_key_hex()) | |
return addr | |
async def main(): | |
SEED = 'dismiss senior frozen monkey organ sorry isolate local ankle vehicle' | |
path = "m/84'/0'/0'/0/0" | |
wordlist = Wordlist.from_file("english.txt") | |
for w1 in wordlist: | |
for w2 in wordlist: | |
seed = SEED + ' ' + w1 + ' ' + w2 | |
is_checksum_valid, is_wordlist_valid = bip39_is_checksum_valid(seed, wordlist=wordlist) | |
if is_checksum_valid: | |
xnode = parse_seed(seed) | |
addr = derive_address(xnode, path) | |
balance = await get_balance(addr) | |
confirmed = balance['confirmed'] | |
if confirmed > 0: | |
print(seed) | |
sys.exit(0) | |
if __name__ == '__main__': | |
loop = asyncio.get_event_loop() | |
forecast = loop.run_until_complete(main()) | |
loop.close() | |
# vim:tabstop=4:expandtab:smartindent |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment