-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsolve.py
executable file
·68 lines (59 loc) · 2.11 KB
/
solve.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/env python3
import requests
import base64
import hashlib
import datetime
import subprocess
import string
host = "http://127.0.0.1:5000/"
session = requests.Session()
def getjob():
r = session.post(host+'getjob').json()
return r['suffix'].encode()
def submitjob(nonce1, nonce2, coin):
payload={
'nonce1': base64.b64encode(nonce1),
'nonce2': base64.b64encode(nonce2),
'coin': coin
}
r = session.post(host+'submitjob', data=payload).json()
return r
print('Running tests')
print(submitjob(b'a',b'a',0))
suffix=getjob()
print(submitjob(b'a',b'a',b'a'))
print(submitjob(b'a',b'a',0))
print(submitjob(b'a',b'b',3))
print(submitjob(b'a',b'b',0))
print('Trying md5 collision')
msg1=bytes.fromhex('4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2')
msg2=bytes.fromhex('4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2')
assert msg1!=msg2 and hashlib.md5(msg1).hexdigest()==hashlib.md5(msg2).hexdigest()
assert hashlib.md5(msg1+suffix).hexdigest()==hashlib.md5(msg2+suffix).hexdigest()
print(submitjob(msg1,msg2,0))
print('Trying sha1 collision')
suffix=getjob()
msg1=open('shattered-1.pdf','rb').read()
msg2=open('shattered-2.pdf','rb').read()
print(submitjob(msg1,msg2,1))
print('Solving sha256')
while True:
suffix=getjob()
print(suffix[0:1],end=' ',flush=True)
if suffix[0:1] == b'a':
print(submitjob(
b'\xc1A\xea\xfb\xa3\xbe\xe4\x02\x9a\xb2\xe2\xc0\xcd\x07\x936\x92\x9a\xc9,\xa5\xf1\x1c"~P8*\x87\r-',
b'\xec\xa0\xbe~\xfb\x82V\xe7}\x99p\x0c\xfd)x/D{5d\xf3\x92jkk\x91Q\xe065j',
2))
break
print('Bruteforce md5')
suffix=getjob()
print(datetime.datetime.now())
with open('md5.bin','wb') as f:
for i in range(2*1024*1024):
f.write(hashlib.md5(str(i).encode()+suffix).digest())
print('Running c code')
result = subprocess.check_output(['./bruteforcediff'])
print(result)
i1,i2,_=[int(s) for s in result.split()]
print(submitjob(str(i1).encode(),str(i2).encode(),0))