Skip to content

Instantly share code, notes, and snippets.

@narcelio
Created October 10, 2023 02:09
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save narcelio/5968047c1ab2a5abcd725807a4cc59ea to your computer and use it in GitHub Desktop.
Save narcelio/5968047c1ab2a5abcd725807a4cc59ea to your computer and use it in GitHub Desktop.
Crack da seed do SOUL Bitcoin
#!/usr/bin/env -S pipenv run python3
# -*- coding: utf-8 -*-
#
# (c) Copyright 2023 by Narcelio Filho <narcelio@gmail.com>
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