Skip to content

Commit 2e30f2f

Browse files
author
neocogent
committed
add pwscan, mchat, update keyfmt
1 parent 8d1128c commit 2e30f2f

File tree

8 files changed

+104
-1
lines changed

8 files changed

+104
-1
lines changed

bkkcoins/keyfmt/README

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
%a = address
1616

1717
eg. "Address: %a\nPrivkey: %w" outputs a format like the vanitygen program
18-
"a:%w" outputs a format good for importing to Electrum
18+
"%a:%w" outputs a format good for importing to Electrum
1919

2020
This generates a new key for importing to Electrum:
2121

bkkcoins/mkseeds/account.pyc

-9.81 KB
Binary file not shown.

bkkcoins/mkseeds/bitcoin.pyc

-17.2 KB
Binary file not shown.

bkkcoins/mkseeds/mnemonic.pyc

-25.8 KB
Binary file not shown.

bkkcoins/mkseeds/transaction.pyc

-23.9 KB
Binary file not shown.

bkkcoins/mkseeds/util.pyc

-6.81 KB
Binary file not shown.

scripts/mchat

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/usr/bin/env python
2+
#
3+
# Test multicast peering
4+
#
5+
import socket,struct,sys,threading
6+
7+
server_addr = '0.0.0.0'
8+
multicast_addr = '224.69.0.1'
9+
port = 6666
10+
11+
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
12+
13+
def listen():
14+
15+
membership = socket.inet_aton(multicast_addr) + socket.inet_aton(server_addr)
16+
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, membership)
17+
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
18+
sock.bind((server_addr,port))
19+
20+
print 'waiting to receive'
21+
while True:
22+
try:
23+
data, addr = sock.recvfrom(255)
24+
except socket.timeout:
25+
print 'timed out'
26+
print '%s %s' % (data, addr)
27+
28+
server = threading.Thread(target=listen)
29+
server.setDaemon(True)
30+
server.start()
31+
32+
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, struct.pack('b', 1))
33+
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, struct.pack('b', 0))
34+
35+
try:
36+
while True:
37+
line = sys.stdin.readline().rstrip('\n')
38+
sock.sendto(line, (multicast_addr,port))
39+
40+
except KeyboardInterrupt:
41+
print 'closing socket'
42+
sock.close()
43+
sys.exit(1)
44+
45+

scripts/pwscan

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#!/usr/bin/env python
2+
#
3+
# Electrum password scanner
4+
#
5+
6+
import sys, time
7+
import aes, hashlib, base64
8+
9+
wildchar = '?'
10+
pwd_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
11+
12+
def sha256(x):
13+
return hashlib.sha256(x).digest()
14+
15+
def pwd_subst(pwd):
16+
if pwd.count(wildchar) == 1:
17+
sys.stdout.write('.')
18+
sys.stdout.flush()
19+
p = pwd.find(wildchar)
20+
for c in pwd_chars:
21+
try:
22+
the_xprv = aes.decryptData(sha256(sha256(pwd[:p]+c+pwd[p+1:])), base64.b64decode(sys.argv[2])).decode("utf8")
23+
except Exception:
24+
pass
25+
else:
26+
if the_xprv != "":
27+
print "\nPWD:", pwd[:p]+c+pwd[p+1:]
28+
print "XPRV:", the_xprv
29+
print "Took %.1f seconds" % (time.time() - started,)
30+
sys.exit(0)
31+
else:
32+
p = pwd.find(wildchar)
33+
for c in pwd_chars:
34+
pwd_subst(pwd[:p]+c+pwd[p+1:])
35+
36+
if len(sys.argv) < 3:
37+
print "Electrum wallet password scanner"
38+
print "Template char is: %s" % wildchar
39+
print "Char set is: %s" % pwd_chars
40+
print "Example template: myPwd%s%s123" % (wildchar,wildchar)
41+
print "1 wildcard ~ few seconds, 2 wildcards ~ few minutes, each added one ~ 60 times longer..."
42+
print "Usage: %s <pwd template> <xprv from wallet file>\n" % sys.argv[0]
43+
sys.exit(0)
44+
if sys.argv[1].count(wildchar) == 0:
45+
print "Need at least one %s in template" % wildchar
46+
sys.exit(0)
47+
48+
started = time.time()
49+
pwd_subst(sys.argv[1])
50+
51+
print "Password not found"
52+
53+
54+
55+
56+
57+
58+

0 commit comments

Comments
 (0)