Ich habe in der Expertengruppe nebenan gesehen, dass OKX eine Veranstaltung zum Lösen von Rätseln am Welt-Pi-Tag abhält. Das Thema lautet wie folgt
Als ich als erfahrener Programmierer die Neuigkeiten sah, hoben sich meine Mundwinkel leicht, ich öffnete mein MacBook Pro und begann zu arbeiten, ohne etwas zu sagen.
analysieren
Offiziellen Angaben zufolge befinden sich 61 Bits des Schlüssels in dem Teil des Bildes, der sich mit Pi überschneidet. Wie wir alle wissen, beträgt die Länge des privaten Schlüssels 32 Bytes, was in Hex umgewandelt wird, was 64 Bits plus dem Präfix 0x entspricht , insgesamt 66 Bits, 61 Bits sind bereits vorhanden. Auf den ersten Blick ist das “0X” in der ersten Zeile des Bildes offensichtlich nicht Pi, sondern das Präfix des privaten Schlüssels. Dann gibt es 5 Ziffern (0123456789ABCDEF) von zufällige Anordnung dieser Zeichen. Es gibt kein Problem mit Brute Force, also fangen wir an
Verwenden Sie die integrierten Tools des Mac, um die Farbe einfach zu schärfen und anzupassen
Es sieht so aus. Der Mac kann die Zeichen auf dem Bild automatisch erkennen. Kopieren wir sie direkt:
3.141592653589793230X1D64338
А694502884197169399375105820
974925E123078164062862089986
28033DB034211706409914808651
32823066470ED424609550582231
8B3
81284
•探索,
038
永无止境
027
493
05%
0128
4756482337867831731712019091
47D9E56692346034861045432664
8213393607743749141273724587
006606315588174881BEEA209628
2925409192744436789259036001
Das ist definitiv nicht verwendbar. Lassen Sie es uns manuell korrigieren. Wir markieren die unbestätigten, die durch das Bild blockiert werden, als*Nein. Ich bin nicht sicher, ich werde es dir später sagen Andere, die durch das Bild blockiert werden, können durch Beobachtung der Strichform anderer Schriftarten beurteilt werden. Zu diesem Zeitpunkt verwenden wir Python, um den Unterschied zwischen den beiden zu berechnen. Das gleiche wird verwendet_’ bedeutet, dass nur verschiedene
img = '''
3.141592653589793230X1D64338
A694502884197169399375105820
974925E123078164062862089986
28033DB034211706409914808651
32823066470ED424609550582231
8B32594081284811174502841027
0193**2*D2299964462294895493
0381960EFC8103F9365933446128
4756482337867831731712019091
47D9E56692346034861045432664
82133936077A3749141273724587
006606315588174881BEEA209628
2925409192744436789259036001
'''
# 真实圆周率
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 Ausführungsergebnisse sind wie folgt:
___________________0X1D_____
A694________________________
____25E1____________________
____3DB0________4099________
___________ED42_____________
8B32________________________
____**_*D2299_______________
______0EFC___3F93___________
________________731_________
_7D9E_______________________
__________7A37______________
__________________BEEA______
________92744_______________
0X1DA69425E13DB04099ED428B32***D22990EFC3F937317D9E7A37BEEA92744 Len: 64
Es gibt 3 zusätzliche Ziffern, die unsicher sind. Lassen Sie uns diese entfernen und es versuchen. Denn nachdem wir sie eliminiert haben, sind die anderen 61 Ziffern alle richtig. Es werden nur die sichersten Unterschiede beibehalten und das endgültige Präfix lautet wie folgt
0X1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744
Als nächstes müssen wir noch Python verwenden, um den Kontostand in der OK-Kette heftig zu erhöhen und zu vergleichen, welcher private Schlüssel den Kontostand hat. Tatsächlich können Sie auch zuerst den öffentlichen Schlüssel mit 314USDT-Übertragung auswählen, was schneller ist. Laut der offiziellen Website , es ist noch Gas übrig. Überprüfen Sie einfach direkt den Saldo. Der Code ist chaotisch.
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'
# 无所谓优化算法了, 争分夺秒跑密钥
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()
Sie können sehen, dass es 1048576 Mal durchlaufen werden muss. Die Verwendung von Multithreading ist viel schneller. Führen Sie es auf einem meiner Server aus.
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
以下省略......
Ich warte gespannt~~~~, schlechte Nachrichten, es gibt kein Ergebnis, bevor die Strategie beendet wird, alle angezeigten sind Keine
Eine plötzliche Wendung der Ereignisse
Das sollte nicht der Fall sein. Ich konnte es nicht herausfinden. Ich begann, die Diskussionen aller auf Twitter zu lesen und stellte fest, dass alle ähnliche Schritte wie ich befolgt hatten. Aber das Seltsame war, dass niemand gesagt hatte, dass die Entschlüsselung erfolgreich war , und der Beamte hatte es noch nicht bekannt gegeben. Die ersten 61 Ziffern sind korrekt. Zu diesem Zeitpunkt fiel mir eine seltsame Antwort auf, weil es in der Mitte einen Unterschied gab.D2299
Es gibt sicher keine Einwände, aber er wirkt auch sehr zuversichtlich.
Aber die 61. Ziffer, die diese Person angegeben hat, ist D2290. Er sagte auch, dass er es sorgfältig überprüft habe. Es spielt keine Rolle. Versuchen wir unser Glück. Es ist sowieso eine Stromverschwendung.
Mit einer herausfordernden Einstellung fand ich mehrere andere Leute, die Nachrichten hinterließen, in denen sie sagten, sie hätten 61 Personen gefunden, und sie wirkten alle sehr zuversichtlich.
Ich habe alle im Kommentarbereich gefundenen Präfixe gesammelt und sie mit dem vorherigen Code durchlaufen. Der grundlegende Code hat sich nicht wesentlich geändert, daher werde ich ihn nicht erneut einfügen.
prefixs =[
'1DA69425E13DB04099ED428B3202290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B320D2290EFC3F937317D9E7A37BEEA92744',
'1DA694255E3DB040990ED428B3208890EFC3F937317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B3202299EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB01099ED428B3202290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D2290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744',
]
Tatsächlich gibt es mehr neue Kommentare. Der PI-Wert eines Bruders unterscheidet sich von meinem. Das ist erstaunlich. Lassen Sie uns diese zuerst ausführen. Ich kann meinen Augen nicht trauen. Es funktioniert tatsächlich. Das bedeutet, dass eines der oben genannten Präfixe korrekt ist. Das ist nicht wissenschaftlich. Der private Schlüssel lautet:
1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744C8155
Seine ist D229, aber auf dem Bild ist eindeutig D2299 zu sehen, und nach 731 kommt eine 7, er hat aber zwei. Aber es waren die richtigen 61 Ziffern. Ich weiß nicht, wie er das berechnet hat. Ich bin sehr neugierig, aber ich zweifle nicht an meiner Vorgehensweise. Ich habe in den Kommentaren gesehen, dass der offizielle Kundendienst sagte, es gäbe eine andere Version von Pi. Ich bin unwissend. Das erworbene Wissen und das aktuelle Verständnis des Universums durch die Menschen zeigt, dass die irrationale Zahl Pi die Unendlichkeit des Universums darstellen kann und ihr Dezimalteil sich niemals wiederholt oder endet. Man kann es sich als UUID vorstellen des Universums, in dem Sie sich befinden. Wenn es andere Versionen gibt, vielleicht aus einer Parallelwelt.
Dies ist die Antwort des Kundendienstes, nachdem ein weiterer großer Bruder Zweifel geäußert hatte:
Es ist eine Wissenserweiterung.
Web3-Münzübertragungscode
Zum Schluss noch der Code zum Überweisen des Bonus. Diesmal habe ich direkt die Web3-Funktion der FMZ-Plattform verwendet. Ich habe die Chain-Adresse einfach auf OKC gesetzt. Beim Hinzufügen des privaten Schlüssels zur Börse spielt das sowieso keine Rolle. Dann Ich kann es in zwei Zeilen machen. Im Debuggermodus ausführen
beweisen
Geknackte öffentliche Schlüsseladresse
>>> from eth_account import Account
>>> Account.from_key('0x1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744C8155').address
'0x0bd08825e05e540C9508961a32E58D14da47275A'
Link anzeigen: https://www.okx.com/cn/explorer/okc/address/0x0bd08825e05e540c9508961a32e58d14da47275a
TX, nachdem ich es weggenommen habe: https://www.okx.com/cn/explorer/okc/tx/0x4211418b09571011417257201aaf10fc3c5d638809a9456eb5aba5fe8c5d4e2c
Sie können sehen, dass die Empfängeradresse
0x25f0a126be95f437ee71d7c4de725567c5f6c731
Um zu beweisen, dass diese Adresse mir gehört, habe ich die Adresse des Empfängers verwendet, um Geld an eine Black-Hole-Adresse zu überweisen.
Die Adresse des Schwarzen Lochs lautet
0x0000000000000000005757572e464d5a2e434f4d
Diese Black Hole-Adresse enthält eine URL, die nach der Dekodierung
~ % python -c 'print(bytes.fromhex("0000000000000000005757572e464d5a2e434f4d"))'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00WWW.FMZ.COM'
Nachwort
Dies ist das Ende. Rückblickend bin ich dankbar für mein im Laufe der Jahre angesammeltes Wissen. Andernfalls wäre die Geschwindigkeit, mit der ich mein Wissen verbessere, nicht so hoch und andere wären mir voraus gewesen. Ich bin sicher, dass das offizielle Diagramm einen Fehler enthält. Wie auch immer, ich hatte Glück, die Antwort gefunden zu haben, bevor sie veröffentlicht wurde. Ich hoffe, dass OKX beim nächsten Mal, wenn es eine ähnliche Veranstaltung abhält, strenger vorgehen wird.