Maison > développement back-end > C++ > Comment pouvons-nous masquer efficacement les chaînes intégrées dans les binaires exécutables ?

Comment pouvons-nous masquer efficacement les chaînes intégrées dans les binaires exécutables ?

Mary-Kate Olsen
Libérer: 2024-12-01 18:27:15
original
553 Les gens l'ont consulté

How Can We Effectively Obfuscate Strings Embedded in Executable Binaries?

Obfuscation des chaînes dans le code binaire

Énoncé du problème

L'obscurcissement des chaînes intégrées dans les binaires exécutables est utile pour protéger les informations sensibles telles que les clés de chiffrement contre tout accès non autorisé. Cependant, des méthodes simples telles que le stockage de la chaîne dans un tableau de caractères peuvent facilement révéler son contenu lors de l'analyse.

Solution

Pour masquer efficacement les chaînes dans les binaires compilés, une approche plus sophistiquée peut être utilisée. Prenons l'exemple suivant :

#include "HideString.h"

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'))
DEFINE_HIDDEN_STRING(EncryptionKey2, 0x27, ('T')('e')('s')('t'))

int main()
{
    std::cout << GetEncryptionKey() << std::endl;
    std::cout << GetEncryptionKey2() << std::endl;

    return 0;
}
Copier après la connexion

Ce code intègre une macro personnalisée, "DEFINE_HIDDEN_STRING", pour chiffrer la chaîne donnée. La macro code chaque caractère à l'aide d'une clé unique dérivée de la valeur de départ fournie (par exemple, "Ma clé de cryptage forte" -> 0x7f). Un algorithme de chiffrement basé sur la graine est appliqué à la séquence de caractères, ce qui rend les données résultantes aléatoires et difficiles à identifier dans le binaire compilé.

#define CRYPT_MACRO(r, d, i, elem) (elem ^ (d - i))
Copier après la connexion
#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)), \
        '' \
    }; \
    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; \
}
Copier après la connexion

Cette approche obscurcit efficacement les chaînes intégrées dans le code binaire, ce qui les rend difficiles à extraire sans connaître la clé de cryptage et l'algorithme. Il établit un équilibre entre sécurité et facilité d'utilisation, offrant une méthode pratique pour protéger les informations sensibles.

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!

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