Je vous propose de découvrir très succinctement une des facettes de la technique de protection des codes sources.
Le monde du Web n'est pas le monde des bisounours. Il est fréquent que certaines personnes malintentionnées veuillent récupérer tout ou partie du code source de votre application Web.
Pour éviter cela, il existe une technique connue sous le nom d'obfuscation qui consiste à rendre inintelligible aussi bien pour un être humain qu'un des compilateurs le code source de votre page tout en préservant le parfait fonctionnement lors de la compilation ou de l'interprétation.
Les principaux avantages de cette technique sont :
- protection du code
- performance
- camouflage
- peu onéreuse
- transparente intégralement pour les développeurs et utilisateurs
Qu'appelle-t-on rétro ingénierie ?
Plus connu sous le nom anglais Reverse Engineering, cette technique consiste à déterminer le fonctionnement interne d'une application à partir de sa compilation. Cela revient à dire que l'on cherche à reconstituer le code source à partir d'un exécutable.
Voici un exemple d'un code simple et son obfuscation (les premières lignes de la balise HEAD de la page d'accueil du forum du team ) :
le code en clair :
Code : Tout sélectionner
<!DOCTYPE html>
<html dir="ltr" lang="fr">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" type="image/png" href="favicon.png" />
<title>Team AAZ - Forum - Page d’index</title>
</head>
</html>
Code : Tout sélectionner
<script language="javascript">
<!--
document.write(unescape('%3C%21%44%4F%43%54%59%50%45%20%68%74%6D%6C%3E%0A%3C%68%74%6D%6C%20%64%69%72%3D%22%6C%74%72%22%20%6C%61%6E%67%3D%22%66%72%22%3E%0A%3C%68%65%61%64%3E%0A%3C%6D%65%74%61%20%63%68%61%72%73%65%74%3D%22%75%74%66%2D%38%22%20%2F%3E%0A%3C%6D%65%74%61%20%68%74%74%70%2D%65%71%75%69%76%3D%22%58%2D%55%41%2D%43%6F%6D%70%61%74%69%62%6C%65%22%20%63%6F%6E%74%65%6E%74%3D%22%49%45%3D%65%64%67%65%22%3E%0A%3C%6D%65%74%61%20%6E%61%6D%65%3D%22%76%69%65%77%70%6F%72%74%22%20%63%6F%6E%74%65%6E%74%3D%22%77%69%64%74%68%3D%64%65%76%69%63%65%2D%77%69%64%74%68%2C%20%69%6E%69%74%69%61%6C%2D%73%63%61%6C%65%3D%31%22%20%2F%3E%0A%3C%6C%69%6E%6B%20%72%65%6C%3D%22%69%63%6F%6E%22%20%74%79%70%65%3D%22%69%6D%61%67%65%2F%70%6E%67%22%20%68%72%65%66%3D%22%66%61%76%69%63%6F%6E%2E%70%6E%67%22%20%2F%3E%0A%0A%3C%74%69%74%6C%65%3E%54%65%61%6D%20%20%41%41%5A%20%2D%20%46%6F%72%75%6D%20%2D%20%50%61%67%65%20%64%19%69%6E%64%65%78%3C%2F%74%69%74%6C%65%3E%0A%0A%3C%2F%68%65%61%64%3E%0A%3C%2F%68%74%6D%6C%3E'));
//-->
</script>
Quelques notions d'obfuscation :
je ne vais vous citer que les principales notions (4) les plus utilisées. Cette liste n'est pas exhaustive loin s'en faut.
Il s'agit, entre autres, de :
- Attribution De Nouveaux Noms d'identifieurs
- Réduction du code
- Pruning
- Suppression du style algorithmique
Au préalable, le but de l'obfuscation est de rendre le code source incompréhensible.
Les identifieurs d'un programme donné sont les variables, les méthodes, les attributs, les classes, les constantes.
Il existe trois méthodes permettant de renommer les identifieurs :
- La méthode aléatoire fournit un identifiant aléatoire à chaque identifieurs.
- L'Overlord induction fournit un maximum d'identifieurs à la même chaîne de caractères. Ce procédé tente de renommer autant d'identifieurs que possible avec exactement le même nom. Les principaux avantages de cette méthode sont la réduction de la taille du code, le gain d'espace sur les entrées des piles et des chaînes.
- La méthode d'invisibilité fournit des caractères spéciaux interdits par le langage à chaque identifieur.
Celle-ci est "automatique" grâce à la suppression de toutes les indentations, tous les commentaires. Cette dernière suppression s’inscrit également dans l'objectif de fournir le moins de renseignements possibles à l'attaquant.
Pruning (purge des déclarations d'API non utilisées)
Un projet de développement utilise obligatoirement des API qui lui permettent de faire appel à des classes, méthodes etc. En effet, l'élagage des déclarations consiste à minimiser au maximum l'appel des bibliothèques non utilisées, afin de fournir un minimum d'indices sur l'algorithme employé.
Suppression du style algorithmique
Le style algorithmique d'une application permet de définir une lisibilité du code intuitive afin, de pouvoir d'une manière logique, déduire son fonctionnement. Le code de base suivant les conventions de codage sera alors minimisé afin d'apporter la lisibilité la plus maigre possible.
Comment obfusquer mon code ?
Pour cela en trouve des sites permettant de faire cette opération en ligne comme :
- snapbuilder .com (c'est celui que j'utilise )
Pour celui-ci, la manip est simple :
- Afficher la page Web que vous voulez protéger
- Affichez le code source de celle-ci
- Sélectionnez la totalité du code de la page (ctrl + A)
- Copier la sélection dans le presse papier (ctrl+c)
- Ouvrez snapbuilder
- Collez le code source de votre page (ctrl+v)
- Exécuter l'obfuscation et copier le résultat dans le presse papier
- Ouvrez le fichier de votre page html et remplacez tout le contenu par le script
- C'est fait le code de votre page html est maintenant protégé et cerise sur le gâteau elle s'affiche plus vite ...
Il existe également des logiciels pour cette opération comme :
- Skater .net
Voila, un petit survol d'une technique intéressante pour protéger nos scripts, programmes et autres développements personnels.
Si cela vous intéresse, j'ai, basée sur le tuto .htaccess Utiliser le .htaccess pour "ouvrir" un répertoire en dowload,
une application qui est protégée par cette méthode.
J'ai fait une capture d’écran pour l'URL et je vous l'enverrai en MP car je n'ai pas le droit de mettre des liens externes au site.
En espérant que cela vous aura donné envie de regarder cela de plus près.
Sources : supinfo, Google, Wikipédia ...