"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-12-22
Parcourir:122

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 

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 cryptage 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))
#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)), \
        '\0' \
    }; \
    static bool isEncrypted = true; \
    if (isEncrypted) \
    { \
        for (unsigned i = 0; i 

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3