├── README.md ├── code.js ├── images ├── 1337.png ├── code.png ├── download.png ├── require.png ├── require2.png └── version.png └── package.json /README.md: -------------------------------------------------------------------------------- 1 | # deobfuscator tool v1.1 by molo 2 | ## changelog 3 | bah j'avais oublié un \ dcp ça remplaçait `\u0022` par `"` au lieu de remplacer par `\"` 4 | aussi j'ai update le readme xd 5 | ## installation 6 | Cliquez simplement sur le bouton Code comme sur le screen 7 | ![code](./images/code.png) 8 | puis sur Download ZIP. 9 | ![download](./images/download.png) 10 | Ensuite vous n'avez plus qu'à extraire le zip sur votre bureau par exemple. 11 | ## utilisation 12 | **1** allez dans le dossier que vous venez d'extraire et copiez le fichier `code.js` 13 | **2** collez le dans le dossier où se trouve le fichier que vous voulez deob 14 | **3** ouvrez le fichier que vous voulez deob, copiez tout le code et utilisez https://beautifier.io/ pour obtenir une version à moitié deob 15 | La version que vous venez d'obtenir n'est pas totalement deob mais déjà plus lisible. Elle va nous servir pour trouver les fonctions de désobfuscation. 16 | **4** pensez à remplacer le contenu du fichier à deob 17 | **5** c'est la que ça se complique... il va nous falloir les fonctions de désobfuscation 18 | **5.1** ouvrez le fichier à deob avec un éditeur de texte de votre choix. 19 | **5.2** ensuite, faites ctrl + f 20 | **5.3** tapez `require` 21 | **5.4** recherchez la première occurence, cela devrez vous donner quelque chose comme ça : 22 | ![require](./images/require.png) 23 | **5.5.a** si vous avez un résultat similaire, copiez tout ce qu'il y a AVANT `const _0x1234 = require(...)` et collez le dans code.js 24 | **5.5.b** si votre résultat ressemble plutôt à ça : 25 | ![require2](./images/require2.png) 26 | ce n'est pas grave, c'est juste que vos fonctions de désobfuscation se trouvent à un autre endroit 27 | ![require3](./images/1337.png) 28 | copiez donc les fonctions de désobfuscation (en rouge) et collez les dans code.js 29 | si vous n'avez toujours pas compris contactez moi sur discord (molo#0001) 30 | **6** ouvrez cmd dans ce dossier (ouvrez cmd et faites `cd C:/dossier` ou `cd /d X:/dossier`) 31 | **7** faites `node -v` et vérifiez que votre version est bien supérieure à la v12 (comme sur le screen) 32 | ![version](./images/version.png) 33 | ATTENTION : si votre version est inférieure à la v12 ou que vous avez une erreur il faut réinstaller node. 34 | (pour cela allez sur https://nodejs.org/en/ et choisissez une des deux versions) 35 | **8** pour terminer, il ne vous reste plus qu'à faire `node code "fichier.js"` pour deob le fichier (pensez évidemment à mettre le nom du fichier à la place de fichier.js) 36 | **8.1** vous pouvez aussi écrire `node code "2" "_0x1234[_0x5678(9)]"` pour ne pas deob tout le fichier 37 | **9** si vous avez une erreur "Allocation failed - JavaScript heap out of memory" ou qu'il ne se passe rien c'est que les presets de l'obfuscation sont trop élevés (donc impossible de deob si vous n'avez pas un minimum d'expérience) 38 | **10** si tout se passe bien, le fichier à deob va être modifié et vous n'aurez plus qu'à l'ouvrir de nouveau pour accéder au contenu désobfusqué 39 | -------------------------------------------------------------------------------- /code.js: -------------------------------------------------------------------------------- 1 | // --------------------------- 2 | /// vous pouvez placer les fonctions ici 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | // --------------------------- 20 | 21 | 22 | function exists(str) { 23 | try { 24 | eval(str); 25 | return true; 26 | } catch (e) { 27 | return false; 28 | } 29 | } 30 | 31 | Array.prototype.conserveOne = function () { 32 | let xd = []; 33 | this.forEach(e => { 34 | if (xd.includes(e)) return; 35 | xd.push(e); 36 | }); 37 | return xd; 38 | } 39 | 40 | String.prototype.replaceArrayWithString = function(arr, str) { 41 | var replaced = this; 42 | arr.forEach(el => { 43 | replaced = replaced.split(el).join(str); 44 | }); 45 | return replaced; 46 | }; 47 | 48 | const fs = require("fs"); 49 | 50 | String.prototype.replaceArrayWithArray = function(arr, omg) { 51 | var replaced = this; 52 | arr.forEach(el => { 53 | let replace = omg[arr.indexOf(el)]; 54 | if (typeof replace === "string" && !el.startsWith("\\x")) replace = `"${replace}"`.replace(/\n/g, "\\n"); 55 | replaced = replaced.split(el).join(replace); 56 | }); 57 | return replaced; 58 | }; 59 | 60 | const wate = process.argv[1].substring(process.argv[1].lastIndexOf("\\")+1), 61 | filename = process.argv[2], 62 | func = process.argv[3]; 63 | 64 | if (process.argv.length < 3 || process.argv.some(pd => !pd)) return console.log('\x1b[31mUtilisation : node '+wate+' "fichier.js" ou node '+wate+' 2 "0x1324(0x987)"\x1b[0m'), process.exit(); 65 | if (process.argv[2] == 2) return console.log(eval(func)), process.exit(); 66 | 67 | let trans = wate.substring(0, wate.lastIndexOf(".")), gay = filename.substring((58454+565/10)*0, filename.lastIndexOf(".")); 68 | 69 | if (wate === filename || wate === gay || (trans && trans === filename) || (trans && gay && trans === gay)) return console.log("\x1b[31mVeuillez ne pas désobfusquer le fichier actuel, cela pourrait causer des problèmes. (créez-en plutôt un nouveau)\x1b[0m"), process.exit(); 70 | if (!fs.existsSync(filename)) return console.log("\x1b[31mLe fichier "+filename+" n'existe pas.\x1b[0m"), process.exit(); 71 | 72 | try { 73 | fs.readFile(filename, (err, buf) => { 74 | if (err) throw err; 75 | let data = buf.toString(), 76 | slash = "\\", 77 | obf0 = data.match(RegExp("_0x\\w*\\([^)]*.","g")) || []; 78 | 79 | obf0 = obf0.conserveOne(); 80 | 81 | let obf = [], 82 | deob = []; 83 | 84 | obf0.forEach(d4rk => { 85 | if (exists(d4rk)) obf.push(d4rk); 86 | if (exists(d4rk.substring(d4rk.indexOf("(")+1))) obf.push(d4rk.substring(d4rk.indexOf("(")+1)); 87 | }); 88 | 89 | obf.forEach(gay=>deob.push(eval(gay))); 90 | 91 | let deobfuscated = data.replaceArrayWithArray(obf, deob).replace(/\\x[\w-]{2}/g, function (value) { 92 | let newVal = eval(`"${value}"`); 93 | if (value === "\\x27" || value === "\\x22") newVal = "\\"+newVal; 94 | if (value === "\\x0A" || value === "\\x0a") newVal = "\\n"; 95 | if (value === "\\x1B" || value === "\\x1b") newVal = "\\x1b"; 96 | if (value === "\\x5C" || value === "\\x5c") newVal = "\\"; 97 | return newVal; 98 | }).replace(/\\u[\w-]{4}/g, function (value) { 99 | let newVal = eval(`"${value}"`); 100 | if (value === "\\u0027" || value === "\u0022") newVal = "\\"+newVal; 101 | if (value === "\\u000A" || value === "\\u000a") newVal = "\\n", console.log(value); 102 | if (value === "\\u005C" || value === "\\u005c") newVal = "\\", console.log(value); 103 | return newVal; 104 | }); 105 | 106 | const newData = new Uint8Array(Buffer.from(deobfuscated)); 107 | 108 | fs.writeFile(filename, newData, (er) => { 109 | if (er) throw er; 110 | console.log("\x1b[32mLe fichier "+filename+" a correctement été désobfusqué\x1b[0m"); 111 | process.exit(); 112 | }); 113 | }); 114 | } catch (e) { 115 | console.error(e); 116 | process.exit(); 117 | } -------------------------------------------------------------------------------- /images/1337.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MOL0/deobfuscator-tool/fd66460e8fdd0263042b50d3e969b2f82e3ef73c/images/1337.png -------------------------------------------------------------------------------- /images/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MOL0/deobfuscator-tool/fd66460e8fdd0263042b50d3e969b2f82e3ef73c/images/code.png -------------------------------------------------------------------------------- /images/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MOL0/deobfuscator-tool/fd66460e8fdd0263042b50d3e969b2f82e3ef73c/images/download.png -------------------------------------------------------------------------------- /images/require.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MOL0/deobfuscator-tool/fd66460e8fdd0263042b50d3e969b2f82e3ef73c/images/require.png -------------------------------------------------------------------------------- /images/require2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MOL0/deobfuscator-tool/fd66460e8fdd0263042b50d3e969b2f82e3ef73c/images/require2.png -------------------------------------------------------------------------------- /images/version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MOL0/deobfuscator-tool/fd66460e8fdd0263042b50d3e969b2f82e3ef73c/images/version.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deobfuscator-tool", 3 | "version": "1.1.0", 4 | "description": "Un tool pour désobfusquer les scripts obfusqués avec obfuscator.io (dev par molo#7947).", 5 | "main": "code.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": { 10 | "name": "mol0" 11 | }, 12 | "license": "ISC", 13 | "dependencies": {}, 14 | "devDependencies": {} 15 | } --------------------------------------------------------------------------------