문서
/

문제 해결

/

VM 런타임 오류 진단하기

VM 런타임 오류 진단하기

다음 단계를 순서대로 진행하세요. 각 단계는 실패하는 코드를 좁히는 데 시간을 쓰기 전에 흔한 원인 하나를 배제합니다.

1. 고급 방어 기능 배제하기

코드와 맞지 않는 오류, 특히 RangeError: Invalid array length는 대개 프로덕션 빌드가 실행되어서는 안 되는 곳에서 실행되고 있다는 뜻입니다. VM Self Defending과 VM Debug Protection은 테스트 러너와 기타 자동화 도구, 헤드리스 브라우저, 브라우저용 빌드를 실행하는 Node.js나 jsdom, DevTools가 열린 브라우저에서 의도적으로 코드를 망가뜨립니다. 무엇보다 먼저 실패하는 코드가 어디에서 실행되는지 확인하세요.

먼저 고급 방어 기능(VM Self Defending, VM Debug Protection, VM Domain Lock)을 원인에서 배제하세요. 테스트와 CI의 재정의를 적용한 테스트 빌드로 실패를 재현해 보세요. 테스트 빌드가 동작한다면 방어 기능이 코드를 망가뜨린 것이 아니라 여러분의 도구나 환경에 대응하고 있는 것입니다.

2. 실행 환경 호환성 확인 및 실패하는 함수 좁히기

target, 빌드 파이프라인, 그리고 모든 환경 선언이 코드가 실제로 실행되는 곳과 일치하는지 확인하세요.

빌드가 VMNoFunctionsToVirtualize 같은 적용 범위 경고를 보고하면, VM 보호가 무엇을 다루는지 VM 난독화에서 확인하세요.

실패하는 사례를 아직 재현되는 가장 작은 함수와 호출 지점으로 줄이세요. comment 모드를 사용해 가상화되는 함수의 범위를 좁히세요.

vmBytecodeArrayEncoding과 vmBytecodeArrayEncodingKeyGetter를 함께 사용한다면, 게터는 빌드 시점에 사용한 키와 정확히 같은 키를 반환해야 합니다. 동기 게터를 사용한다면 난독화된 코드가 실행되기 전에 키가 설정되어 있어야 합니다. Promise를 반환하는 게터에는 vmAsyncExecutor가 필요합니다. 둘 중 하나라도 빠지면 바이트코드를 디코딩할 수 없습니다.

실행 환경 호환성 · Bytecode Array Encoding 키

3. 버그 리포트 보내기

support@obfuscator.io로 이메일을 보내 주세요. 다음 항목을 많이 포함할수록 더 빨리 수정할 수 있습니다.

  • 전체 오류 스택 트레이스를 콘솔에 표시된 그대로 보내 주세요. 요약한 내용이 아니어야 합니다.
  • JSON 형식의 난독화 옵션. 사용한 옵션 객체 전체(또는 프리셋 이름과 재정의한 옵션)를 복사해 주세요. 옵션 간의 미묘한 상호작용이 흔하므로 정확한 옵션 조합이 필요합니다.
  • 경고가 있다면 빌드 경고: 각 경고의 type, message, functionName을 알려 주세요.
  • 난독화 도구 버전은 대시보드에서 편집기 아래의 버전 선택기에 표시됩니다. API를 직접 호출하는 경우에는 result 또는 chunk_end 메시지의 version 필드입니다. javascript-obfuscator 패키지에서는 진행 메시지 (Obfuscating with VM protection (vX.Y.Z)...)에 표시되며, CLI는 이 메시지를 출력하고 obfuscatePro는 이를 onProgress 콜백에 전달합니다.
  • 환경: 브라우저와 버전, Node.js 버전, OS, 그리고 실행 환경의 특이 사항(확장 프로그램, 폴리필, 커스텀 내장 객체)을 알려 주세요.
  • 최소 재현 사례: 이상적으로는 섹션 2에서 줄인 단일 함수와 오류를 일으키는 데 필요한 호출 지점입니다.
  • 가능하다면 난독화 전 원본 소스도 보내 주세요. 난독화된 출력은 저희에게도 불투명하며, 입력이 없으면 저희 자신의 바이트코드를 리버스 엔지니어링해야 합니다.

소스가 독점 코드라면 이메일에 그렇게 적어 주세요. 공유하기 전에 NDA를 체결할 수 있습니다. 잘못된 바이트코드를 만든 입력 패턴을 보지 않고는 VM 버그를 확실하게 진단할 수 없으므로, 이 과정을 거칠 가치가 있습니다.