웹사이트 캡쳐 방어

    

인프런 강의 캡쳐 방어


캡쳐 안되길래 신기했음.

웹인데도 

DRM 으로 강의 캡쳐를 막아서 캡쳐 도구를 감지하는게 신기


---



인프런 강의에서 캡쳐 방어가 되어 있는 걸 보면, 보안 수준을 꽤 신경 쓴 것 같네요. 웹 환경에서도 캡쳐를 막는 방법에는 여러 가지가 있는데, 보통 DRM(Digital Rights Management)이나 JavaScript 기반 방어 기법을 조합해서 사용하는 경우가 많아요.


### 📌 **웹에서 캡쳐 방어하는 방법들**


1.  **DRM 적용 (Widevine, PlayReady, FairPlay 등)**


    -   동영상 자체를 암호화하고, 특정 인증을 받은 환경에서만 재생되도록 설정.

    -   이 방식이면 캡쳐 소프트웨어에서도 녹화가 안 될 가능성이 큼.

    -   보통 비디오 스트리밍 서비스에서 사용.

2.  **CSS 및 JavaScript 방어**


    -   `pointer-events: none;`을 이용해 우클릭 및 개발자 도구 방지.

    -   `visibility:hidden` 같은 스타일을 사용하여 특정 조건에서 콘텐츠 숨기기.

    -   `oncontextmenu="return false;"`로 우클릭 방지.

3.  **Canvas Fingerprinting 및 Tamper Detection**


    -   `Canvas API`를 이용해 브라우저의 스크린샷 감지.

    -   DevTools에서 특정 키 입력을 감지하고 강제 종료하거나, `debugger` 키워드로 디버깅 방해.

4.  **Blur 처리 및 Overlay 적용**


    -   `backdrop-filter: blur(10px);` 등을 활용해 비인가 환경에서 흐리게 표시.

    -   화면에 투명한 레이어(Overlay)를 씌워 캡쳐 시 원하는 데이터가 보이지 않도록 함.

5.  **가상 환경 감지 및 종료**


    -   브라우저 내에서 `navigator.plugins`, `navigator.webdriver` 같은 속성을 활용해 가상 환경 탐지.

    -   특정 가상머신(예: Sandboxie, VM)에서 실행되면 콘텐츠 숨김.

6.  **Watermark 삽입**


    -   사용자 ID, IP, 시간 등의 정보를 워터마크로 삽입해서 유출 방지.

    -   영상이 캡쳐되더라도 추적 가능하도록 설계.


### 🧐 **웹인데도 캡쳐 방어가 가능한 이유?**


웹 기반이라도 캡쳐 방어가 되는 건 **DRM이 적용된 플레이어를 사용했을 가능성이 높음**.\

보통 **Widevine (Chrome) / PlayReady (Edge) / FairPlay (Safari)** 같은 DRM 솔루션을 쓰면, OS 레벨에서 캡쳐 및 녹화 기능을 차단할 수 있어요.


아마 **일반적인 F12 개발자 도구나 Chrome 확장 프로그램**으로는 우회하기 힘들도록 설계했을 듯.\

단순한 자바스크립트 방어가 아니라, 영상 자체가 DRM 보호를 받고 있을 가능성이 크네요.


혹시 어떤 방식으로 막혀 있는지 더 확인하고 싶으면, 개발자 도구를 열어서 **영상 스트림 URL**이 어떻게 구성되어 있는지 확인해 보면 힌트를 얻을 수도 있을 듯. 😆


---


웹에서 외부 캡쳐 프로그램을 감지하는 방법은 일반적인 JavaScript 만으로는 어렵지만, 몇 가지 기법을 조합하면 가능할 수도 있어요. 특히 인프런처럼 DRM 보호가 걸려 있는 경우, 브라우저와 OS 레벨에서 캡쳐를 차단하는 방식이 유력할 것 같아요.


* * * * *


🛡 **웹에서 외부 캡쳐 프로그램을 감지하는 방법들**

-------------------------------


### 1️⃣ **DRM 기반 시스템 사용**


✅ **가능성:** ★★★★★\

✅ **원리:** OS 레벨에서 캡쳐 방지\

✅ **우회 가능성:** 낮음


인프런 같은 사이트는 **Widevine (Chrome), PlayReady (Edge), FairPlay (Safari)** 같은 DRM 시스템을 사용했을 가능성이 커요.\

이 DRM 시스템이 활성화되면, Windows나 macOS의 **화면 캡쳐 API를 차단**할 수 있어요.


-   예를 들어, Windows의 `D3D11 Video Overlay`를 사용하면 캡쳐 프로그램이 **검은 화면만 보이게 처리**할 수 있음.

-   MacOS에서는 **FairPlay DRM**을 이용해 스크린샷 및 녹화 방지 가능.


🔍 **테스트 방법:**\

Windows에서 `PrintScreen` 키를 눌러서 화면을 캡쳐했을 때, 검은 화면만 보이면 이 방식일 가능성이 큼.


* * * * *


### 2️⃣ **HW-Accelerated Video Rendering 사용 (GPU 오버레이)**


✅ **가능성:** ★★★★☆\

✅ **원리:** 영상이 **GPU에서 직접 출력**되도록 설정해서 캡쳐 방지\

✅ **우회 가능성:** 중간 (소프트웨어 렌더링으로 변경 시 캡쳐 가능)


일반적인 HTML5 `<video>` 태그가 아니라, **Hardware Accelerated Video Rendering**을 사용하면 캡쳐 프로그램이 영상 데이터를 직접 가져오기 어려워져요.


-   Chrome에서는 `chrome://flags/#disable-accelerated-video-decode` 를 비활성화하면 캡쳐가 안 되는 경우가 많음.

-   일부 사이트는 WebGL이나 WebRTC를 이용해 비디오를 직접 렌더링하여 캡쳐 차단.


🔍 **테스트 방법:**\

Chrome 개발자 도구에서 `chrome://flags/` 설정을 확인하고 **Hardware Accelerated Video Decode**를 꺼보면 캡쳐가 가능한지 테스트 가능.


* * * * *


### 3️⃣ **Browser-Specific 캡쳐 차단 (Media Session API, CSS 스타일)**


✅ **가능성:** ★★★☆☆\

✅ **원리:** 특정 CSS나 JS API를 활용해 캡쳐 차단\

✅ **우회 가능성:** 높음 (수정 가능)


브라우저가 제공하는 기능 중 일부는 캡쳐를 감지하거나 방지할 수 있음.


-   `document.execCommand('copy')` 같은 함수를 훅킹해서 캡쳐 프로그램의 동작을 감지할 수도 있음.

-   CSS `backdrop-filter: blur(10px);` 같은 효과를 특정 환경에서 활성화하면 캡쳐 화면이 흐리게 보일 수도 있음.


🔍 **테스트 방법:**\

개발자 도구(F12)에서 `console.log(document.execCommand('copy'))` 등을 실행해보고 특정 이벤트가 막혀 있는지 확인.


* * * * *


### 4️⃣ **Active Window Monitoring (캡쳐 프로그램 감지)**


✅ **가능성:** ★★★☆☆\

✅ **원리:** 현재 활성화된 프로그램을 감지하여 캡쳐 프로그램이 실행되었는지 확인\

✅ **우회 가능성:** 있음 (우회 프로그램 사용 가능)


웹 페이지가 직접적으로 Windows나 macOS의 실행 중인 프로세스를 확인할 수는 없지만, **WebRTC, WebGL, Canvas API** 등을 활용해 탐지할 수 있음.


💡 **예제:**\

일부 캡쳐 프로그램(OBS, Bandicam, Snagit)은 **WebGL이나 Canvas API를 훅킹하여 영상 데이터를 가로챔**.\

따라서 웹 사이트에서 **WebGL Context를 주기적으로 검사**해서 변조된 흔적이 있으면 차단 가능.


🔍 **테스트 방법:**\

Chrome 개발자 도구에서 아래 코드 실행해서 `WebGL Context`가 정상적인지 확인:


```

const canvas = document.createElement("canvas");

const gl = canvas.getContext("webgl");

console.log(gl.getParameter(gl.VENDOR));

console.log(gl.getParameter(gl.RENDERER));


```


만약 이상한 값이 나오거나 `null`이라면 웹에서 `WebGL`을 차단한 것일 수도 있음.


* * * * *


### 5️⃣ **Virtual Machine / Remote Desktop 감지**


✅ **가능성:** ★★☆☆☆\

✅ **원리:** 가상 환경 또는 원격 데스크톱 환경 감지 후 차단\

✅ **우회 가능성:** 있음 (VPN이나 가상 환경 우회 가능)


일부 사이트는 **가상 머신(VM) 또는 원격 데스크톱(RDP)에서 실행되는지 감지**한 후, 컨텐츠 접근을 막기도 해요.


-   브라우저의 `navigator.webdriver` 속성을 확인해서 Selenium 같은 자동화 도구를 감지.

-   Windows 환경에서는 `window.outerWidth`와 `window.innerWidth`의 차이를 검사해 원격 데스크톱 환경 감지.


🔍 **테스트 방법:**\

개발자 도구에서 아래 코드 실행:


```

console.log(navigator.webdriver);

console.log(window.outerWidth - window.innerWidth);


```


만약 `navigator.webdriver === true`이면, 자동화 도구 감지가 활성화된 상태.


* * * * *


🔥 **결론: 웹인데도 캡쳐 프로그램을 감지할 수 있는 이유**

------------------------------------


👉 **가장 유력한 방식은 DRM과 Hardware Accelerated Video Rendering 조합!**


1.  **DRM**(Widevine, PlayReady, FairPlay) → OS 레벨에서 캡쳐 차단

2.  **GPU Video Overlay** → 영상이 GPU에서 직접 렌더링되어 캡쳐 프로그램이 화면을 인식하지 못함

3.  **WebGL / Canvas 감지** → 캡쳐 프로그램이 WebGL을 훅킹하면 탐지 가능

4.  **실행 중인 환경 감지**(Remote Desktop, VM, 자동화 도구) → 특정 환경에서 실행되면 차단


🔍 **우회 방법?**


-   GPU 가속을 비활성화하거나, WebGL을 변경하는 플러그인 사용

-   OBS 같은 캡쳐 프로그램에서 "Windows 10 캡쳐 방식"이 아닌 "디스플레이 캡쳐" 사용

-   개발자 도구에서 특정 속성 (`navigator.webdriver`)을 변조


하지만 이런 DRM 방어는 일반적인 웹 보안보다 훨씬 강력해서, 단순한 우회로는 어렵고 OS 레벨에서 막혀 있을 가능성이 큼. 😎






댓글

이 블로그의 인기 게시물

js 스트링에서 요소 갯수 세기

STUDY

javascript cheatsheet