C/C++ Struct Randomization

Die antispy™ C/C++ Struct Randomization sorgt für eine zufällige Anordnung von Fields in Strukturen. Damit lassen sich Heuristiken brechen, die davon ausgehen, dass bestimmte Fields in Ihren Strukturen aufeinanderfolgend im Code Segment sind. Im Normalfall wollen Sie, dass Strukturen immer dasselbe Layout haben (Datenformate!). Es gibt aber Fälle, vor allem in der Spieleindustrie in denen Sie veränderte Strukturen in jedem Softwarebuild haben sollten. Strukturen die sich nach jedem Build ändern sind sehr mühsam für einen Angreifer nachzubilden.

Implementierung

Die Implementierung erfolgt mit der Kennzeichnung durch das Makro ANTI_SPY_STRUCT_LAYOUT_RANDOMIZER zwischen den Fields.

#include <antispy/obfuscation.hpp>

struct random_layout
{
    ANTI_SPY_STRUCT_LAYOUT_RANDOMIZER
    int value1_;
    ANTI_SPY_STRUCT_LAYOUT_RANDOMIZER
    int value2_;
    ANTI_SPY_STRUCT_LAYOUT_RANDOMIZER
   int value3_;
   ANTI_SPY_STRUCT_LAYOUT_RANDOMIZER
};

int main(int argc, const char **argv)
{    
    random_layout stru{};
    stru.value1_ = 123;
    stru.value2_ = 234;
    stru.value3_ = 345;
    std::cout << "Structure" 
        << " Value 1: " << stru.value1_
        << " Value 2: " << stru.value2_
        << " Value 3: " << stru.value3_
        << std::endl;
    return 0;
}