世界PIデーOKXプライベートキーパズル賞 (コードが完結) を解く方法

作者: リン・ハーンリディア, 作成日:2023-03-16 17:19:08, 更新日:2023-08-01 11:35:36

img

世界PIデーOKXプライベートキーパズル賞 (コードが完結) を解く方法

OKXが"世界パイデーミステリーイベント"を開催しているのを グループ内の大金持ちが言いました テーマは"探索 終わりのない世界"です

退役プログラマーとして ニュースを見ると 微笑んでMacBook Proを開けました さっそく始めましょう

分析

公式には 61 ビットのキーが画像に並び, 円周の部分が重なり合っている. 私的なキーの長さは 32 バイトで, 六角形に変換すると 64 ビット+ 0x 前置詞で,合計 66 ビットで, 61 ビットです. 最初の見方では,チャートの最初の行にある 0X は明らかに Pi ではなく,私的なキー前置詞の始まりです. その後,約 5 ビット (0123456789ABCDEF) があります. 文字はランダムに並べられています.

シンプルに色を鋭くするために Mac ツールを使おう:

img

画面の文字を自動的に認識できます.直接コピーしてみましょう.

3.141592653589793230X1D64338
А694502884197169399375105820
974925E123078164062862089986
28033DB034211706409914808651
32823066470ED424609550582231
8B3
81284
• Exploration, 
038
Never Ending
027
493
05%
0128
4756482337867831731712019091
47D9E56692346034861045432664
8213393607743749141273724587
006606315588174881BEEA209628
2925409192744436789259036001

直接使用できません.手動で修正しましょう.写真に覆われている確認されていないものは *.でマークされています. 確かではありません.後で話しましょう. 図によってブロックされた他のフォントは,他のフォントのストローク形状を観察することによって判断できます.この時点で,私たちは Python を使用して両者の違いを計算し,同じフォントに対して _ を使用し,異なるフォントだけを表示します.

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))

実施結果は以下の通りです.

Copy code
___________________0X1D_____
A694________________________
____25E1____________________
____3DB0________4099________
___________ED42_____________
8B32________________________
____**_*D2299_______________
______0EFC___3F93___________
________________731_________
_7D9E_______________________
__________7A37______________
__________________BEEA______
________92744_______________
0X1DA69425E13DB04099ED428B32***D22990EFC3F937317D9E7A37BEEA92744 Len: 64

余り3つあるが,不確実なものは3つだけある.削除してみよう.他の61ビットを除外した後は大丈夫だから,最も明確な違いしか残っていない.最後に前項は次のとおりである:

0X1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744

次に,私たちはPythonを使用して,OKチェーン上のバランスをクロールするためにフォースを使用します. どのプライベートキーがバランスを持っているかを比較することができます. 実際,私たちは最初に314USDTの転送でパブリックキーを選択することもできます. これはより速くなります. 公式ウェブサイトの情報を参照して,ガスがあれば直接バランスを確認することができます. コードは少し混乱しています.

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()
    

複数のスレッドで 速く動作します 私のサーバーの"つで実行できます

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

不安で待った~~~ 悪いニュースが来て,戦略が終了する前には結果がなかった. すべては無として表示されました.

道は山岳に沿って曲がる

ツイッターで議論を始めました. そして私は,みんなと私が同じステップにたどり着いたことを発見しました. しかし,奇妙なことは,誰も暗号解読が成功したと言っていないこと, そして,公式は最初の61ビットを正しく発表していないこと,D2299中央に,私は非常に確信しています, しかし彼は非常に自信に見えます.

img

しかし,彼は61ビットD2290を投稿しました. 彼はまた,彼は慎重にチェックされたと言いました. それは問題ではありません. リスクを取ります. とにかく,それは電気の無駄です. 61ビットを見つけました.彼らは皆とても自信でした. コメント欄に表示されている前置き符号は, コードがちょうど横切って, 基本的なコードが変更されず, 繰り返し貼り付けられることはありません.

prefixs =[
'1DA69425E13DB04099ED428B3202290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B320D2290EFC3F937317D9E7A37BEEA92744',
'1DA694255E3DB040990ED428B3208890EFC3F937317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B3202299EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB01099ED428B3202290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D2290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744',
]

兄弟のPI値が私と違って 驚きました! 上の前項のうちの1つが正しいことを意味します. これは非常に非科学的です. プライベートキーとは:

1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744C8155

これはD229ですが 画像は明らかにD2299で 731は7で続きますが 2ですが 実はこれは正しい61ビットです 彼が自分で計算した方法は不明です 信じられないほど好奇心旺盛ですが 私は自分の操作を疑いません 公式の顧客サービスが Piには別のバージョンがあると言いましたとコメントの1つを見てきました 私が学んだことと 現在の宇宙の理解を無視していたのは私でした この不合理数体の周りは宇宙の無限性を表すことができます その分数は決して繰り返したり終わったりしません

Web3通貨換算コード

チェーンのアドレスを OKC に設定し,プライベートキーをランダムに交換に追加し,その後2行が完了します. 直接デバッグツールモードで実行します.

img

証拠

解読された公開鍵のアドレス

>>> from eth_account import Account
>>> Account.from_key('0x1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744C8155').address
'0x0bd08825e05e540C9508961a32E58D14da47275A'

リンクを見てくださいhttps://www.okx.com/cn/explorer/okc/address/0x0bd08825e05e540c9508961a32e58d14da47275a

TXは私の指揮下にあったhttps://www.okx.com/cn/explorer/okc/tx/0x4211418b09571011417257201aaf10fc3c5d638809a9456eb5aba5fe8c5d4e2c

宛先は次のとおりです.

0x25f0a126be95f437ee71d7c4de725567c5f6c731

img

この住所が私のものであることを証明するために この受信者の住所を使って ブラックホールの住所へ転送しました

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

ブラックホールの住所は:

0x0000000000000000005757572e464d5a2e434f4d

このブラックホールのアドレスには,以下のように解読されたURLが含まれています.

~ % python -c 'print(bytes.fromhex("0000000000000000005757572e464d5a2e434f4d"))'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00WWW.FMZ.COM'

フォースクリプト

これが物語の終わりです 振り返ってみると 私は長年に渡って蓄積した知識に感謝しています そうでなければ こんなに早く解明できず 他者によって打ち負かされていたでしょう 公式の図には間違いがあったと思いますが いずれにせよ 公開される前に答えを解明できたのが 幸運でした OKXが次回同様の活動を行うとき より厳格な対応を 期待しています


関連性

もっと