Question:
Crypter du texte dans des fichiers binaires
Mellowcandle
2013-03-28 21:55:17 UTC
view on stackexchange narkive permalink

Les chaînes de texte sont généralement faciles à lire dans un fichier binaire à l'aide de n'importe quel éditeur prenant en charge le codage ASCII des valeurs hexadécimales. Ces extraits de texte peuvent être facilement étudiés et modifiés par un ingénieur inverse.

De quelles options un développeur dispose-t-il pour chiffrer ces extraits de texte et les déchiffrer au moment de l'exécution?

Un répondre:
#1
+8
QAZ
2013-03-28 22:34:50 UTC
view on stackexchange narkive permalink

Certaines options qui peuvent ou non être applicables en fonction de vos besoins:

  1. Évitez d'utiliser des chaînes pour divulguer des informations intéressantes lorsque cela est possible. Par exemple, si vous utilisez des chaînes pour afficher des informations d'erreur ou des informations de journalisation, cela peut donner à tout reverse engineering des détails précieux sur ce qui pourrait se passer dans votre application. Remplacez plutôt ces chaînes par des codes d'erreur numériques.

  2. Obfusque toutes les chaînes avec une sorte d'algorithme symétrique comme une simple routine XOR, ou un algorithme de chiffrement comme AES. Cela évitera que la chaîne ne soit découverte lors d'un examen informel de votre binaire. Je dis «obscurcir» car vous stockerez probablement la clé crypto / xor dans votre binaire. Tout ingénieur inverse qui essaie un peu plus fort récupérera sûrement les chaînes obscurcies.

  3. Crypter toutes les chaînes (faire en sorte que toutes les chaînes soient liées dans une section séparée dans votre exécutable et cryptez cette section) et stockez la clé de décryptage en dehors de votre binaire. Vous pouvez stocker la clé à distance et restreindre l'accès côté serveur lorsque cela est possible. Donc, si un ingénieur inverse obtient votre binaire, il peut ne pas pouvoir accéder à la clé. La clé de décryptage pourrait également être générée dynamiquement sur l'ordinateur de l'utilisateur en fonction de plusieurs facteurs prévisibles connus sur la machine de cet utilisateur, permettant essentiellement uniquement aux données cryptées d'être décryptées lorsqu'elles sont exécutées sur cette machine spécifique (ou type de machine). Cette technique a été utilisée par des logiciels malveillants du gouvernement pour crypter les charges utiles pour des cibles spécifiques (si je me souviens du lien vers l'article, j'ai lu ceci dans je mettrai à jour la réponse).

  4. Get Creative , stockez toutes les chaînes dans une langue étrangère, puis, au moment de l'exécution, utilisez un service de traduction en ligne pour traduire la chaîne dans votre langue maternelle attendue. Ce n'est bien sûr pas très pratique.

Bien sûr, si vos chaînes sont décodées / déchiffrées au moment de l'exécution, alors un ingénieur inverse pourrait simplement vider le processus de la mémoire afin de voir les chaînes. Pour cette raison, il peut être préférable de décoder / décrypter les chaînes individuelles uniquement lorsque cela est nécessaire (éventuellement en stockant la chaîne décodée dans un emplacement temporaire et en la remettant à zéro après utilisation).

Voir [cette question stackoverflow] (http://stackoverflow.com/questions/3785582/how-to-write-a-password-safe-class) pour les techniques qui protègent les chaînes non chiffrées contre le vidage de la mémoire.
+1 pour "faire preuve de créativité". Le meilleur moyen de contrecarrer les tentatives de compréhension de votre programme est d'utiliser des techniques non documentées dans les sites de questions-réponses en ligne ...


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...