Ce que cet outil inverse
De nombreux obfuscateurs JavaScript — y compris celui de ce site — réécrivent le code par un petit ensemble de transformations statiques mécaniques : ils déplacent chaque chaîne littérale dans un seul tableau et remplacent chaque usage par un appel à une fonction d'accès, échappent les caractères ordinaires en séquences \xNN ou \uNNNN, développent une arithmétique simple en expressions équivalentes mais plus longues, enveloppent le vrai code dans un if toujours vrai ou toujours faux, et réécrivent a.b en a['b']. Cet outil inverse exactement ces cinq choses :
- Intégration du tableau de chaînes — trouve
var _s = ["foo", "bar"]; function _g(i){ return _s[i]; }et remplace chaque appel du type_g(0)dont l'index est un nombre littéral par la vraie chaîne, puis supprime le tableau et la fonction si plus rien ne les utilise. - Décodage des échappements — affiche
\x48\x69sous la formeHiplutôt que la forme échappée. - Réduction des constantes — transforme
1 + 2en3,"a" + "b"en"ab", et une arithmétique littérale similaire, en évitant tout ce qui nécessiterait une supposition (comme diviser par un littéral zéro). - Suppression des branches mortes —
if (true) { A } else { B }devient simplementA; unwhile (false) {}disparaît complètement. - Crochet vers point —
obj['nom']devientobj.nomquandnomest un identifiant valide.
Ce qu'il ne fait pas
Ceci est une correspondance de motifs statique sur un AST, pas un désobfuscateur généraliste. Il n'exécute aucun code, donc il ne peut ni décompresser un chargeur basé sur eval, ni résoudre un prédicat opaque dépendant d'une valeur d'exécution, ni inverser l'aplatissement du flux de contrôle au-delà du cas littéral unique if/while/ternaire ci-dessus. Les noms de variables sont laissés tels quels — _0x1a2b reste _0x1a2b. Si votre fichier ne correspond pas exactement à la forme tableau-de-chaînes + fonction d'accès, cette étape signale simplement zéro appel intégré plutôt que de deviner un autre motif.
Comment ça marche
Le code est analysé en AST avec acorn, parcouru et réécrit avec des transformations écrites à la main qui n'agissent que lorsqu'une valeur est déjà démontrablement littérale, puis régénéré avec astring. Rien n'est envoyé à un serveur : l'analyse et la réécriture se font dans votre navigateur.
Comment l'utiliser
Collez ou saisissez du JavaScript dans l'éditeur puis exécutez. Le résumé indique exactement combien de fois chaque étape s'est déclenchée, pour voir ce qui a changé et ce qui n'a pas changé. Copiez le résultat ou téléchargez-le en fichier .js.
Tiny Online Tools







