Ergebnis 1 bis 1 von 1
  1. #1
    Trojaner Avatar von s3rb31
    Registriert seit
    21.01.2010
    Beiträge
    75

    Standard [C++] Compile-Time String Encryption

    Lange Zeit habe ich auf FH nicht gepostet, ich denke es gibt dazu keinen Grund mehr. Geschrieben für B2H.

    Zitat Zitat von Back2Hack
    Yessir, heute gleich zwei POCs aus dem Hause S3RB31! Der zweite folgt sogleich. Nun aber los:

    String Verschlüsselung (oder in diesem Fall eher - in Ermangelung eines deutschen Wortes - obfuscation) ist eine Sache über die man sich Gedanken macht, wenn man nicht möchte das jemand weis was da alles im Programm drin steht. Häufig wird eine beliebige Verschlüsselung in Verbindung mit manuellem laden der WinAPI-Funktionen genutzt.

    Doof ist aber das der String ja nun bereits vor dem kompilieren verschlüsselt vorliegen muss, jedenfalls war das so bevor C++0x kam. Als Beispiel will ich einmal die XorString Klasse der OGC Group nehmen welche relativ häufig benutzt wird:

    Code:
    XorStr<0xF5,18,0xA9BFF53A>("\xBC\x85\xB3\x9D\x9B\x8F\x9C\x9B\x98\x8C\xAF\x72\x64\x71\x66\x6A\x71"+0xA9BFF53A).s
    Wenn man das so liest dann fragt man sich doch, was das eigentlich heißen soll, nicht wahr? Dort oben steht IsDebuggerPresent. Erkennt man gar nicht oder? Das ist doof.

    Man könnte natürlich ein Kommentar dahinter setzten, aber selbst dann müsste man jeden neuen String erst einmal verschlüsseln - mit einem dritten Programm oder Skript wohlgemerkt - und könnte dann erst weiter coden.

    Wie kann man das also intuitiver gestalten? Man nehme eine Priese C++ und füge ein Stück 0x hinten an. Zu guter letzt gebe man dem Gemisch einen Compiler der 0x auch unterstütz bei und voila! Gesagt getan.

    G++ - sollte hier jedem ein Begriff sein - unterstützt seit einiger Zeit die Option

    Code:
    -std=c++0x
    welche eingeschränkten (?) Support für die neuen C++0x Funktionen aktiviert. Unter anderem werden nun auch variadische Templates unterstützt. Wenn wir uns nun daran erinner das Templates immer zur Compile-Time "dereferenziert" werden, dann kommt einem doch höchstwahrscheinlich die ein oder andere Idee mit der man String Verschlüsselung vereinfachen kann. Ich habe mich daran versucht und dabei ist eine meiner Meinung nach ziemlich coole Klasse raus gekommen. Bedient euch, aber vergesst nicht Credits zu geben! An dieser Stelle nochmal ein ausdrückliches Dankeschön an Weltensturm!

    Hier also der Code:

    Code:
    http://codepad.org/XAz6ZHn8
    Und hier ein Beispiel zur Anwendung:

    Code:
    #include <windows.h>
    #include <iostream>
    #include "apicaller.hpp"
    
    #define TO_STRING(x) #x
    #define CHAR_TMPL_6(x) TO_STRING(x)[0] , TO_STRING(x)[1] , TO_STRING(x)[2] , TO_STRING(x)[3] , TO_STRING(x)[4] , TO_STRING(x)[5]
    
    int main()
    {
        CryptString<char, CHAR_TMPL_6(S3RB31)> str_S3RB31_macro; //Macro - using multibyte charset
        CryptString<wchar_t, L'S',L'3',L'R',L'B',L'3',L'1'> str_S3RB31_direct; //Direct - using unicode charset
    
        std::cout << "C-String: " << str_S3RB31_macro.Value() << std::endl
                  << "basic_string<char>: " << str_S3RB31_macro.ValueStlString() << std::endl;
    
        std::wcout << L"C-String: " << str_S3RB31_direct.Value() << std::endl
                   << L"basic_string<wchar_t>: " << str_S3RB31_direct.ValueStlString() << std::endl;
        return 0;
    }
    In D kann man Strings auch komplett übergeben und zur Compile-Time verschlüsseln:

    Code:
    http://www.gamedeception.net/threads/10794-Encrypted-strings-using-compile-time-functions
    Geändert von s3rb31 (23.01.2012 um 16:15 Uhr) Grund: "[C++]" Tag hinzugefügt

Ähnliche Themen

  1. [C#] - Binder with Compile on the Fly
    Von Atropos im Forum Source Codes
    Antworten: 5
    Letzter Beitrag: 24.10.2010, 19:53
  2. [Bash] compile.sh
    Von kingfinn im Forum Sonstige Programmiersprachen
    Antworten: 2
    Letzter Beitrag: 23.05.2010, 22:33
  3. Encryption Methode
    Von mi5erabl3 im Forum VisualBasic
    Antworten: 9
    Letzter Beitrag: 20.05.2010, 15:32
  4. Dualboot+Encryption Vs. Vista+VMware mit Encryption
    Von Smilodon5632 im Forum Windows
    Antworten: 8
    Letzter Beitrag: 11.07.2009, 21:48
  5. case compile problem
    Von keima im Forum C, C++
    Antworten: 5
    Letzter Beitrag: 08.10.2008, 23:09

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •