Cryptage du mot de passe en code C ou C ++ compilé

Je sais comment comstackr des fichiers source C et C ++ à l’aide de GCC et CC dans le terminal, mais j’aimerais savoir s’il est sûr d’inclure les mots de passe dans ces fichiers, une fois compilés.

Par exemple, je vérifie la saisie de l’utilisateur pour un certain mot de passe, par exemple 123, mais il semble que les programmes C / C ++ compilés puissent être décompilés.

Est-il possible de comstackr un fichier source C / C ++ tout en gardant la source complètement cachée? Sinon, est-ce que n’importe qui pourrait donner un petit exemple de chiffrement de l’entrée, puis vérifier le mot de passe, par exemple:

Il n’est pas recommandé de conserver des données statiques sensibles à l’intérieur du code. Vous pouvez utiliser des fichiers de configuration pour cela. Là, vous pouvez stocker ce que vous voulez.

Mais si vous voulez vraiment le faire, rappelez-vous que le code peut être facilement modifié en effectuant une recherche avec un débogueur et en le modifiant. Seuls les programmes auxquels l’utilisateur n’a pas access peuvent être considérés comme plus sûrs (sites Web par exemple).

La majorité des mots de passe de connexion (de différents sites) ne sont pas stockés en clair dans la firebase database, mais cryptés avec les algorithmes MD5, SHA1, Blowfish, etc.

Je vous suggère d’utiliser l’un de ces algorithmes de la bibliothèque OpenSSL .

Ce que je ferais est d’utiliser un algorithme cryptographique à clé publique . Cela prendra probablement un peu plus de temps à résoudre car, à mon avis, rien n’est sûr à 100% lorsque l’on parle de protection des logiciels.

Non, vous ne pouvez pas inclure de mot de passe en toute sécurité dans votre fichier source. Les chaînes dans le fichier exécutable sont en texte brut, toute personne disposant d’un éditeur de texte peut facilement consulter votre mot de passe.

Une solution moins sûre, mais qui piétinerait certaines personnes, consiste à stocker la chaîne cryptée à la place. Donc en gros:

enc = "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4" bool check() { pass = getPassFromUser(); encpass = myHashingFunction(pass); return pass == encpass; } 

cela dissuadera certaines personnes, mais ce n’est pas vraiment plus sûr, il est relativement simple pour un pirate d’assemblage de remplacer la chaîne ‘enc’ dans votre exécutable par une autre chaîne codée par sha256 avec une valeur en texte clair connue.

Même si vous utilisez un serveur d’authentification séparé, il n’est pas difficile de configurer un serveur d’authentification factice et de tromper votre programme pour qu’il se connecte à ce serveur d’authentification factice.

Même si vous utilisez SHA1 pour générer un hachage, il n’est pas vraiment sûr de le faire de manière normale (écrire une fonction pour vérifier un mot de passe), tout pirate informatique déterminé ou averti ayant access à l’exécutable pourra le contourner. (remplacez votre hachage par un hachage connu ou remplacez simplement l’appel checkPassword () par un appel renvoyant la valeur true.

La question est de savoir contre qui essayez-vous de vous protéger? Votre petit frère, pirate informatique, espions internationaux, espionnage indussortingel?

L’utilisation de SHA1 avec le hachage contenu dans le code (ou un fichier de configuration) ne protégera que contre vous, petit frère? (lisez des utilisateurs d’ordinateurs occasionnels qui ne se soucient pas d’essayer de pirater votre programme au lieu de payer le prix de l’action). Dans ce cas, utiliser un mot de passe en texte clair ou un hachage SHA1 ne fait que peu de différence (peut-être que quelques pour cent de plus de personnes ne s’en donneront pas la peine).

Si vous voulez sécuriser votre code, vous devrez en faire beaucoup plus. Un livre sur la sécurité est un bon sharepoint départ, mais la seule façon de le faire est de suivre un cours de sécurité dans lequel les techniques de protection sont enseignées. Il s’agit d’un domaine très spécialisé et le fait de rouler avec sa propre version risque d’être contre-productif et de ne pas vous protéger réellement (l’utilisation d’un hachage n’est que la première étape).

Ce n’est pas sûr si vous les stockez en tant que texte brut, vous pouvez simplement vider le fichier ou utiliser un utilitaire tel que des chaînes pour trouver du texte dans l’exécutable.

Vous devrez les encoder d’une certaine manière.

Voici un exemple de code qui pourrait vous aider avec OpenSSL .

 #include  bool SHA256Hash(const char* buf, size_t buflen, char* res, size_t reslen) { if (reslen >= 32) { EVP_MD_CTX mdctx; EVP_MD_CTX_init(&mdctx); EVP_DigestInit_ex(&mdctx, EVP_sha256(), NULL); EVP_DigestUpdate(&mdctx, buf, buflen); EVP_DigestFinal_ex(&mdctx, res, &len); EVP_MD_CTX_cleanup(&mdctx); return (len == 32); } return false; } 

J’ai pris cet échantillon dans la bibliothèque systools et systools dû l’adapter. Donc, je ne suis pas sûr qu’il comstack sans modifications. Cependant, cela devrait vous aider.

Veuillez noter que, pour déterminer si le stockage d’une valeur de hachage d’un mot de passe dans votre binary est sûr, nous devons savoir ce que vous voulez.

Si vous prévoyez d’interdire certaines fonctionnalités de votre programme à moins de fournir un mot de passe spécial, il est alors inutile: un attaquant est susceptible de supprimer tout le code de vérification du mot de passe au lieu d’essayer de deviner ou d’inverser le mot de passe enregistré.

Essayez de découvrir des fonctions de hachage et des méthodes de chiffrement pour sécuriser vos mots de passe et leur stockage.