Type/to search
11
Follow
651
Followers
So knacken Sie OKXs Private-Key-Puzzle-Preis zum Welt-Pi-Tag (mit vollständigem Code)
Original
Created 2023-03-14 23:25:45  Updated 2024-11-29 18:57:29
 6
 2239

img

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

img

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

img

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

python
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.

python
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.D2299Es gibt sicher keine Einwände, aber er wirkt auch sehr zuversichtlich.

img

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.

img

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.

img

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:

img

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

img

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

img

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.

https://www.okx.com/cn/explorer/okc/tx/0xc32b5e299064456af3eb67c34a3b153f74a1bd18a31429052e3e3c5614bcdb6e

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.

Comment
All comments (6)

    104万次得花多少时间

    3 years ago

    20分钟左右

    3 years ago

    Z大牛逼!!!

    3 years ago

    动手能力一流

    3 years ago

    Z大牛逼!!!

    3 years ago

    老铁来了

    3 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)