En la carga de los recursos... Cargando...

Cómo descifrar el premio del rompecabezas de la clave privada de OKX para el Día de la Ronda Mundial (incluido el código completo)

El autor:El inventor de la cuantificación, Creado: 2023-03-14 23:25:45, Actualizado: 2023-09-18 20:08:33

img

Mira el grupo de dioses de al lado que dice que OKX está haciendo el Día Mundial de Desciframiento de la Ronda, el tema es el siguiente:

img

Como un granjero veterano, al ver el mensaje, el borde de la boca se eleva ligeramente, abre mi MacBook Pro, no dice nada, comienza.

El análisis

La clave privada es de 32 bytes, convertida en hex, es decir, 64 bits más el prefijo 0x, un total de 66 bits, ya hay 61 bits. A simple vista, la primera línea de la imagen muestra que el "0X" no es el prefijo de la circunferencia de la clave privada.

La simple manipulación de tonos de hibridación con la herramienta incluida en el Mac

img

Esto es lo que parece, y luego el Mac reconoce automáticamente los caracteres en las imágenes, y nosotros copiamos directamente:

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

Este aspecto no funciona, pero si lo modificamos manualmente, las imágenes ocultas que no están confirmadas se marcan con un *, no muy seguro, más adelante. Otros están bloqueados por el gráfico, y se puede juzgar observando la forma del lápiz de otros tipos de letra, en este caso, en Python, se calcula la diferencia entre los dos, representados por el mismo tag_' y que solo muestran diferencias.

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

Los resultados de la ejecución son los siguientes:

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

Y si le damos tres más, y tenemos tres indeterminados, entonces vamos a eliminarlo, porque si lo eliminamos, los otros 61 no tienen problema. Dejamos sólo las diferencias más definidas, y al final consideramos el prefijo:

0X1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744

En el fondo, hay que subir a Python, la violencia para escalar el saldo en la cadena OK, comparar cuál es la clave privada con el saldo, en realidad, también se puede elegir primero la clave pública con 314 USDT de transferencia, así que es más rápido, ver la información en la web dice que hay gas, entonces es mejor consultar directamente el saldo, el código es más desordenado.

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

Como pueden ver, se necesita 10.485.76 recorridos para ser mucho más rápido con varios hilos, y ponerlo en uno de mis servidores.

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

En medio de la ansiosa espera, las malas noticias llegan, la estrategia no funciona antes de retirarse, está mostrando Ninguno

La cumbre gira alrededor

No debería, Bust me dio la impresión, y entonces empecé a ir a Twitter a ver las discusiones, y me di cuenta de que todo el mundo había dado casi los mismos pasos que yo, pero lo extraño es que nadie había dicho que había sido un éxito, y no se habían publicado los primeros 61 correctamente, y entonces un comentario extraño llamó mi atención, porque había una diferencia entre los dos.D2299No hay ninguna discrepancia, estoy seguro, pero también parece muy seguro.

img

Pero este hombre que ha publicado 61 números, es D2290, y dice que fue revisado con cuidado, no importa, por suerte, también apostó a un desperdicio de electricidad.

img

Con la mentalidad de intentarlo, encontré 61 de los comentarios de otras personas, y todos parecían muy seguros.

img

Los prefijos que se encuentran en el área de comentarios se recogen, se recorren con código rígido, el código básico no se modifica, no se repite.

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

De hecho, hay más mensajes nuevos en el fondo, un hermano que tiene un PI diferente al mío, que es increíble. Primero corre con estos, no puedes creer lo que estás viendo, y luego corre para salir, para demostrar que uno de los que están delante de ti es el correcto, que no es científico, la clave privada es:

1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744C8155

Él es D229 aquí, pero la imagen es claramente D2299, y el 731 tiene un 7 detrás, él tiene dos, y el 731 tiene un 7 detrás de él. Pero es cierto que es el número correcto de 61, no se sabe cómo calculó él mismo, es muy curioso, pero no tengo dudas sobre mi propio funcionamiento, mira la sección de comentarios que dice que el cliente oficial dice que la tasa de circunferencia tiene otra versión, estoy solo, y con el conocimiento que he aprendido y la comprensión actual de la humanidad sobre el universo, la tasa de circunferencia puede representar el infinito del universo, cuyas fracciones nunca se repiten o terminan, puedes entenderlo como el UUID de ti en este universo, si hay otras versiones, tal vez de un mundo paralelo.

Este es otro hermano mayor que expresó su respuesta al servicio de atención al cliente después de ser interrogado:

img

Eso es sabiduría

Código de cambio de dinero de Web3

Finalmente, el código para transferir el bono, esta vez la función Web3 de la plataforma FMZ que utilizo directamente, la dirección de la cadena está configurada como OKC y funciona, la clave privada que se agrega al intercambio no funciona, y luego las dos líneas se arreglan, se ejecutan directamente en el modo de herramienta de depuración.

img

Prueba

Dirección de la clave pública después de haber sido descifrada

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

En la página de Facebook de la organización, se puede ver el enlace:https://www.okx.com/cn/explorer/okc/address/0x0bd08825e05e540c9508961a32e58d14da47275a

TX: ¿Qué es esto?https://www.okx.com/cn/explorer/okc/tx/0x4211418b09571011417257201aaf10fc3c5d638809a9456eb5aba5fe8c5d4e2c

La dirección del destinatario es:

0x25f0a126be95f437ee71d7c4de725567c5f6c731

img

Para demostrar que la dirección es mía, le envío una factura a una dirección de un agujero negro con la dirección de este destinatario.

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

La dirección del agujero negro es:0x0000000000000000005757572e464d5a2e434f4d

La dirección del agujero negro contiene un código de código que dice:

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

Después

Esto es todo, regresar y dar las gracias a todos los años de conocimiento que hemos acumulado, porque de lo contrario, no vamos a ser tan rápidos y seremos un paso por delante de los demás. Estoy seguro de que hay errores en los diagramas oficiales, en general, o que fue más afortunado de descifrarlos antes de que la respuesta se hiciera pública, y espero que OKX sea más estricto la próxima vez que organice eventos similares.


Relacionados

Más.

Papá, ¿ qué haces?¿Cuánto tiempo lleva 1.04 millones?

- ¿ Qué pasa?¡Z es muy arrogante!

¿ Qué pasa?La habilidad para empezar es excelente.

Cuantificación de orcs¡Z es muy arrogante!

El inventor de la cuantificación¿Qué es eso?

El inventor de la cuantificaciónEl viejo hierro está aquí.