Título: Como determina la función AES256CBCDecrypt una correcta desencriptación Publicado por: AlbertoBSD en 28 Octubre 2020, 15:00 pm Muy buena dia, estoy con una pequeña duda ya que estoy tratando de automatizar un proceso de crackeo por fuerza bruta de una key de 256 bits (Se que es improbable, sin embargo la clave esta ahi del 0 al 2^256) :rolleyes: :rolleyes: :rolleyes:
La función original recibe 2 parametros un un KeyCifrada, y el candidato a Key como segundo parametro: Código
Dicha función realiza un llamado internamente a AES256CBCDecrypt Código: AES256CBCDecrypt dec(Key.data(), IV.data(), true); nLen = dec.Decrypt(KeyCifrada.data(), KeyCifrada.size(), KeyCandidato); if(nLen == 0) return false; y si nLen es igual a 0 entonces retorna false indicando que Key Candidato no es un Key valido. Mi duda es la siguiente como determina internamente AES256CBCDecrypt que la KeyCandidato es valida. Saludos Edit Platicando con Kub0x me corrigio el KeyCandidato no es parámetro de entrada si no de salida Si vemos el link Código: https://fabcoin.pro/aes_8cpp_source.html#l00176 en la linea 112 hay se muestra que las comprobaciones las hace directamente sobre el texto descifrado y si alguna de ellas no pasa simplemente regresa 0. Me comenta kub0x que existen varios valores Key y IV de entrada que podrian dar una salida valida, siendo esto un falso positivo, sin embargo me gustaría investigar cuantas veces pasa eso en realidad. Saludos Edit 2 Tal como menciono Kub0x, el proceso arroja muchos falsos positivos. Programe un programa multihilo para crackear un key Código: albertobsd $ g++ -o crack_wallet_mt crack_wallet_mt.c -Wint-to-pointer-cast -pthread albertobsd $ ./crack_wallet_mt OK Thread 3, count: 142 key_material: 6120fbf417fcf689ce5ef35f8094d2e4ff584f2652fff824c94c23dae07633e7 iv_material: 226fe385941a98f5fa0274f2917793c7 decipher_key: 01f970cde83114aef95f5bda80866249053b3067a25cd551fa87d57e9a1406be72496a13439c363ee317b478966891 OK Thread 2, count: 296 key_material: 4c167299eabda7932ce63d2ca44045a45f00316a45ca72a4acfca3bdd73fd2a5 iv_material: fc238b78db6d6d3c3ebc4cdb4075ccef OK Thread 1, count: 443 decipher_key: 0053614707620edd364dfd688249bcf316ba2973df40fa6fa70df7bb532bbc483de465c8e9336c2ef66dc51a7633d4 key_material: 609615afd2c0714b603d077cae58b8561e1fae8445a87cf0c1e8847be0c9acca iv_material: 36b905f01e1b898b3cd3efa298db88da decipher_key: a7333cf2484dbc21158b25600a131d707bbb38d4f6dd2fff92e6c2dae3d8c053499ffa19532a99b3c48a59d2574ecc OK Thread 0, count: 773 key_material: 93cb1954410e9676fbbf3cd6b17ccfaae4d8e874b6f577e32b9bbbd1c37ea0c3 iv_material: 5fd321427cd14a9ae2c9a2f95f14d629 decipher_key: fdfebebeb779e4df9aa76746f02cd000d93c6e69d7b4fad30214369a2dab84295716a30dc585efcd6a22a16235 Con solo 4 Hilos y solo probando 1554 hashes random me dio 4 resultados que la función AES256CBCDecrypt considera válidos, pense que serian mucho menos el ratio de falsos positivos, pero asi no me da tiempo de probarlos manualmente, tendrás que optimizar ese proceso también. |