Extraer MasterKey de cartera Bitcoin

Iniciado por AlbertoBSD, 29 Octubre 2020, 16:35 PM

0 Miembros y 1 Visitante están viendo este tema.

AlbertoBSD

Publico este tema aquí, ya que no se en qué sección queda mejor publicarlo.

Estoy intentando extraer la información Cifrada de una cartera bitcoin, en específico la información del Key para posteriormente intentar descifrarlo por algún ataque de fuerza bruta.

Quiero extraerla por que no quiero depender del bitcoin core ya que si se realiza el ataque por fuerza bruta mediante algún script bash o algun otro metodo NO compilado, el ataque puede ser realmente ineficiente.

También quiero brincarme algunos pasos innecesarios de funciones tipo rehash o PBKDF2 (key derivation) ya que aunque no consumen mucho CPU si quitan algunos miles de ciclos de procesamiento que a la larga pueden hacer aun mas eterno el proceso de crackeo.

Segun he leido la informacion del Key cifrado el salt y el numero de iteraciones esta contenida en un campo de 64 bytes del wallet.dat llamado mkey.

Segun vi en el siguiente Link:

https://bitcoin.stackexchange.com/questions/48070/format-of-mkey-field-in-encrypted-wallet-dat-file

La data contiene los siguientes campos:

mkey, nID, encrypted_key, salt, derivation_method, derivation_rounds, other_derivation_parameters

Citar
  • mkey - a size prefixed string denoting the start of the master key data.
  • nID - an integer whose purpose I have been unable to determine.
  • encrypted_key - a size prefixed buffer containing the encrypted master key.
  • salt - a size prefixed buffer containing the salt data used when encrypting the key.
  • derivation_method - an integer containing either 0 or 1 for the method used to encrypt the master key using the wallet password.
  • derivation_rounds – an integer containing the number of rounds used to encrypt the master key.
  • other_derivation_parameters
mkey es solo el ascii "mkey", se que el encrypted_key debe de ser de 32 bytes y el salt de 16, restando solo 12 bytes para los otros datos, sin embargo no estoy seguro del orden de los mismos.

Si vemos la siguiente imagen:





Vemos que ahí esta la data, escribí un pequeño programa que la encuentra y la extrae, pero no se en que orden este, con ver los datos de esta cartera y otras me doy cuenta de algunos datos que pueden ser números como los primeros 8 bytes después del mkey, pueden ser números, al igual que los últimos 4 antes de ckey.



Edit

Solucionado el master key cifrado son 48 bytes que se encuentran a un offset de -72 bytes de la primera coincidencia del string mkey.

Para esta cartera en cuestión el Master Key Cifrado es:

CEC646179A7F947349A0AA99EC7122B01F72BF18FFA4FDC760635D8C13109DA196D3DC802D5AABB23FA6C6AABA9A1DBB

Saludos

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

B€T€B€


¿Qué se supone que quieres lograr?
La finalidad, me refiero.

AlbertoBSD

Cita de: B€T€B€ en 29 Octubre 2020, 22:55 PM
¿Qué se supone que quieres lograr?
La finalidad, me refiero.

Extraer la llave cifrada para posteriormente intentar descifrarlo. Vamos básicamente crackear el password por fuerza bruta.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

B€T€B€



Yo me olvidaría.
En teoría es casi imposible...

AlbertoBSD

Se que es casi improbable y muy costoso en tiempo y poder de computo pero para nada es imposible

Lo hago por hobby y simplemente por saber un poco más del tema, no lo voy a olvidar, es una lotería de mil millones de dolares asi que si existe la posibilidad de hacerlo no pierdo nada con intentarlo.

Saludos!

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Machacador

Que bueno... cuando lo logres puedes quitarle sus millones mal habidos al loco de McAfee...

:rolleyes: :o :rolleyes:
"Solo tu perro puede admirarte mas de lo que tu te admiras a ti mismo"

AlbertoBSD

Cita de: Machacador en 30 Octubre 2020, 02:04 AM
millones mal habidos al loco de McAfee...

Interesante esa parte de la historia no me la sabia, puedes desarrollar un poco mas tu punto?
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Machacador

Cita de: AlbertoBSD en 30 Octubre 2020, 02:06 AM
Interesante esa parte de la historia no me la sabia, puedes desarrollar un poco mas tu punto?

Eso es otro tema que luego te explico... tu solo concéntrate en romper el cifrado ese para que nos apoderemos  de los Bitcoin y todo lo que circule por el bendito blockchain...

:rolleyes: :o :rolleyes:
"Solo tu perro puede admirarte mas de lo que tu te admiras a ti mismo"

Danielㅤ

#8
Hola, yo siempre tuve la duda de hacer un software que trabaje con fuerza bruta y multi hilos, por ejemplo 10/15/20/25/30 (depende del CPU) hilos distintos y que cada uno realice un determinado patrón, por ejemplo si un programa en C o C++ prueba 10 mil claves cada 5 segundos, que pasaría si el programa haría 20 ciclos en vez de uno? Sería:

10 mil x 20 = 200.000 claves en 5 segundos...

Yo jamás vi algo como eso.... Todos los programas/códigos por fuerza bruta siempre tienen 1 solo proceso/hilo, pero nunca varios.... y teniendo en cuenta la potencia de un lenguaje como C/C++, incluso hasta se podrían abrir varios programas, por ejemplo 5 con 20 ciclos cada uno:

200.000 x 5 = 1.000.000 (1 millón)

y aunque demoren un poco más los programas/procesos, es decir que aunque vayan un poco más lentos, pero la cantidad de combinaciones sería mucho mayor.

Se pueden hacer algunos trucos, por ejemplo yo puedo crear un programa en puro Python y que haga tal cosa y tener la velocidad de C++, como es posible eso?, puedo poner tranquilamente un ejecutable compilado de un código en C++ dentro del código de Python, como los exe en C++ pesan poco, paso todo el ejecutable a base64 o a binario y lo meto dentro del código de Python, luego en el programa de Python cuando se necesite hacer tal cosa y tenga que usar ese exe escrito en C++, hago lo siguiente:

1. Decodifico el exe, base64 Decode.
2. Creo un archivo en formato exe en la carpeta temporal.
3. Guardo el contenido del exe decodificado en el archivo exe.
4. Se crea el ejecutable, lo ejecuto y le paso argumentos/órdenes para que abra haciendo X cosa.


Saludos
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

AlbertoBSD

#9
Si y no,  Si se puede hacer multihilo (multi thread) pero estás limitado por la cantidad de Cores/threads que tenga el CPU, ahorita muchos no pasan de 4 Cores / 8 Threads o 8 Cores / 16 Threads.

Esto sin considerar el restarle el proceso del sistema operativo que no es poco generalmente te va a quitar como mínimo 1 Core y 2 threads.

Puedo hacerlo Multihilo SI, de hecho es lo que tengo pensado hacer. Pero no he podido empezar ya que de la información que tengo no se cual es Key, cual es Salt y cual es numero de Derivaciones, esto solo para hacer algunas pruebas con una cartera que si tengo la contraseña, si funciona para esta cartera debería de funcionar para la cartera que realmente quiero crackear.

Por cierto si quieres potencia olvida te python Lo que esta escrito en C o C++ si funcionara bien, pero todo lo que entre en algun script de python se verá afectado y/o consumirá más memoria de la necesaria

Saludos!




Solucionado el master key cifrado son 48 bytes que se encuentran a un offset de -72 bytes de la primera coincidencia de mkey.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW