Obfuscation

De Wiki SIO EDM
Aller à : navigation, rechercher

En programmation informatique, l'obfuscation (ou autrement appelée obscurcissement) est une technique qui consiste à rendre illisible un programme, tout en le gardant pleinement fonctionnel, dans le but d'éviter toute pratique de reverse engineering sur ce même programme. C'est une forme de cryptographie.

Introduction

Tout comme dans le langage courant, l'obfuscation consiste à utiliser des expressions particulières pour composer des phrases. Les programmeurs vont obfusquer le code pour cacher son utilité ou la logique dans laquelle il est soumis, dans le but de prévenir des manipulations malveillantes de ce code, comme l'accès à des données privées, le contournement de licences logicielles, ou le vol de propriété intellectuelle.

L'obfuscation est aussi utilisée de manière ludique en créant des énigmes à travers le code source, que le lecteur devra déchiffrer. [1]

Le code peut être obfusqué manuellement par le développeur ou automatiquement via l'utilisation d'outils dédiés. [2]

Certains langages de programmation sont plus faciles à obfusquer que d'autres. Les langages tels que le C, le C++ et le C# sont connus comme étant faciles à obfusquer.

Méthodes

Renommage

Le renommage, comme son nom l'indique, consiste à renommer les différentes variables et fonctions du code. Il rend le code source plus difficile à comprendre pour l'être humain qui le lit mais ne vas pas altérer l'exécution du programme. Les nouveaux noms auront différents plans comme "a" - "b" - "c", des numéros, des caractères spéciaux ou même des caractères invisibles.

Obfuscation renommage.png

Cryptage de chaîne de caractères

Dans le code d'un programme, les chaînes de caractères sont facilement lisibles et accessibles. Même quand les variables et les fonctions sont renommées, les chaînes de caractères peuvent être utilisées pour localiser les sections les plus importantes du code, qui incluent les messages (notamment les messages d'erreur) qui seront affichés à l'écran de l'utilisateur. Pour éviter ce type d'attaque, le cryptage de chaîne de caractères va cacher les chaînes du code et va restaurer leur valeur initiale seulement quand c'est nécessaire.

Obfuscation chaine.png

Insertion de code factice

L'obfuscation par insertion de code factice consiste à insérer du code dans l'exécutable qui ne va pas affecter la logique du programme, mais qui va rendre le code décompilé (après un reverse engineering) bien plus difficile à analyser.

Obfuscation insertion.png

Contrôle du flux

L'obfuscation par contrôle du flux transforme la logique du code décompilé en "code spaghetti"[3] ce qui le rend bien plus difficile à comprendre pour un hacker. Cette technique est très efficace mais a de grandes chances d'affecter la vitesse d'exécution du code et donc d'impacter ses performances.

Obfuscation controleduflux.png

Avantages et inconvénients

L'obfuscation du code d'un programme a pour principal avantage de pouvoir le protéger de sa propriété intellectuelle en rendant le reverse engineering de ce programme très difficile. Les autres avantages qu'offre l'obfuscation incluent la protection des mécanismes de licences logicielles, la protection contre les accès non autorisés, et la réduction de la taille de l'exécutable. Pour certains langages de programmation, les programmes s'exécutent plus rapidement et occupent moins d'espace de RAM lorsqu'ils utilisent des variables à caractère unique, qu'ils ne contiennent pas de commentaires et qu'ils n'ont pas de caractères invisibles.

Même si un programme obfusqué sera bien plus difficile à lire, à écrire et à décompiler par reverse engineering, ça ne le rendra pas nécessairement impossible à déchiffrer. Certains anti-virus vont alerter leurs utilisateurs lorsqu'ils tombent sur une page dont le code est manuellement obfusqué, puisque l'obfuscation est souvent utilisée pour cacher du code malveillant, mais certains développeurs emploient l'obfuscation pour pouvoir réduire la taille d'un fichier ou pour accroître la sécurité du code. Cela est embêtant puisqu'en recevant ces alertes, certains utilisateurs peuvent être moins réticents à visiter une page, alors qu'il n'y a aucun danger.

Voir aussi

Références