„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 22.12.2024
Durchsuche:587

How Can We Effectively Obfuscate Strings Embedded in Executable Binaries?

Verschleierung von Zeichenfolgen im Binärcode

Problemstellung

Die Verschleierung von in ausführbaren Binärdateien eingebetteten Zeichenfolgen ist wertvoll, um vertrauliche Informationen wie Verschlüsselungsschlüssel vor unbefugtem Zugriff zu schützen. Allerdings können einfache Methoden wie das Speichern der Zeichenfolge in einem Zeichenarray ihren Inhalt 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 

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))
#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 

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

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3