Bien qu'il soit impossible de récupérer directement un mot de passe MySQL sans recourir à la force brute, il existe un autre moyen. Si vous avez utilisé MySQL Workbench pour vous connecter à la base de données et que vous avez enregistré les informations d'identification dans le "coffre-fort", c'est gagné.
Sous Windows, les informations d'identification sont stockées dans le fichier %APPDATA% \MySQL\Workbench\workbench_user_data.dat - crypté avec CryptProtectData (sans aucune entropie supplémentaire). Le décryptage est simple comme bonjour :
std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
DATA_BLOB inblob { length, input };
DATA_BLOB outblob;
if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
throw std::runtime_error("Couldn't decrypt");
}
std::vector<unsigned char> output(length);
memcpy(&output[0], outblob.pbData, outblob.cbData);
return output;
}
Ou vous pouvez vérifier ceci Fil conducteur de DonationCoder pour les sources et l'exécutable d'une implémentation rapide.