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 ?

Comment pouvons-nous masquer en toute sécurité des chaînes dans le code binaire à l'aide du prétraitement C ?

Mary-Kate Olsen
Libérer: 2024-12-03 04:51:09
original
418 Les gens l'ont consulté

How Can We Securely Hide Strings in Binary Code Using C   Preprocessing?

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...
Copier après la connexion

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 :

  1. Cryptage : Les caractères sont cryptés à l'aide d'un simple algorithme XOR.
  2. Accès à temps variable : La chaîne cryptée est stockée dans une variable qui n'est déchiffrée que lors de son accès. Cela introduit un délai variable et complique encore davantage la récupération par des adversaires potentiels.

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'))
Copier après la connexion
'\ };\ \ 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal