
Reverse engineer obfuscated JavaScript visually. Chain transforms, inspect AST changes, write reusable deobfuscation plugins. हिंदी अनुवाद: ऑब्स्क्योर जावास्क्रिप्ट को दृश्य रूप से रिवर्स इंजीनियर करें। ट्रांसफ़ॉर्म को चेन करें, AST बदलाव का निरीक्षण करें, पुन: प्रयोज्य डी-ऑब्स्क्योरेशन प्लगइन लिखें।
JavaScript को डीऑबफसकेट करने के लिए एक दृश्य कार्यक्षेत्र। ट्रांसफॉर्म चेन बनाएं, उनमें कदम दर कदम आगे बढ़ें, अपने स्वयं के प्लगइन लिखें।


यह एप्लिकेशन JavaScript प्रोग्राम के Abstract Syntax Tree (AST) को प्रकट करता है। यह विचार एक obfuscatio.io से संबंधित मैलवेयर नमूने का विश्लेषण करते समय आया, जिसके परिणामस्वरूप मैंने डीऑबफसकेट के लिए BabelJS के बारे में और अधिक सीखा। यदि आपने कभी अस्पष्ट JS को रिवर्स इंजीनियर करने का प्रयास किया है (सोचें: webpack बंडल, obfuscator.io आउटपुट, पैक किए गए मैलवेयर नमूने), तो आप जानते हैं कि यह दर्दनाक है। यह उपकरण आपको अनुमति देता है:
npm install
npm start
# Open http://localhost:3000
बस इतना ही।
बायाँ साइडबार - सभी उपलब्ध ट्रांसफॉर्म (बिल्ट-इन + आपकी रेसिपी प्लगइन के रूप में) जिसमें रेसिपी चेन शामिल है। (साइबरशेफ की तरह सोचें)
मध्य - इनपुट/आउटपुट संपादक। अपना अस्पष्ट कोड बाईं ओर पेस्ट करें और दाईं ओर रूपांतरित कोड देखें।
दाएँ पैनल - AST व्यूअर, स्कोप विश्लेषक, आसानी से देखने योग्य सारांश।

BabelJS हमें स्कोप और बाइंडिंग देखने की अनुमति देता है। यह विशेष रूप से यह देखने के लिए उपयोगी है कि उदाहरण के लिए कोई अप्रयुक्त चर है या नहीं। यह दृश्य हमें उन स्थानों को देखने की भी अनुमति देता है जहां से एक चर संदर्भित किया जा रहा है।

स्क्रिप्ट संपादक खोलने के लिए + बटन दबाएं या Ctrl+N दबाएं। ट्रांसफॉर्म केवल JS कोड हैं जिनमें निम्न तक पहुंच है:
// Available globals:
ast // The parsed Babel AST
traverse // Walk the tree: traverse({ Identifier(path) { ... } })
t // Babel types: t.isStringLiteral(node), t.identifier('x')
config // User config from the recipe card
stats // Track your changes: stats.replaced = 5
parser // Parse code: parser.parse('var x = 1')
generate // Generate code: generate(node).code
run // Eval helper: run('1+1') => 2 (DANGER. THIS IS MEANT TO BE RUN ON YOUR OWN MACHINE IN A SANDBOX)
उदाहरण - सभी "debug" स्ट्रिंग्स हटाएं (StringLiteral):
// The following two will appear as parameter in recipe chain as seen in the next screenshot
const targetValue = config.targetValue || 'debug';
const removeMatches = config.removeMatches !== false;
traverse({
StringLiteral(path) {
if (path.node.value === targetValue) {
if (removeMatches) {
path.remove();
stats.removed = (stats.removed || 0) + 1;
}
}
}
});
आप चुन सकते हैं:
नीचे दिया गया स्क्रीनशॉट दिखाता है:

ध्यान दें कि ये अस्पष्टता तकनीक के आधार पर विफल हो सकते हैं और कस्टम स्क्रिप्ट की आवश्यकता हो सकती है। आप उन्हें संशोधित भी कर सकते हैं और नई कस्टम स्क्रिप्ट के रूप में सहेज सकते हैं।
| नाम | यह क्या करता है |
|---|---|
| Beautify | कोड को अच्छी तरह से फ़ॉर्मेट करता है |
| Constant Folding | 1 + 2 → 3, "a" + "b" → "ab" |
| Decode Strings | \x48\x65\x6c\x6c\x6f → "Hello" डिकोड करता है |
| Inline Array Values | सरल ऐरे तत्व एक्सेस को इनलाइन करता है |
| Inline String Array | ऑबफसकेटर्स द्वारा उपयोग किए जाने वाले स्ट्रिंग ऐरे को इनलाइन करता है |
| Opaque Predicate Removal | हमेशा सत्य/असत्य शर्तों को हटाता है |
| Remove Comments | कोड से सभी टिप्पणियाँ हटाता है |
| Remove IIFE | (function(){...})() रैपर को हटाता है |
| Remove Unused Code | मृत चर और फ़ंक्शन हटाता है |
| Simplify Literals | !0 → true, void 0 → undefined |
अपनी स्वयं की .js फ़ाइलों को plugins/<category>/ उपफ़ोल्डर में डालें। वे फ़ोल्डर के अनुसार समूहित साइडबार में दिखाई देंगी।

उदाहरण के लिए:
Bracket-to-dot-notation.js → "Decode Strings")plugins/Utilities/ → श्रेणी "nyx")/**
* Bracket to Dot Notation
* Changes things like console["log"] to console.log
*
* Category: utilities
*/
// Script Editor - Ctrl+Enter to run, Ctrl+E to close
// Use traverse(visitor) to modify the AST
// Access 't' for Babel types
traverse({
MemberExpression(path) {
if(path.node.computed === true){
// this is the bracket notation
prop = path.node.property
if(t.isStringLiteral(prop) &&
/^[a-zA-Z_][a-zA-Z_0-9]*$/.test(prop.value)
){
path.node.computed = false; // step 1
// step 2 change literal to identifier
path.node.property = t.identifier(prop.value)
}
}
}
});
पैरामीटर जोड़ने के दो तरीके हैं:
targetValue और removeMatches) बनाने का प्रयास करेगा।const targetValue = config.targetValue || 'debug';
const removeMatches = config.removeMatches !== false;

इसमें शामिल है:

| कुंजी | कार्रवाई |
|---|---|
Ctrl+E | स्क्रिप्ट संपादक टॉगल करें |
Ctrl+Shift+E | eval पैनल टॉगल करें (खतरनाक) |
Ctrl+S | प्रोजेक्ट सहेजें |
ध्यान दें कि यदि बहुत सारे नेस्टेड नोड हैं तो स्टैंडअलोन में समस्याएं हो सकती हैं। कार्य के आसपास कभी-कभी काम नहीं कर सकता।
npm के साथ बनाने के लिए, हम निम्नलिखित का उपयोग कर सकते हैं
npm run build # Windows only
आउटपुट dist/ पर जाता है। यदि आप अपने कस्टम ट्रांसफॉर्म चाहते हैं तो plugins/ फ़ोल्डर को exe के बगल में कॉपी करें।
गहराई से नेस्टेड कोड (JSFuck की तरह) स्टैक को उड़ा सकता है। बिल्ड स्क्रिप्ट Windows पर इसे स्वचालित रूप से बढ़ाने का प्रयास करती है। यदि आपको स्टैक ओवरफ्लो मिलता है, तो npm start के साथ स्रोत से चलाने का प्रयास करें (--stack-size=65536 का उपयोग करता है)
मुझे यह पता नहीं चला है कि स्टैंडअलोन एक्जीक्यूटेबल में बनाते समय स्टैक आकार कैसे बढ़ाया जाए। यदि आप जानते हैं कि कैसे, तो कृपया मुझे बताएं!
इसके साथ बनाया गया:

प्रश्न? समस्याएं? GitHub issue खोलें।