Dokumentasi
/
Obfuskasi VM
/

Cara VM Mentransformasi Kode

Cara VM Mentransformasi Kode

Dengan vmTargetFunctionsMode: 'root' (bawaan), obfuskasi VM mentransformasi tubuh dari setiap fungsi di tingkat akar menjadi bytecode (bergantung pada vmObfuscationThreshold), tetapi mempertahankan nama fungsinya tanpa perubahan.

// 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
}

Desain ini menjaga kompatibilitas dengan kode yang memanggil fungsi-fungsi ini dari scope global atau mengharapkannya ada pada objek global. Tubuh fungsi sepenuhnya terlindungi, tetapi namanya tetap terlihat.

Menyembunyikan nama fungsi yang sensitif:

Jika nama fungsi mengungkapkan apa yang dilakukan kode (mis. validateLicense, decryptData), gunakan salah satu pendekatan berikut:

  • Opsi 1: Bungkus dalam IIFE (Direkomendasikan)

    Tempatkan fungsi-fungsi sensitif di dalam IIFE atau tubuh fungsi lainnya. Fungsi di dalam fungsi lain bukan berada di tingkat akar, sehingga fungsi-fungsi tersebut ditransformasi VM sepenuhnya termasuk namanya.

    // 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
  • Opsi 2: Rename globals + encoding (Gunakan dengan hati-hati)

    Aktifkan renameGlobals: true, vmBytecodeEncoding: true, dan vmBytecodeArrayEncoding: true. Ini mengganti nama pengenal tingkat akar dan mengenkripsinya di dalam bytecode.