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