javascript-obfuscator 5.x आउटपुट के लिए Deobfuscator (स्ट्रिंग एरे, कंट्रोल-फ़्लो फ़्लैटनिंग, सेल्फ-डिफ़ेंडिंग, RC4/base64)
javascript-obfuscator 5.x आउटपुट के लिए डीऑब्फस्केटर। इसे ऑब्फस्केटेड JS दें, और वही चलने वाला पठनीय JS वापस पाएं।
Node 18+ आवश्यक है।
git clone https://github.com/lolcaken/javascript-deobfuscator.git
cd javascript-deobfuscator
npm install
npm run build
किसी फ़ाइल को डीऑब्फस्केट करें (-o दिए जाने तक इनपुट के बगल में <name>.deob.js लिखता है):
node dist/src/cli.js input.ob.js -o output.js --stats
फ़्लैग:
| Flag | Effect |
|---|---|
-o <file> | आउटपुट पथ (डिफ़ॉल्ट: <input>.deob.js) |
--no-rename | _0x… पहचानकर्ताओं का नाम बदलने के बजाय उन्हें रखें |
--stats | प्रिंट करें कि प्रत्येक पास ने क्या बदला |
-h | उपयोग |
या npm link के बाद, कहीं भी:
deobfuscate input.ob.js -o output.js
इसे लाइब्रेरी के रूप में उपयोग करें:
import { deobfuscate } from 'javascript-deobfuscator';
const { code, stats } = deobfuscate(obfuscatedSource, { rename: true });
console.log(code);
प्रकाशित होने के बाद npm से इंस्टॉल करें:
npm install javascript-deobfuscator
इनपुट — test/fixtures/source.js को javascript-obfuscator (स्ट्रिंग एरे + रोटेशन, स्प्लिट स्ट्रिंग्स, कंट्रोल-फ़्लो फ़्लैटनिंग, डेड-कोड इंजेक्शन, ऑब्जेक्ट-की ट्रांसफ़ॉर्म, नंबर एक्सप्रेशन) से ऑब्फस्केट किया गया, इसका 3690 बाइट्स:
function _0x54b6(_0xb7919b,_0x500140){_0xb7919b=_0xb7919b-(0x1f8d+-0x1*-0xb9d+0x2a06*-0x1);const _0x229d59=_0x1598();let _0x3ccc27=_0x229d59[_0xb7919b];return _0x3ccc27;}const _0x822f89=_0x54b6;function _0x1598(){const _0x23b861=['com/','http','ies','log','join','uiXo','alic','fqAn','oint','bob','2zqCUix','PJTj','3161739tTCvqO','?r=','5dPKAUt','727970ZDbPoX','ple.','caro','neg','s://',…];_0x1598=function(){return _0x23b861;};return _0x1598();}(function(_0x5e6e6e,_0x257dcb){const _0x5ed3d4=_0x54b6,_0x860095=_0x5e6e6e();while(!![]){try{const _0x44a344=-parseInt(_0x5ed3d4(0x138))/(0xb*-0x281+0x1c08+0x2*-0x3e)+…;if(_0x44a344===_0x257dcb)break;else _0x860095['push'](https://github.com/lolcaken/javascript-deobfuscator/blob/main/_0x860095%5B%27shift%27%5D%28));}catch(_0x1f2aee){_0x860095['push'](https://github.com/lolcaken/javascript-deobfuscator/blob/main/_0x860095%5B%27shift%27%5D%28));}}}(_0x1598,…));const greeting=_0x822f89(0x12e)+'o';function greet(_0x35652d){…}const users=[_0x822f89(0x12c)+'e',_0x822f89(0x12d),_0x822f89(0x138)+'l'];
(पूरी ऑब्फस्केटेड फ़ाइल test/fixtures/demo.ob.js पर है।)
आउटपुट — 2359 बाइट्स, समान रूप से चलता है:
const greeting = "Hello";
function greet(p) {
const q = f,
r = {};
r[q(0x12b) + 'i'] = function (u, v) {
return u + v;
}, r[q(0x140) + 'X'] = function (w, x) {
return w + x;
};
const s = r,
t = s[q(0x12b) + 'i'](https://github.com/lolcaken/javascript-deobfuscator/blob/main/s%5Bq%280x12b) + 'i'](s[q(0x140) + 'X'](https://github.com/lolcaken/javascript-deobfuscator/blob/main/greeting%2C ",\x20"), p), '!');
return t;
}
const users = ["alice", "bob", "carol"];
let total = 0;
for (let i = 0; i < users.length; i++) {
total += users[i].length, console.log(greet(users[i]));
}
(पूरा आउटपुट: test/fixtures/demo.deob.js।)
दोनों प्रिंट करते हैं:
Hello, alice!
Hello, bob!
Hello, carol!
https://api.example.com/v1?r=3 13 zero|pos|pos
while(true){switch…}), डेड-कोड इंजेक्शन_0x… नामकरणnpm test नमूना प्रोग्रामों को javascript-obfuscator 5.9.0 के साथ तीन प्रीसेट्स (डिफ़ॉल्ट, मध्यम, भारी) के अंतर्गत ऑब्फस्केट करता है और दावा करता है कि डीऑब्फस्केटेड कोड समान आउटपुट प्रिंट करता है और साफ़ तौर पर पुनः पार्स होता है। वर्तमान में 9/9।
ISC — LICENSE देखें।