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

Déobfuscation des scripts PHP et JavaScript

Sur le 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, "colore, assombrit") - obscurcissement 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 de fonctionnement et la modification.

Contrairement au cryptage et au packaging réversibles, l'obscurcissement est une action irréversible. Cela signifie qu'il n'est pas possible de restaurer le code de script dans sa forme d'origine. Tous les obfuscateurs PHP et JavaScript fonctionnent sans exception de deux manières: les sauts de ligne et les espaces insignifiants sont supprimés du texte source et les noms des classes, variables et fonctions sont remplacés par un jeu de caractères dépourvu de sens. 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 à sa forme d'origine. Mais il est tout à fait possible de le "raffiner" dans un état où il est possible de comprendre facilement l’algorithme et d’apporter les modifications nécessaires. Par exemple, après la désobfuscation, vous pouvez annuler la protection de certains scripts PHP, supprimer la liaison de JavaScript au domaine, supprimer les publicités forcées ou quelque chose du genre.

La première étape de la désobfuscation est la mise en forme du texte du script, la césure et 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 de script PHP phpCodeBeautifier . Pour le télécharger depuis un site hors site, vous devez vous enregistrer gratuitement. Voici donc un lien de téléchargement direct pour votre commodité. Le programme est console, les paramètres de ligne de commande peuvent être trouvés dans les instructions de l’archive. Pour les amateurs de Windows, il existe une version graphique, bien qu’elle soit plus ancienne, mais vous pouvez y joindre un fichier console de la dernière version.

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

Il existe un excellent service Javascript Beautify pour le formatage des scripts JavaScript et du code HTML. Il suffit de coller le texte du script dans le formulaire, de cliquer sur le bouton "Embellir" et d’obtenir un script superbement 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 nécessaires pour réécrire le script en une application à part entière.

Lors du formatage de scripts volumineux, le navigateur peut afficher un message l'informant que le script est gelé et propose de stopper son exécution. Ce n'est pas nécessaire, le traitement prend plus de temps.

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

Si les noms de variables n'ont pas été remplacés pendant l'obscurcissement, la déobfuscation peut être considérée comme terminée après le formatage du code. Dans tous les cas, le script est déjà beaucoup plus lisible et compréhensible.

Si les noms des variables et des fonctions sont gâtés, nous passons à la deuxième partie de la désobfuscation. Malheureusement, il n’existe pas d’outils prêts à l’emploi, ou du moins je ne les ai pas vus. Si quelqu'un veut écrire un tel outil gratuitement, je peux alors fournir une tâche technique détaillée. Pour l'instant, nous devons nous limiter aux calculs théoriques.

Cela semble curieusement, 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 extraire les noms gâchés et les remplacer par des noms plus pratiques pour la perception. Par exemple, $ kOObgZ4tf2LEaSmFfc555 (Obfusc) ou $ IIIIIIIIIIIIIIl (PHP LockIt!) Est remplacé par $ var_3 . Pour un seul script, cela peut être fait dans un bloc-notes classique avec 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 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 rendre le remplacement plus efficace, 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. Dans chaque cas, il est nécessaire de réfléchir et d'appliquer une approche individuelle. Mais généralement, pour effectuer le piratage ou l'analyse d'un algorithme d'une fonction particulière, une désobfuscation complète n'est pas requise.