Reverse engineering van programma's met behulp van debuginformatie

Promotor Koen De Bosschere
Begeleider 1: Ludo Van Put
Begeleider 2: Bruno De Bus
Aantal studenten: 1 of meerdere
Richting: Ir. in de computerwetenschappen, Lic. in de informatica
DWARF Debugging Format

Contactpersoon: Ludo Van Put

Diablo is een raamwerk voor het herschrijven/transformeren van programma's tijdens het linken. Zoals je kan zien op de resultatenpagina, kan je door programma's te herschrijven heel wat code verwijderen. Vaak voeren deze kleinere programma's ook nog heel wat sneller uit. Het transformeren tijdens het linken is verder ook met succes gebruikt voor obfuscatie, instrumentatie en steganografie. Er blijft echter een drempel om deze techniek van het herschrijven tijdens het linken algemeen toe te passen, namelijk het feit dat men de intermediaire objectcodebestanden nodig heeft. Uit deze bestanden wordt immers heel wat informatie gehaald, zoals de kennis van waar in een programma met data wordt gewerkt en waar er berekeningen op adressen gebeuren. Zonder dergelijke informatie is het niet mogelijk om op een betrouwbare manier programma's te gaan veranderen. Om de algemene toepasbaarheid van transformeren tijdens het linken te verhogen, willen we deze drempel wegwerken en vertrekkende van enkel het volledig gelinkte programma een werkend, maar gewijzigd programma te genereren. We kunnen gebruik maken van de debuginformatie die elke compiler kan aanmaken om heel wat extra informatie te verzamelen. Deze informatie, gecombineerd met een aantal heuristieken moet ons in de praktijk toelaten om reeds gecompileerde programma's nog te gaan veranderen.

Het doel van deze scriptie is onderzoeken of standaard debuginformatie voldoende informatie bevat om een statisch gelinkt programma te veranderen. Om dit aan te tonen moet een programmaherschrijver ontwikkeld worden die in staat is om diverse programmatransformaties uit te voeren op gecompileerde programma's die debuginformatie bevatten. Deze herschrijver moet het gecompileerde programma en de bijhorende debuginformatie analyseren en de daaruit bekomen informatie gebruiken om een conservatieve controleverloopgraaf (de standaard datastructuur voor programmatransformaties) op te stellen. Op deze controleverloopgraaf kunnen dan de reeds bestaande analyses en optimalisaties van het Diablo raamwerk toegepast worden.