Programma's geschreven in bytecode-gebaseerde programmeertalen zoals Java en C# bevatten niet alleen veel type-informatie; ze leggen ook veel van hun interne structuur ongewenst bloot in de vorm van meta-informatie. Beide vormen van informatie kunnen echter gebruikt worden door kwaadwillige gebruikers om bytecode-programmas te reverse engineeren, aan te passen, of te stelen. Om zulke aanvallen te bemoeilijken, stellen we in dit onderzoek drie complementaire obfuscatietechnieken voor bytecode-programmas voor die samen een belangrijk onderdeel van de programmastructuur en veel van de aanwezige type-informatie obfusceren. Class hierarchy flattening heeft als doel de klassenhiërarchie van een programma maximaal af te vlakken door de overervingsrelaties tussen klassen zoveel mogelijk te verbreken. We combineren deze transformatie met interface merging en object factory insertion, die de overblijvende type-informatie trachten te verwijderen. Interface merging voegt meerdere interfaces in een programma samen tot een enkele interface, waardoor het aantal verschillende types waarmee het programma werkt sterk verminderd. Object factory insertion vervangt code die nieuwe objecten aanmaakt door code die zogenaamde object factories oproept, die veel minder type-informatie vrijgeven. Experimenten op realitische Java-programmas tonen aan dat onze technieken erin slagen om zowel de aanvallers zelf, als hun automatische aanvalsprogrammas te verwarren, waardoor aanvallen moeilijker worden. | |