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 outputOpsi 2: Rename globals + encoding (Gunakan dengan hati-hati)
Aktifkan
renameGlobals: true,vmBytecodeEncoding: true, danvmBytecodeArrayEncoding: true. Ini mengganti nama pengenal tingkat akar dan mengenkripsinya di dalam bytecode.
