Ich sah einige Tycoons in der Gruppe sagen, dass OKX ein Welt-Pi-Tag-Geheimnis-Event mit dem Thema
Als erfahrener Programmierer, als ich die Nachrichten sah, lächelte ich und öffnete mein MacBook Pro, und ohne weiteres, lasst uns anfangen!
Analyse
Offiziell gibt es 61 Bits Schlüssel auf dem Bild und der Teil der Umfangsüberschneidung, wie wir alle wissen, die Länge des privaten Schlüssels ist 32 Bytes, umgewandelt in Hex ist 64 Bits plus 0x Präfix, insgesamt 66 Bits, es gibt bereits 61 Bits, für den ersten Blick, die
Lassen Sie uns ein Mac-Tool verwenden, um die Farbe einfach zu schärfen:
Auf diese Weise kann der Mac die Zeichen auf dem Bild automatisch erkennen.
3.141592653589793230X1D64338
А694502884197169399375105820
974925E123078164062862089986
28033DB034211706409914808651
32823066470ED424609550582231
8B3
81284
• Exploration,
038
Never Ending
027
493
05%
0128
4756482337867831731712019091
47D9E56692346034861045432664
8213393607743749141273724587
006606315588174881BEEA209628
2925409192744436789259036001
Es kann nicht direkt verwendet werden. Lassen Sie uns manuell korrigieren. Die nicht bestätigten, die auf dem Bild abgedeckt sind, sind mit * gekennzeichnet. Nicht sicher. Lassen Sie uns später darüber sprechen. Die anderen, die durch die Abbildung blockiert sind, können beurteilt werden, indem man die Strichform anderer Schriftarten beobachtet.
img = '''
3.141592653589793230X1D64338
A694502884197169399375105820
974925E123078164062862089986
28033DB034211706409914808651
32823066470ED424609550582231
8B32594081284811174502841027
0193**2*D2299964462294895493
0381960EFC8103F9365933446128
4756482337867831731712019091
47D9E56692346034861045432664
82133936077A3749141273724587
006606315588174881BEEA209628
2925409192744436789259036001
'''
# True Pi
real='''
3.14159265358979323846264338
3279502884197169399375105820
9749445923078164062862089986
2803482534211706798214808651
3282306647093844609550582231
7253594081284811174502841027
0193852110555964462294895493
0381964428810975665933446128
4756482337867831652712019091
4564856692346034861045432664
8213393607260249141273724587
0066063155881748815209209628
2925409171536436789259036001
'''
items = img.strip().split('\n')
diffStr = ''
for pos, line in enumerate(real.strip().split('\n')):
for i, c in enumerate(line):
imgLine = list(items[pos])
if line[i] == imgLine[i]:
imgLine[i] = '_'
else:
diffStr += imgLine[i]
items[pos] = ''.join(imgLine)
print('\n'.join(items))
print(diffStr, 'Len:', len(diffStr))
Die Ergebnisse der Durchführung sind wie folgt:
Copy code
___________________0X1D_____
A694________________________
____25E1____________________
____3DB0________4099________
___________ED42_____________
8B32________________________
____**_*D2299_______________
______0EFC___3F93___________
________________731_________
_7D9E_______________________
__________7A37______________
__________________BEEA______
________92744_______________
0X1DA69425E13DB04099ED428B32***D22990EFC3F937317D9E7A37BEEA92744 Len: 64
Es gibt noch drei, und es gibt nur drei unsichere. Versuchen Sie, sie zu entfernen, denn die anderen 61 Bits sind nach dem Ausschluss in Ordnung, so dass nur der eindeutigste Unterschied übrig bleibt.
0X1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744
Als nächstes werden wir Python verwenden und Kraft verwenden, um das Gleichgewicht auf der OK-Kette zu durchsuchen. Wir können vergleichen, welcher private Schlüssel das Gleichgewicht hat. Tatsächlich können wir auch den öffentlichen Schlüssel mit 314 USDT Transfer zuerst auswählen, was schneller ist. Die Informationen auf der offiziellen Website sagen, dass wir das Gleichgewicht direkt überprüfen können, wenn es Gas gibt, der Code ist ein wenig unordentlich.
import sys
import web3,time,logging
from eth_account import Account
from web3 import Web3
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s')
w3 = Web3(Web3.HTTPProvider("https://exchainrpc.okex.org"))
logging.info(w3.clientVersion)
found = None
def get_balance_gas(key):
global found
_counter += 1
address = Account.from_key(key).address
logging.info('fetch address %s %s' % (found, address))
while True:
try:
balance = w3.eth.get_balance(address)
break
except:
logging.warning(traceback.format_exc())
time.sleep(1)
continue
if balance != 0:
found = key
raise BaseException('Found balance: %s %s' % (address, balance))
return balance
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=50)
keys = []
prefix = '1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744'
# It doesn't matter how to optimize the algorithm. Run the secret key against the clock.
ch = '0123456789ABCDEF'
for a in range(0, 16):
for b in range(0, 16):
for c in range(0, 16):
for d in range(0, 16):
for e in range(0, 16):
keys.append("0x"+prefix+ch[a]+ch[b]+ch[c]+ch[d]+ch[e])
print('all keys:', len(keys))
tasks = [None for t in keys]
for idx, key in enumerate(keys):
tasks[idx] = executor.submit(get_balance_gas, key)
for t in tasks:
t.result()
Wir können sehen, dass es 1048576 Iterationen braucht, aber es ist viel schneller mit Multi-Threading, es auf einem meiner Server läuft.
2023-03-15 00:20:19,491 exchain-v1.6.8.5
all keys: 1048576
2023-03-15 00:20:20,372 fetch address None 0xc20C41f06F2428a0FD84ef03Ec6960992F5f8016
2023-03-15 00:20:20,473 fetch address None 0xcFa87ee54bc1c14c09a3AB3f41640bBab5C5480a
2023-03-15 00:20:20,483 fetch address None 0x126E922652f8B276F231D0eCA94d98685a26a45D
The following is omitted...
Angstvolle Wartezeit~~~, schlechte Nachrichten kamen, und es gab kein Ergebnis, bevor die Strategie ausging.
Der Pfad windet sich entlang der Bergrücken
Ich denke nicht, ich kann es nicht herausfinden, ich begann die Diskussion auf Twitter zu betrachten, und ich fand heraus, dass jeder und ich zu den gleichen Schritten gekommen sind, aber das Seltsame ist, dass niemand gesagt hat, dass die Entschlüsselung erfolgreich ist, und der Beamte hat nicht die richtigen ersten 61 Bits angekündigt, dann erregte eine seltsame Antwort meine Aufmerksamkeit, weil es einen Unterschied gibtD2299
In der Mitte, bin ich mir sehr sicher, aber er sieht schrecklich selbstbewusst aus.
Aber er postete einen 61-Bit-D2290 und sagte, er sei sorgfältig geprüft worden. Mit der Einstellung zu versuchen, fand ich ein paar andere Leute, die sagten, dass sie 61-Bit gefunden hatten. Die Präfixe im Kommentarbereich werden gesammelt, der Code wird nur durchlaufen, der Basiscode hat sich nicht geändert und wird nicht wiederholt eingefügt.
prefixs =[
'1DA69425E13DB04099ED428B3202290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B320D2290EFC3F937317D9E7A37BEEA92744',
'1DA694255E3DB040990ED428B3208890EFC3F937317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B3202299EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB01099ED428B3202290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D2290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744',
]
In der Tat gibt es später noch mehr neue Nachrichten, ein Bruder hat einen anderen PI-Wert als ich, das ist erstaunlich! Lasst uns zuerst mit diesen laufen, ich kann meinen Augen nicht glauben, aber es kam heraus, es bedeutet, dass eines der oben genannten Präfixe richtig ist, was sehr unwissenschaftlich ist, der private Schlüssel ist:
1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744C8155
Hier ist D229, aber das Bild ist eindeutig D2299, und 731 wird von 7 gefolgt, hier ist zwei, aber eigentlich, das ist die richtige 61 Bits, wie er es selbst berechnet ist unbekannt, unglaublich neugierig, aber ich bezweifle nicht meine eigene Operation, sah ich einen der Kommentare sagte, dass der offizielle Kundenservice sagte Pi hat eine andere Version, es war ich, der unwissend war, mit dem, was ich gelernt habe und das aktuelle menschliche Verständnis des Universums Verständnis, der Umfang dieser irrationalen Zahl kann die Unendlichkeit des Universums darstellen, sein Bruchteil Teil nie wiederholt oder endet, können Sie es als die UUID des Universums interpretieren, in dem Sie sich befinden, wenn es andere Versionen gibt, wahrscheinlich aus parallelen Welten.
Web3-Währungsumrechnungscode
Schließlich ist es
Nachweis
Adresse des entschlüsselten öffentlichen Schlüssels
>>> from eth_account import Account
>>> Account.from_key('0x1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744C8155').address
'0x0bd08825e05e540C9508961a32E58D14da47275A'
Schauen Sie sich den Link an:https://www.okx.com/cn/explorer/okc/address/0x0bd08825e05e540c9508961a32e58d14da47275a
TX nach meiner Führung:https://www.okx.com/cn/explorer/okc/tx/0x4211418b09571011417257201aaf10fc3c5d638809a9456eb5aba5fe8c5d4e2c
Wir können sehen, dass die Empfängeradresse lautet:
0x25f0a126be95f437ee71d7c4de725567c5f6c731
Um zu beweisen, dass diese Adresse meine ist, habe ich die Adresse dieses Empfängers benutzt, um eine Überweisung zu einer Adresse eines Schwarzen Lochs zu machen.
Die Adresse des Schwarzen Lochs lautet:
0x0000000000000000005757572e464d5a2e434f4d
Diese Adresse des Schwarzen Lochs enthält eine URL, die als:
~ % python -c 'print(bytes.fromhex("0000000000000000005757572e464d5a2e434f4d"))'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00WWW.FMZ.COM'
Nachschrift
Das ist das Ende der Geschichte, und im Nachhinein bin ich dankbar für das Wissen, das ich im Laufe der Jahre gesammelt habe, sonst hätte ich es nicht so schnell knacken können und wäre von anderen geschlagen worden. Ich bin sicher, dass es einen Fehler im offiziellen Diagramm gab, aber ich hatte das Glück, die Antwort zu knacken, bevor sie veröffentlicht wurde, und ich hoffe, OKX wird strenger sein, wenn sie das nächste Mal eine ähnliche Aktivität durchführen.