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

Désobfuscation des scripts PHP et JavaScript

Par sujet:


L’obscurcissement est l’un des moyens les plus fiables de protéger les scripts de l’apprentissage et de la modification.

Obfuscation (du latin obfuscare, "shade, dim") - enchevêtrement du code du programme, c'est-à-dire amener le texte source dans un formulaire préservant la fonctionnalité du programme, mais compliquant l'analyse, la compréhension des algorithmes et la modification.

Contrairement au cryptage et au packaging réversibles, l'obscurcissement est une action irréversible. Cela signifie que la restauration du code de script dans sa forme d'origine n'est pas possible. Sans aucune exception, les obfuscateurs PHP et JavaScript fonctionnent de deux manières: les sauts de ligne et les espaces insignifiants sont supprimés du texte source et les noms des classes, des variables et des fonctions sont remplacés par un ensemble de caractères sans signification. Ces actions peuvent être combinées ou effectuées indépendamment.

Comme je l'ai déjà dit, lors de la désobfuscation, il est impossible de ramener le code dans sa forme d'origine. Mais il est tout à fait possible de «l'ennoblir» dans un tel état, quand on peut facilement comprendre l'algorithme et faire les changements nécessaires. Par exemple, après la désobfuscation, il est possible de casser la protection de certains scripts PHP, de supprimer la liaison de JavaScript au domaine, de supprimer une publicité forcée ou quelque chose du genre.

La première étape de la désobscurcissement est la mise en forme du texte du script, la césure, l'alignement du code avec une «échelle» facile à lire. Pour cela, j'utilise deux outils. WaterProof Software a développé un petit programme gratuit (moins de 100 kilo-octets) pour formater le code php phpCodeBeautifier . Pour le télécharger depuis ofsayt, une inscription gratuite est requise. Cliquez ici pour un lien direct à télécharger. Le programme est une console, les paramètres de ligne de commande peuvent être trouvés dans les instructions de l’archive. Pour les amateurs de fenêtres, il existe une version graphique, bien que l'ancienne soit, mais vous pouvez facilement y attacher un fichier console de la dernière version.

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

Pour le formatage des scripts en JavaScript et en code HTML, il existe un service en ligne merveilleux Beautify Javascript . Il suffit de coller le texte du script dans le formulaire, d’appuyer sur le bouton "Beautify" et d’obtenir un script joliment 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 les efforts nécessaires pour réécrire le script dans une application complète.

Lors du formatage de scripts à grande échelle, le navigateur peut afficher un message l'informant que le script est gelé et proposer de stopper son exécution. Vous n'avez pas besoin de faire cela, cela prend plus de temps à traiter.

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

Si les noms des variables n'ont pas été remplacés lors de l'obscurcissement, une fois la mise en forme du code effectuée, la désobfuscation peut être considérée comme complète. Dans tous les cas, le script devient beaucoup plus lisible et compréhensible.

Si les noms des variables et des fonctions sont corrompus, passez à la deuxième partie de la désobfuscation. Malheureusement, il n’ya pas d’outils tout faits ici, ou du moins je ne les ai pas rencontrés. Si quelqu'un veut faire un don pour écrire un tel outil, je peux alors fournir un mandat détaillé. Bien qu'il soit nécessaire de se limiter aux calculs théoriques.

Aussi étrange que cela puisse paraître, mais pour la désobfuscation, nous utilisons les mêmes principes que pour l’obscurcissement. Les noms de toutes les variables sont extraits de tous les scripts et remplacés par d'autres. La seule différence est que nous allons récupérer les noms endommagés et les remplacer par des noms plus pratiques pour la perception. Par exemple, $ kOObgZ4tf2LEaSmFfc555 (Obfusc) ou $ IIIIIIIIIIIl (PHP LockIt!) À remplacer par $ var_3 . Pour un seul script, cela peut être fait dans un bloc-notes classique avec un remplacement global: pour plusieurs scripts, vous devez d'abord extraire tous les noms de variables de tous les scripts, puis seulement effectuer un remplacement global. Dans le même temps, n'oubliez pas les variables de service du type de 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 remplacer une meilleure qualité, il est recommandé de le faire après le formatage du code.

Cet article ne décrit que les principes généraux de la désobfuscation. Pour chaque cas, il est nécessaire de réfléchir et d'appliquer une approche individuelle. Mais généralement, pour exécuter un algorithme de piratage ou d'analyse d'une fonction distincte, une désobfuscation complète n'est pas requise.