एसिंक एक्ज़ीक्यूटर
VM को असिंक्रोनस रूप से चलाएँ, ताकि बाइटकोड डिक्रिप्शन कुंजी बंडल के अंदर भेजने के बजाय रनटाइम पर लाई जा सके।
vmAsyncExecutor विकल्प असिंक्रोनस VM एक्ज़ीक्यूटर चालू करता है। इसका सबसे बड़ा फ़ायदा यह है कि अब vmBytecodeArrayEncodingKeyGetter एक Promise लौटा सकता है — यानी एक असिंक्रोनस की-गेटर — जिससे डिक्रिप्शन कुंजी लोड के समय किसी नेटवर्क रिक्वेस्ट, IndexedDB या किसी भी एसिंक स्रोत से आ सकती है, बजाय इसके कि कोड के पहली बार चलने पर वह सिंक्रोनस रूप से उपलब्ध हो।
बैकएंड से कुंजी लाने की पूरी प्रक्रिया के लिए रेसिपी बैकएंड से बाइटकोड ऐरे कुंजी लाना देखें।
इसे कब इस्तेमाल करें
पूरी तरह एसिंक कोडबेस के लिए यह बेहद अनुशंसित है। इस मोड में केवल async फ़ंक्शन्स ही वर्चुअलाइज़ किए जाते हैं — किसी सिंक्रोनस फ़ंक्शन को एसिंक बनाने पर उसका रिटर्न वैल्यू Promise बन जाएगा और उसे कॉल करने वाला कोड टूट जाएगा — इसलिए जो कोड पूरी तरह async है, उसे सबसे ज़्यादा कवरेज मिलती है। रूट सिंक्रोनस होने पर भी यह काम करता है (उदाहरण के लिए कोई सिंक IIFE या UMD रैपर): अंदर मौजूद सबसे बाहरी async फ़ंक्शन्स सुरक्षित हो जाते हैं और सिंक हिस्से जस के तस रहते हैं।
क्या-क्या बदला जाता है
हर सबसे बाहरी async फ़ंक्शन, चाहे वह कहीं भी हो (सिंक रैपर्स के अंदर नेस्टेड होने पर भी)। हर चेन में सबसे बाहरी एसिंक ही सुरक्षा की इकाई है — उसके अंदर का सब कुछ, सिंक और एसिंक दोनों, उसी में कंपाइल हो जाता है। सिंक्रोनस फ़ंक्शन्स और साधारण जनरेटर्स ऑब्फ़स्केट नहीं किए जाते।
function foo() { // sync — left as-is
function bar() {} // sync — left as-is
async function baz() { // transformed
// any code here, including calls to other async or sync functions
}
async function bark() { // transformed
// any code here, including calls to other async or sync functions
}
}
छूटे हुए फ़ंक्शन और चेतावनियाँ
जब कोई असिंक्रोनस की-गेटर सक्रिय हो, तो एसिंक जनरेटर्स भी ऑब्फ़स्केट नहीं किए जाते — एक एसिंक जनरेटर को अपना इटरेटर सिंक्रोनस रूप से लौटाना पड़ता है और वह कुंजी का इंतज़ार नहीं कर सकता। डिफ़ॉल्ट vmTargetFunctionsMode: 'root' में ये छूट चुपचाप होती हैं (चयन अपने आप होता है)। 'comment' मोड में, जब भी आपके द्वारा स्पष्ट रूप से चिह्नित कोई फ़ंक्शन वर्चुअलाइज़ नहीं हो पाता — वह सिंक्रोनस निकला, या एसिंक की-गेटर के तहत एसिंक जनरेटर है — तो ObfuscationResult.getWarnings() के ज़रिए एक चेतावनी दी जाती है। इन चेतावनियों (VMSyncFunctionSkippedInAsyncMode, VMAsyncGeneratorSkippedInAsyncMode) को warnings विकल्प (v7.8.0+) से प्रति-प्रकार बंद किया जा सकता है।
आवश्यकताएँ
- असिंक्रोनस की-गेटर के लिए
vmBytecodeArrayEncodingके साथ-साथvmBytecodeArrayEncodingKeyGetterभी ज़रूरी है। - ऑब्फ़स्केटर वर्शन 7.3.0 या उससे नया।
उदाहरण
JavaScriptObfuscator.obfuscate(code, {
vmObfuscation: true,
vmAsyncExecutor: true,
vmBytecodeArrayEncoding: true,
vmBytecodeArrayEncodingKey: 'mySecretKey123',
// the key getter may now return a Promise
vmBytecodeArrayEncodingKeyGetter: 'fetch("/vm-key").then((res) => res.text())'
});
