التوثيق
/
تشويش VM
/

كيف تحوّل VM الكود

كيف تحوّل VM الكود

مع vmTargetFunctionsMode: 'root' (الافتراضي)، يحوّل تشويش VM جسم كل دالة على المستوى الجذري إلى بايت كود (بحسب vmObfuscationThreshold)، لكنه يبقي اسم الدالة دون تغيير.

// Input
function fibonacci(n) {
    if (n <= 1) return n;
    return fibonacci(n - 1) + fibonacci(n - 2);
}

// Output - function NAME is preserved, BODY is VM-transformed
function fibonacci(b) {  // name kept as-is
    return vm.call(...); // body converted to bytecode
}

يحافظ هذا التصميم على التوافق مع الكود الذي يستدعي هذه الدوال من النطاق العام أو يتوقع وجودها على الكائن العام. فجسم الدالة محمي بالكامل، لكن الاسم يبقى ظاهرًا.

إخفاء أسماء الدوال الحساسة:

إذا كان اسم الدالة يكشف ما يفعله الكود (مثل validateLicense وdecryptData)، فاستخدم أحد هذين الأسلوبين:

  • الخيار 1: التغليف داخل IIFE (موصى به)

    ضع الدوال الحساسة داخل IIFE أو داخل جسم أي دالة أخرى. فالدوال الموجودة داخل دوال أخرى ليست على المستوى الجذري، ولذلك تُحوَّل بالكامل بـ VM بما في ذلك أسماؤها.

    // Wrap sensitive code in IIFE
    (function() {
        function fibonacci(n) {
            if (n <= 1) return n;
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
        // Use fibonacci here...
    })();
    // "fibonacci" name is completely hidden in output
  • الخيار 2: إعادة تسمية المتغيرات العامة + الترميز (استخدمه بحذر)

    فعّل renameGlobals: true وvmBytecodeEncoding: true وvmBytecodeArrayEncoding: true. يعيد ذلك تسمية المعرِّفات على المستوى الجذري ويشفّرها داخل البايت كود.