La función original recibe 2 parametros un un KeyCifrada, y el candidato a Key como segundo parametro:
Código
Decrypt(KeyCifrada,KeyCandidato);
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.