This page has been robot translated, sorry for typos if any. Original content here.

Désobfuscation des scripts PHP et JavaScript

Par sujet:


L'une des méthodes les plus fiables pour protéger les scripts de l'étude et de la modification est l'obfuscation.

Obfuscation (du latin obfuscare, "ombre, assombrir") - enchevêtrement du code du programme, c'est-à-dire, amener le texte source à une forme qui préserve la fonctionnalité du programme, mais complique l'analyse, la compréhension des algorithmes et la modification.

Contrairement au cryptage et à l'emballage uniquement réversibles, l'obfuscation est une action irréversible. Cela signifie qu'il n'est pas possible de restaurer le code de script dans la vue d'origine. Tous sans exception, les obfuscateurs PHP et JavaScript fonctionnent de deux façons: à partir du texte source, les sauts de ligne et les espaces mineurs sont supprimés, et les noms de classes, variables et fonctions sont remplacés par un ensemble de caractères sans signification. Ces actions peuvent être combinées et exécutées indépendamment.

Comme je l'ai déjà dit, avec deobfuscation, il est impossible de ramener le code à sa forme originale. Mais il est tout à fait possible de "l'affiner" à un tel état que vous pouvez facilement comprendre l'algorithme et faire les changements nécessaires. Par exemple, après la désobfuscation, vous pouvez casser la protection de certains scripts PHP, supprimer la liaison JavaScript au domaine, supprimer la publicité obligatoire ou quelque chose comme ça.

La première étape de la désobfuscation est la mise en forme du texte du script, la césure, l'alignement du code qui est facile à lire avec "ladder". Pour cela, j'utilise deux outils. La société WaterProof Software a développé un petit programme gratuit (moins de 100 kilo-octets) pour le formatage du code PHP phpCodeBeautifier . Pour le télécharger de l'extérieur du site nécessite une inscription gratuite, alors voici pour la commodité d'un lien direct vers le téléchargement. Le programme est console, les paramètres de la ligne de commande peuvent être visualisés dans les instructions de l'archive. Pour les fans des fenêtres, il existe une version GUI, bien que la plus ancienne, mais il est tout à fait possible de mettre un fichier console de la dernière version.

Деобфускация скриптов PHP и JavaScript

Pour le formatage des scripts en JavaScript et HTML-code, il y a un merveilleux service en ligne Beautify Javascript . Il suffit d'insérer le texte du script dans le formulaire, appuyez sur le bouton "Beautify" et obtenez un script magnifiquement formaté. Pour plus de commodité, j'ai légèrement modifié et compilé cette page dans un fichier exe stationnaire. Peut-être qu'un jour je trouverai le temps et l'énergie pour réécrire le script dans une application à part entière.

Lorsque vous formatez des scripts volumineux, le navigateur peut afficher un message indiquant que le script est gelé et vous invite à l'arrêter. Vous n'avez pas besoin de faire cela, cela prend plus de temps à traiter.

Деобфускация скриптов PHP и JavaScript

Si l'obfuscation ne remplace pas le nom des variables, après le formatage du code, la désobfuscation peut être considérée comme complète. En tout cas, le script est déjà beaucoup plus lisible et compréhensible

Si les noms des variables et des fonctions sont corrompus, passez à la deuxième partie de la deobfuscation. Ici, malheureusement, il n'y a pas d'outils prêts à l'emploi, ou du moins je ne les ai pas rencontrés. Si quelqu'un veut prendre en charge gratuitement la rédaction d'un tel outil, je peux lui fournir une mission technique détaillée. Bien qu'il soit nécessaire de se limiter à des calculs théoriques.

Aussi étrange que cela puisse paraître, mais pour la désobfuscation, nous utiliserons les mêmes principes que pour l'obscurcissement. De tous les scripts, les noms de toutes les variables sont extraits et remplacés par d'autres. La seule différence est que nous allons extraire les noms gâtés et les remplacer par des noms plus pratiques. Par exemple, $ kOObgZ4tf2LEaSmFfc555 (Obfusc) ou $ IIIIIIIIIIIl (PHP LockIt!) Est remplacé par $ var_3 . Pour un seul script, vous pouvez le faire dans un bloc-notes ordinaire avec un remplacement global, pour plusieurs scripts, vous devrez d'abord extraire tous les noms de variables de tous les scripts, et seulement ensuite effectuer un remplacement global. Ne pas oublier les variables d'utilitaires telles que les tableaux globaux $ _GET et $ _POST en PHP, ainsi que les mots réservés en JavaScript. Ils n'ont pas besoin d'être traités. Pour que le remplacement soit effectué de manière plus qualitative, il est recommandé de le faire après avoir formaté le code.

Cet article ne décrit que les principes généraux de la désobfuscation, pour chaque cas il sera nécessaire de penser et d'appliquer une approche individuelle. Mais généralement, il n'est pas nécessaire de complètement désamorcer pour effectuer un algorithme de fissuration ou d'analyse d'une fonction individuelle.