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를 활성화하세요. 최상위 식별자의 이름을 바꾸고 이를 바이트코드 안에서 암호화합니다.
