문서
/

문제 해결

/

VM 런타임 오류 진단하기

VM 런타임 오류 진단하기

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

1. 테스트와 CI

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

2. 실행 환경 호환성

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

VM 보호는 대상이 될 수 있는 함수에 적용됩니다. root 모드에서는 vmWrapTopLevelInitializers가 대상이 될 수 있는 초기화 코드도 가상화하도록 감쌀 수 있으며, 현재 VM 프리셋은 이 옵션을 켭니다. VMNoFunctionsToVirtualize 같은 적용 범위 경고를 검토하고, comment 모드로 민감한 함수를 명시적으로 선택하세요.

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

vmBytecodeArrayEncoding과 vmBytecodeArrayEncodingKeyGetter를 함께 사용한다면, 게터는 빌드 시점에 사용한 키와 정확히 같은 키를 반환해야 하며, 그 키는 난독화된 코드가 실행될 때 이미 설정되어 있어야 합니다. 그렇지 않으면 바이트코드를 디코딩할 수 없습니다.

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

3. 버그 보고 보내기

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

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

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