Maison >développement back-end >C++ >Comment pouvons-nous masquer en toute sécurité des chaînes dans le code binaire à l'aide du prétraitement C ?
Démasquer les chaînes cachées dans le code binaire
Dans le développement de logiciels, il peut arriver que des données sensibles, telles que des clés de chiffrement, doivent être dissimulées dans les binaires compilés. Bien que cette pratique ne rend pas à elle seule les données invulnérables contre des adversaires déterminés, elle constitue une couche de sécurité supplémentaire.
Une approche rudimentaire pour masquer des chaînes consiste à les décomposer en caractères individuels et à les stocker séparément, comme illustré dans le code fourni :
char encryptionKey[30]; int n = 0; encryptionKey[n++] = 'M'; // Continuing with the rest of the characters...
Cependant, cette méthode manque d'élégance et nécessite une logique complexe.
Un Solution améliorée
Une approche plus souhaitable exploite le mécanisme de macro du préprocesseur Boost C pour chiffrer et masquer les chaînes. Cette méthode utilise un processus à deux volets :
Le code ci-dessous démontre l'implémentation :
#include <boost/preprocessor/cat.hpp> #include <boost/preprocessor/seq/for_each_i.hpp> #include <boost/preprocessor/seq/enum.hpp> #define CRYPT_MACRO(r, d, i, elem) ( elem ^ ( d - i ) ) #define DEFINE_HIDDEN_STRING(NAME, SEED, SEQ)\ static const char* BOOST_PP_CAT(Get, NAME)()\ {\ static char data[] = {\ BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_FOR_EACH_I(CRYPT_MACRO, SEED, SEQ)),\ '<pre class="brush:php;toolbar:false">DEFINE_HIDDEN_STRING(EncryptionKey, 0x7f, ('M')('y')(' ')('s')('t')('r')('o')('n')('g')(' ')('e')('n')('c')('r')('y')('p')('t')('i')('o')('n')(' ')('k')('e')('y'))'\ };\ \ static bool isEncrypted = true;\ if ( isEncrypted )\ {\ for (unsigned i = 0; i < ( sizeof(data) / sizeof(data[0]) ) - 1; ++i)\ {\ data[i] = CRYPT_MACRO(_, SEED, i, data[i]);\ }\ \ isEncrypted = false;\ }\ \ return data;\ }
En utilisant cette macro, une chaîne cachée peut être définie comme suit :
Cette approche fournit une solution plus sécurisée et plus esthétique pour masquer des chaînes dans le code binaire tout en conservant la compatibilité ascendante et sans avoir besoin d'un cryptage asymétrique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!