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

Désobfuscation de scripts PHP et JavaScript

Sur le sujet:


Aujourd'hui, l'un des moyens les plus fiables de protéger les scripts contre l'apprentissage et la modification est l'obscurcissement.

Obfuscation (du latin obfuscare, "shadow, darken") - obscurcissement du code du programme, c'est-à-dire coulée du texte source sous une forme qui préserve les fonctionnalités du programme, mais complique l'analyse, la compréhension des algorithmes de fonctionnement et la modification.

Contrairement au chiffrement et à l'emballage uniquement réversibles, l'obscurcissement est une action irréversible. Cela signifie qu'il n'est pas possible de restaurer le code du script dans sa forme d'origine. Sans exception, tous 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, variables et fonctions sont remplacés par un jeu de caractères sans signification. Ces actions peuvent être combinées ou exécuté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 «l'ennoblir» à un tel état lorsqu'il est possible de comprendre facilement l'algorithme et d'apporter les modifications nécessaires. Par exemple, après la désobfuscation, vous pouvez briser la protection de certains scripts PHP, supprimer la liaison de JavaScript au domaine, supprimer la publicité forcée 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 et l'alignement du code avec une "échelle" pratique pour la perception. 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 à partir d'un site externe, une inscription gratuite est requise, voici donc un lien de téléchargement direct pour plus de commodité. Le programme est une console, les paramètres de ligne de commande se trouvent dans les instructions de l'archive. Pour les amateurs de Windows, il existe une version GUI, bien qu'elle soit plus ancienne, mais vous pouvez y attacher un fichier de console de la dernière version.

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

Il existe un excellent service Beautify Javascript en ligne pour formater les scripts JavaScript et le code HTML. Collez simplement le texte du script dans le formulaire, cliquez sur le bouton "Embellir" 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.

Lors du formatage de scripts volumineux, le navigateur peut afficher un message indiquant que le script est figé et propose d'arrêter 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 lors de l'obfuscation, après la mise en forme du code, la désobfuscation peut être considérée comme terminée. En tout cas, le script est déjà beaucoup plus lisible et compréhensible.

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

Curieusement, cela semble, mais pour la désobfuscation, nous utilisons les mêmes principes que pour l'obfuscation. 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âtés et les remplacer par des noms plus pratiques pour la perception. Par exemple $ kOObgZ4tf2LEaSmFfc555 (Obfusc) ou $ IIIIIIIIIIIIIIl (PHP LockIt!) Remplacé par $ var_3 . Pour un seul script, cela peut être fait dans un bloc-notes standard avec remplacement global; pour plusieurs scripts, vous devrez d'abord extraire tous les noms de variables de tous les scripts, puis effectuer un remplacement global uniquement. 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 avoir formaté le 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 effectuer le piratage ou l'analyse d'un algorithme d'une fonction particulière, une désobfuscation complète n'est pas nécessaire.