Au moment de la compilation de la chaîne de chiffrement

Je ne veux pas l'inverse ingénieurs de lire le texte brut de chaînes codées en dur dans mon application. La solution triviale pour cela est d'utiliser un simple XOR-Chiffrement. Le problème est que j'ai besoin d'un convertisseur et dans mon application, il ressemblera à ceci:

//Before (unsecure)
char * cString = "Helllo Stackoverflow!";
//After (secure)
char * cString = XStr( 0x06, 0x15, 0x9D, 0xD5FBF3CC, 0xCDCD83F7, 0xD1C7C4C3, 0xC6DCCEDE, 0xCBC2C0C7, 0x90000000 ).c();

Est-il possible de maintenir propre code à l'aide de certaines de construction comme

//Before (unsecure)
char * cString = "Helllo Stackoverflow!";
//After (secure)
char * cString = CRYPT("Helllo Stackoverflow!");

Il convient également de travailler de très longues chaînes ( 1000 caractères? 🙂 ). Je vous remercie à l'avance

Eh bien, ne fonctionnera pas si vous l'essayer?
Bien sûr que non. La question est très claire: est-il un mécanisme, éventuellement à l'aide de macros, de - il? Pas une question bête du tout – autant que je sache, il n'existe pas de solution exacte, mais vous pouvez obtenir assez proche à l'aide de modèles.
Ne gardez à l'esprit que ce type de chiffrement est trivial de pause; le contenu de "cString" vont être chiffré lorsque votre programme démarre et visible par toute personne ayant accès à votre RAM. Ce compte même pas que le XOR est trivial de rupture dans et de lui-même.
Je sais, mais vous ne trouverez pas la chaîne à l'aide d'un débogueur, car il ne sera pas séparable de la mémoire ordinaire. C'est déjà tout ce que je veux.
Malheureusement, C++ n'ont pas entièrement Dépendante de Types, de sorte que les chaînes ne peuvent pas être décomposées par le modèle des mécanismes (et bien sûr, ils ne peuvent ni par le préprocesseur, car il ne se fend pas de jetons). Votre meilleur pari est de les avoir définis en externe dans un fichier généré.

OriginalL'auteur Listing | 2011-09-01