VM Debug Protection
시청
Obfuscator.io Advanced Defenses: Self-Defending, Debug Protection, Domain Lock
vmDebugProtection 옵션은 VM 런타임에 디버깅 방지 조치를 추가하여, 보호된 코드를 리버스 엔지니어링하기 훨씬 어렵게 만듭니다. 각 탐지가 어떻게 대응할지는 vmDefenseReaction의 debugger, automation, sandbox 카테고리로 설정합니다.
browserEnvironment.hosting을 'remote'로 설정하면(v7.14.1+), Debug Protection은 빌드가 원격 호스트에서 제공된다는 조건에도 결속됩니다. 로컬 개발 호스트에서 제공되는 사본은 실행 환경 불일치로 간주되며, 자동화 방어 기능이 대응합니다.
이 방어 기능은 여러분 자신의 에이전트, 자동화 도구, 디버거에도 똑같이 작동합니다. 실행을 중단하거나, 관련 없는 오류를 던지거나, 잘못된 결과를 만들어 낼 수 있습니다. 기능 테스트에는 별도의 테스트용 빌드를 사용하세요. 그 빌드에서 재정의하는 옵션은 테스트와 CI 문서에 나와 있습니다.
인스펙터 탐지
난독화 도구 8.0.0부터 vmDebugProtection은 불리언뿐 아니라 객체도 받습니다. 객체를 전달하면 Debug Protection은 켜 둔 채로 탐지기 하나만 완화할 수 있습니다.
inspectorDetection(기본값 켜짐)은 연결된 Chrome DevTools Protocol 인스펙터나 활성화된 디버거를 탐지하고 대응합니다. 브라우저의 개발자 도구를 열면 이런 세션이 연결되므로, 열린 인스펙터가 탐지되고 대응이 일어납니다. 프로덕션에서는 켜 두고, 사용자가 정당한 이유로 개발자 도구를 여는 경우에만 끄세요. 대시보드에서는 VM Debug Protection 아래의 Inspector Detection 하위 스위치(v8.0.0+)가 이 설정이며, Debug Protection을 켜면 나타납니다.
한 번 탐지되면 페이지를 새로 고쳐야만 코드가 돌아옵니다. 개발자 도구를 닫아도 보호된 코드는 복구되지 않습니다. 페이지를 새로 고칠 때까지 이후의 모든 호출은 Uncaught 0처럼 아무것도 설명하지 않는 오류를 던지거나, decoy 대응에서는 잘못된 결과를 반환합니다. 새로 고치면 사용자가 저장하지 않은 내용은 모두 사라집니다. 먼저 저장하거나 메시지를 표시하려면 방어가 대응하기 전에 호출되는 vmDefenseHook에서 직접 처리를 실행하세요. 보호된 코드 입장에서는 개발자 도구와 같은 프로토콜로 연결되는 다른 도구가 똑같아 보이므로, 사용자에게 개발자 도구를 허용하면 그런 도구도 허용하게 됩니다.
자동화 프레임워크. inspectorDetection이 켜져 있으면(기본값), CDP 기반 도구(Puppeteer, Playwright, Selenium/ChromeDriver)로 보호된 페이지를 구동하는 것은 연결된 인스펙터로 탐지됩니다. vmDebugProtection: { inspectorDetection: false }는 인스펙터 탐지기만 끕니다. Debug Protection의 자동화 탐지기는 여전히 자동으로 구동되는 브라우저에 대응할 수 있습니다. 자동화 테스트용 빌드는 vmDebugProtection과 vmSelfDefending을 끄는 테스트와 CI의 방법을 따르세요.
콘텐츠 보안 정책
콘텐츠 보안 정책(CSP)이 동적 평가를 금지한다면(unsafe-eval 없음), browser-no-eval 대상을 사용하고 해당 정책 아래에서 출력물을 검증하세요. 이 대상은 원래 동적 평가에 의존하는 검사에 대체 방식을 사용합니다. 제한적인 CSP를 가진 브라우저 확장 프로그램에도 똑같이 적용됩니다. 최상의 호환성을 위해 browser-no-eval을 사용하세요.
