Skip to content

Instantly share code, notes, and snippets.

View SomberNight's full-sized avatar

ghost43 SomberNight

View GitHub Profile

Instructions for retrieving your wallet files from Android.

Warnings:

  • deleting the Android app deletes the wallet files
  • rooting your phone might format userspace, hence delete the wallet files

Below procedure has been tested on

  • an unrooted phone running Android 8.0; Electrum version 3.0.2.0 from Google Play
  • an unrooted phone running Android 8.1; Electrum version 3.1.3.0 from Google Play
@SomberNight
SomberNight / get_xpub_from_unsigned_raw_tx.py
Created December 11, 2017 19:55
Electrum: Retrieve xpub from unsigned raw tx
#!/usr/bin/env python3
# tested with electrum 3.0.2
#import lib as electrum
import electrum
unsigned_raw_tx = '0100000001c3152b4707eaf16f068252d50425a3cedb0d207f922099c616f1ebcdd130e811000000005701ff4c53ff0488b21e0000000000000000003a6ac92f44bf918a9ed289b207b5b61a488ea9e04ea3dffd5acf18952fb0a1bd03edbbe79975e4758645e8ecc08a0c1dba2493806edf7b5569e3b1db4d5087a6e500000200fdffffff0240420f00000000001976a914b5d5cddb29e97ce5c0885de7cd7a21397ceba4c788ac64d73c00000000001976a91438ad3c4c411410b49fb9ad46d936d08da76708f388acad241300'
tx = electrum.transaction.Transaction(unsigned_raw_tx)
@SomberNight
SomberNight / bf_missing_seed_word.py
Last active June 7, 2020 15:29
Electrum: bruteforce a single missing word for a seed
#!/usr/bin/python3
import os
import copy
import imp
#imp.load_source('electrum', './electrum')
import electrum
from electrum import bitcoin
@SomberNight
SomberNight / gpg_key_0xE7B748CDAF5E5ED9.txt
Last active June 15, 2021 18:43
gpg key 0xE7B748CDAF5E5ED9 (SomberNight)
GPG key
0xAF5E5ED9
0xE7B748CDAF5E5ED9
4AD64339DFA05E20B3F6AD51E7B748CDAF5E5ED9
4AD6 4339 DFA0 5E20 B3F6 AD51 E7B7 48CD AF5E 5ED9
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFq/xaYBEADLjN4eABFUTJH0OGRE6mtfPz4J2WYU8B3VI0KSKnqSNwGKm6MP
@SomberNight
SomberNight / electrumpro_keystore.py
Created May 8, 2018 08:55
decompiled keystore.py from ElectrumPro 4.0.2 scam
# uncompyle6 version 3.1.3
# Python bytecode 3.5 (3351)
# Decompiled from: Python 3.5.3 (default, Jan 19 2017, 14:11:04)
# [GCC 6.3.0 20170118]
# Embedded file name: site-packages\electrum-4.0.2-py3.5.egg\electrum\keystore.py
import base64, random, threading, requests, time
from unicodedata import normalize
from . import bitcoin
from .bitcoin import *
from . import constants

Keybase proof

I hereby claim:

  • I am SomberNight on github.
  • I am ghost43 (https://keybase.io/ghost43) on keybase.
  • I have a public key whose fingerprint is 4AD6 4339 DFA0 5E20 B3F6 AD51 E7B7 48CD AF5E 5ED9

To claim this, I am signing this object:

@SomberNight
SomberNight / bruteforce_pw.py
Created June 16, 2018 02:30
Electrum Android wallet file: bruteforce 6-digit PIN
# note: for good perfomance, have pycryptodome installed
# (about 20x faster than pyaes for this).
# for ref, it takes about 60 seconds to scan the whole domain for me with pycryptodome.
import electrum
from electrum.wallet import Wallet
from electrum.storage import WalletStorage
storage = WalletStorage('path_to_wallet_file')
wallet = Wallet(storage)
@SomberNight
SomberNight / xpub_to_ypub.py
Last active July 10, 2018 15:31
convert xpub to ypub
from electrum import bitcoin
xpub1 = 'xpub661MyMwAqRbcEcF8odLPZvkWA3xi9ptJqzfzzFFmvNcRtnGb2wzKgVCNN8i1uAwa6kwXLgG7atobaSoExfhpxDfuQp3FfSKPWcocLxKJyk9'
xtype, depth, fingerprint, child_number, c, K_or_k = bitcoin.deserialize_xkey(xpub1, False)
xpub2 = bitcoin.serialize_xpub('p2wpkh-p2sh', c, K_or_k, depth, fingerprint, child_number)
print(xpub2)
@SomberNight
SomberNight / electrum_gap_limits.py
Created July 18, 2018 22:41
Change gap limits without GUI in Electrum
from electrum.storage import WalletStorage
from electrum.wallet import Wallet
#from electrum import constants
#constants.set_testnet()
storage = WalletStorage('/home/user/.electrum/testnet/wallets/default_wallet')
wallet = Wallet(storage)
wallet.change_gap_limit(200)
wallet.gap_limit_for_change = 200
import electrum
from electrum import bip32
initial_xprv = '.......' # TODO fill in
target_xtype = 'p2wpkh' # TODO change?
_, depth, fingerprint, child_number, c, cK = bip32.deserialize_xprv(initial_xprv)
target_xprv = bip32.serialize_xprv(target_xtype, c, cK, depth, fingerprint, child_number)
print(target_xprv)