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