Heim > Backend-Entwicklung > C++ > Wie können wir in ausführbaren Binärdateien eingebettete Zeichenfolgen effektiv verschleiern?

Wie können wir in ausführbaren Binärdateien eingebettete Zeichenfolgen effektiv verschleiern?

Mary-Kate Olsen
Freigeben: 2024-12-01 18:27:15
Original
534 Leute haben es durchsucht

How Can We Effectively Obfuscate Strings Embedded in Executable Binaries?

Verschleierung von Zeichenfolgen im Binärcode

Problemstellung

Die Verschleierung von Zeichenfolgen, die in ausführbaren Binärdateien eingebettet sind, ist wertvoll, um vertrauliche Informationen wie Verschlüsselungsschlüssel vor unbefugtem Zugriff zu schützen. Einfache Methoden wie das Speichern der Zeichenfolge in einem Zeichenarray können ihren Inhalt jedoch während der Analyse leicht offenlegen.

Lösung

Um Zeichenfolgen in kompilierten Binärdateien effektiv zu verbergen, kann ein ausgefeilterer Ansatz verwendet werden. Betrachten Sie das folgende Beispiel:

#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;
}
Nach dem Login kopieren

Dieser Code enthält ein benutzerdefiniertes Makro, „DEFINE_HIDDEN_STRING“, um die angegebene Zeichenfolge zu verschlüsseln. Das Makro kodiert jedes Zeichen mit einem eindeutigen Schlüssel, der aus dem bereitgestellten Startwert abgeleitet wird (z. B. „Mein starker Verschlüsselungsschlüssel“ –> 0x7f). Ein auf dem Startwert basierender Verschlüsselungsalgorithmus wird auf die Zeichenfolge angewendet, wodurch die resultierenden Daten zufällig erscheinen und in der kompilierten Binärdatei schwer zu identifizieren sind.

#define CRYPT_MACRO(r, d, i, elem) (elem ^ (d - i))
Nach dem Login kopieren
#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; \
}
Nach dem Login kopieren

Dieser Ansatz verschleiert effektiv die eingebetteten Zeichenfolgen innerhalb der Binärcode, der es schwierig macht, sie ohne Kenntnis des Verschlüsselungsschlüssels und -algorithmus zu extrahieren. Es schafft ein Gleichgewicht zwischen Sicherheit und Benutzerfreundlichkeit und bietet eine praktische Methode zum Schutz vertraulicher Informationen.

Das obige ist der detaillierte Inhalt vonWie können wir in ausführbaren Binärdateien eingebettete Zeichenfolgen effektiv verschleiern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage