Làm thế nào để giải quyết Giải thưởng Khóa riêng OKX của Ngày Thế giới Pi (với mã đầy đủ)

Tác giả:Lydia., Tạo: 2023-03-16 17:19:08, Cập nhật: 2023-08-01 11:35:36

img

Làm thế nào để giải quyết Giải thưởng Khóa riêng OKX của Ngày Thế giới Pi (với mã đầy đủ)

Tôi thấy một số Tycoons trong nhóm nói rằng OKX đang tổ chức một sự kiện bí ẩn Ngày Pi Thế giới, với chủ đề là Exploration, Never Ending.

Là một lập trình viên kỳ cựu, khi tôi thấy tin tức, tôi mỉm cười và mở MacBook Pro của mình, và không cần thêm chi tiết, hãy bắt đầu!

Phân tích

Chính thức, có 61 bit khóa trong hình ảnh và một phần của vòng tròn chồng chéo, như tất cả chúng ta đều biết, chiều dài của khóa riêng là 32 byte, chuyển đổi thành hex là 64 bit cộng với tiền tố 0x, tổng cộng 66 bit, đã có 61 bit, để xem lần đầu tiên, 0X ở dòng đầu tiên trong biểu đồ rõ ràng không phải là Pi, đó là sự khởi đầu của tiền tố khóa riêng, sau đó có khoảng 5 bit (0123456789ABCDEF). Các ký tự được sắp xếp ngẫu nhiên, vì vậy không có gì sai với việc chạy chúng trực tiếp, vì vậy hãy bắt đầu ~

Hãy sử dụng một công cụ Mac để làm sắc nét màu đơn giản:

img

Bằng cách này, máy Mac có thể nhận ra các ký tự trên hình ảnh tự động.

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

Không thể sử dụng trực tiếp. Hãy sửa nó bằng tay. Những người không xác nhận được bao phủ bởi hình ảnh được đánh dấu bằng *. Không chắc. Hãy nói về nó sau. Những chữ khác bị chặn bởi hình có thể được đánh giá bằng cách quan sát hình dạng phông chữ của các phông chữ khác.

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

Kết quả thực hiện là như sau:

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

Có thêm ba bit nữa, và chỉ có ba bit không chắc chắn. Cố gắng loại bỏ chúng, bởi vì 61 bit còn lại đều ổn sau khi loại trừ, chỉ để lại sự khác biệt rõ ràng nhất. Cuối cùng, tiền tố là như sau:

0X1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744

Tiếp theo, chúng ta sẽ sử dụng Python và sử dụng lực để thu thập số dư trên chuỗi OK. Chúng ta có thể so sánh khóa riêng nào có số dư. Trên thực tế, chúng ta cũng có thể chọn khóa công khai với chuyển 314 USDT trước, nhanh hơn. Nhìn vào thông tin trên trang web chính thức nói rằng chúng ta có thể kiểm tra số dư trực tiếp nếu có khí, mã hơi lộn xộn.

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

Chúng ta có thể thấy rằng nó mất 1048576 lần lặp lại, nhưng nó nhanh hơn nhiều với nhiều luồng, chạy nó trên một trong những máy chủ của tôi.

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

Chờ đợi một cách lo lắng, tin xấu đến, và không có kết quả nào trước khi chiến lược kết thúc.

Con đường xoay dọc theo sườn núi

Tôi không nghĩ vậy, tôi không thể tìm ra nó, tôi bắt đầu xem xét các cuộc thảo luận trên twitter, và tôi thấy rằng tất cả mọi người và tôi đã đến cùng một bước, nhưng điều kỳ lạ là không ai nói rằng giải mã là thành công, và các quan chức đã không công bố chính xác 61 bit đầu tiên, sau đó một câu trả lời kỳ lạ thu hút sự chú ý của tôi, bởi vì có một sự khác biệtD2299ở giữa, tôi rất chắc chắn, nhưng anh ta trông rất tự tin.

img

Tuy nhiên, anh ta đã đăng một D2290 61 bit. anh ta cũng nói rằng anh ta đã được kiểm tra cẩn thận. không quan trọng. hãy thử. dù sao đi nữa, đó là lãng phí điện. Với thái độ cố gắng, tôi tìm thấy một vài người khác nói rằng họ đã tìm thấy 61 bit. Các tiền tố tìm thấy trong phần bình luận được thu thập, với mã chỉ đi qua, mã cơ bản không thay đổi, và nó sẽ không được dán nhiều lần.

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

Thực tế, có nhiều tin nhắn mới sau đó, một anh trai có giá trị PI khác với tôi, thật tuyệt vời! Chúng ta hãy chạy với những thứ này đầu tiên, tôi không thể tin vào mắt mình, nhưng nó ra, nó có nghĩa là một trong những tiền tố ở trên là chính xác, mà là rất không khoa học, khóa riêng là:

1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744C8155

Đây là D229, nhưng hình ảnh rõ ràng là D2299, và 731 được theo sau bởi 7, đây là hai, nhưng thực sự, đây là chính xác 61 bit, làm thế nào ông tự tính toán nó là không rõ, vô cùng tò mò, nhưng tôi không nghi ngờ hoạt động của riêng tôi, tôi đã thấy một trong những bình luận nói rằng dịch vụ khách hàng chính thức nói rằng Pi có một phiên bản khác, đó là tôi những người không biết, với những gì tôi đã học được và sự hiểu biết hiện tại của con người về vũ trụ hiểu, chu vi của con số phi lý này có thể đại diện cho vô hạn của vũ trụ, phần phân số của nó không bao giờ lặp lại hoặc kết thúc, bạn có thể giải thích nó như là UUID của vũ trụ bạn đang ở, nếu có các phiên bản khác, có lẽ từ các thế giới song song.

Mã chuyển đổi tiền tệ Web3

Cuối cùng, nó là mã để chuyển tiền thưởng đi, cho thời gian này, tôi sử dụng nền tảng FMZ Web3 trực tiếp, đặt địa chỉ chuỗi để OKC, khóa riêng được thêm vào trao đổi ngẫu nhiên, và sau đó hai dòng sẽ được thực hiện, thực hiện nó trong chế độ công cụ gỡ lỗi trực tiếp.

img

Bằng chứng

Địa chỉ của khóa công khai được giải mã

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

Xem link này:https://www.okx.com/cn/explorer/okc/address/0x0bd08825e05e540c9508961a32e58d14da47275a

TX sau khi được dẫn dắt bởi tôi:https://www.okx.com/cn/explorer/okc/tx/0x4211418b09571011417257201aaf10fc3c5d638809a9456eb5aba5fe8c5d4e2c

Chúng ta có thể thấy rằng địa chỉ người nhận là:

0x25f0a126be95f437ee71d7c4de725567c5f6c731

img

Để chứng minh rằng địa chỉ này là của tôi, tôi đã sử dụng địa chỉ của người nhận này để chuyển tiền đến địa chỉ lỗ đen.

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

Địa chỉ hố đen là:

0x0000000000000000005757572e464d5a2e434f4d

Địa chỉ lỗ đen này chứa một URL giải mã như:

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

Đọc sau

Đây là kết thúc của câu chuyện, và nhìn lại, tôi biết ơn kiến thức mà tôi đã tích lũy qua nhiều năm, nếu không tôi sẽ không thể giải quyết nó nhanh như vậy và tôi sẽ bị đánh bại bởi những người khác. Tôi chắc chắn có một sai lầm trong sơ đồ chính thức, nhưng dù sao, tôi cũng may mắn giải quyết câu trả lời trước khi nó được công bố, và tôi hy vọng OKX sẽ nghiêm ngặt hơn lần sau khi họ tổ chức một hoạt động tương tự.


Có liên quan

Thêm nữa