Type/to search
11
Follow
651
Followers
Cara Memecahkan Hadiah Teka-teki Kunci Pribadi OKX untuk Hari Pi Sedunia (dengan Kode Lengkap)
Original
Created 2023-03-14 23:25:45  Updated 2024-11-29 18:57:29
 6
 2239

img

Saya melihat di kelompok ahli sebelah bahwa OKX mengadakan acara pemecahan misteri Hari Pi Sedunia, temanya adalah sebagai berikut

img

Sebagai seorang programmer senior, setelah melihat berita itu, sudut mulut saya sedikit terangkat, dan saya membuka MacBook Pro dan mulai bekerja tanpa berkata apa-apa.

menganalisa

Pejabat mengatakan bahwa ada 61 bit kunci di bagian gambar yang tumpang tindih dengan pi. Seperti yang kita ketahui, panjang kunci privat adalah 32 byte, yang diubah menjadi hex, yaitu 64 bit ditambah awalan 0x. , totalnya 66 bit, 61 bit sudah ada. Sekilas, "0X" di baris pertama gambar itu jelas bukan pi, melainkan awalan kunci privat. Lalu ada 5 digit (0123456789ABCDEF) susunan acak karakter-karakter ini. Tidak ada masalah dengan brute force running, jadi mari kita mulai

Gunakan alat bawaan Mac untuk mempertajam dan menyesuaikan warna secara sederhana

img

Seperti ini. Mac dapat mengenali karakter pada gambar secara otomatis. Mari kita salin langsung:

3.141592653589793230X1D64338 А694502884197169399375105820 974925E123078164062862089986 28033DB034211706409914808651 32823066470ED424609550582231 8B3 81284 •探索, 038 永无止境 027 493 05% 0128 4756482337867831731712019091 47D9E56692346034861045432664 8213393607743749141273724587 006606315588174881BEEA209628 2925409192744436789259036001

Ini jelas tidak dapat digunakan. Mari kita perbaiki secara manual. Kita tandai yang belum dikonfirmasi yang diblokir oleh gambar sebagai*Tidak. Tidak yakin, aku akan memberitahumu nanti.
Yang lainnya yang diblokir oleh gambar dapat dinilai dengan mengamati bentuk goresan font lainnya. Saat ini, kami menggunakan Python untuk menghitung perbedaan antara keduanya. Hal yang sama digunakan_' berarti hanya berbeda

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

Hasil eksekusinya adalah sebagai berikut:

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

Ada 3 digit tambahan, dan ada tepat 3 digit yang tidak pasti. Mari kita coba hilangkan digit-digit tersebut, karena setelah menghilangkannya, 61 digit lainnya semuanya baik-baik saja.
Hanya perbedaan yang paling pasti yang disimpan, dan awalan terakhirnya adalah sebagai berikut

0X1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744

Selanjutnya, kita masih perlu menggunakan Python untuk menaikkan saldo pada rantai OK secara drastis dan membandingkan kunci privat mana yang memiliki saldo. Bahkan, Anda juga dapat memilih kunci publik terlebih dahulu dengan transfer 314USDT, yang lebih cepat. Menurut situs web resmi , masih ada bensin. Cek saldo langsung saja. Kodenya berantakan.

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

Anda dapat melihat bahwa ia perlu dilintasi sebanyak 1048576 kali. Menggunakan multithreading jauh lebih cepat. Jalankan di salah satu server saya.

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 以下省略......

Menunggu dengan cemas~~~~, berita buruk, tidak ada hasil sebelum strategi keluar, semua yang ditampilkan adalah None

Perubahan peristiwa yang tiba-tiba

Seharusnya tidak seperti itu. Saya tidak dapat menemukan jawabannya. Saya mulai membaca diskusi semua orang di Twitter dan menemukan bahwa semua orang telah mengikuti langkah yang sama dengan saya. Namun anehnya, tidak ada yang mengatakan bahwa dekripsi berhasil. , dan petugasnya belum mengumumkannya. 61 digit pertama sudah benar. Saat itu, balasan yang aneh menarik perhatian saya karena ada perbedaan di tengahnya.D2299Tidak ada keberatan, saya yakin, tetapi dia juga tampak sangat percaya diri.

img

Namun, digit ke-61 yang diberikan orang ini adalah D2290. Ia juga mengatakan bahwa ia telah memeriksanya dengan saksama. Tidak masalah. Mari kita coba peruntungan. Itu hanya pemborosan listrik.

img

Dengan sikap mencoba, saya menemukan beberapa orang lain yang meninggalkan pesan yang mengatakan mereka telah menemukan 61 orang, dan mereka semua tampak sangat percaya diri.

img

Saya kumpulkan semua awalan yang ditemukan di area komentar dan telusuri dengan kode sebelumnya. Kode dasarnya tidak banyak berubah, jadi saya tidak akan menempelkannya lagi.

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

Bahkan, ada lebih banyak komentar baru. Nilai PI salah satu saudara berbeda dengan nilai PI saya. Sungguh menakjubkan.
Mari kita coba dulu. Saya tidak percaya dengan apa yang saya lihat. Ini benar-benar berhasil. Ini berarti salah satu awalan di atas benar. Ini tidak ilmiah. Kunci pribadinya adalah:

1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744C8155

Yang ini D229, tapi gambarnya jelas menunjukkan D2299, dan ada angka 7 setelah 731, tapi dia punya dua.
Tapi ternyata 61 digitnya benar. Saya tidak tahu bagaimana dia menghitungnya. Saya sangat penasaran, tetapi saya tidak meragukan operasi saya. Saya melihat di komentar bahwa layanan pelanggan resmi mengatakan ada versi lain dari pi. Saya tidak tahu. Pengetahuan yang dipelajari dan pemahaman manusia saat ini tentang alam semesta, bilangan irasional pi dapat mewakili ketidakterbatasan alam semesta, dan bagian desimalnya tidak akan pernah berulang atau berakhir. Anda dapat menganggapnya sebagai UUID dari alam semesta tempat Anda berada. Jika ada versi lain, mungkin dari dunia paralel.

Ini adalah tanggapan layanan pelanggan setelah kakak besar lainnya menyatakan keraguan:

img

Itu adalah peningkatan pengetahuan.

Kode transfer koin Web3

Terakhir, berikut kode untuk mentransfer bonus. Kali ini saya langsung menggunakan fungsi Web3 dari platform FMZ. Saya hanya mengatur alamat rantai ke OKC. Saat menambahkan kunci pribadi ke bursa, itu tidak masalah. Lalu Saya dapat melakukannya dalam dua baris. Jalankan dalam mode debugger

img

membuktikan

Alamat kunci publik yang diretas

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

Lihat tautan: https://www.okx.com/cn/explorer/okc/address/0x0bd08825e05e540c9508961a32e58d14da47275a

TX setelah saya mengambilnya: https://www.okx.com/cn/explorer/okc/tx/0x4211418b09571011417257201aaf10fc3c5d638809a9456eb5aba5fe8c5d4e2c

Anda dapat melihat bahwa alamat penerima adalah

0x25f0a126be95f437ee71d7c4de725567c5f6c731

img

Untuk membuktikan bahwa alamat ini adalah milik saya, saya menggunakan alamat penerima untuk mentransfer uang ke alamat lubang hitam.

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

Alamat lubang hitam adalah
0x0000000000000000005757572e464d5a2e434f4d

Alamat lubang hitam ini berisi URL yang, setelah didekode,

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

Kata Penutup

Ini adalah akhir. Kalau dipikir-pikir, saya bersyukur atas pengetahuan yang saya kumpulkan selama bertahun-tahun. Kalau tidak, kecepatan pemecahannya tidak akan secepat ini dan yang lain akan mendahului saya.
Saya yakin ada kesalahan dalam diagram resmi. Bagaimanapun, saya beruntung telah memecahkan jawabannya sebelum dipublikasikan. Saya berharap OKX akan lebih teliti saat menyelenggarakan acara serupa berikutnya.

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)