v1.2.2: 우회 기능 전면 제거 (비정상 접근 팝업 위험)
v1.2.0(JS UA 위장), v1.2.1(JS + 저엔트로피 HTTP 헤더 위장) 모두 치지직의 "허용되지 않는 비정상적 접근입니다" 팝업을 실측에서 트리거함이 확인됐다. 치지직은 고엔트로피 Client Hints, WebGL renderer, Canvas/Audio 등 다수의 핑거프린팅 신호를 추가로 보고 있으며, 클라이언트 확장만으로는 이를 일관되게 위장할 수 없다. 반복 접근 시 계정 제재 위험이 명시되어 있어 우회 시도 자체를 중단한다. 변경: - content.js 삭제 (navigator.userAgent / platform / userAgentData 위장 제거) - rules.json 삭제 (declarativeNetRequest 헤더 위장 규칙 제거) - manifest.json: content_scripts / declarative_net_request / permissions / host_permissions 전부 제거. 1.2.1 → 1.2.2, description 갱신 - popup.html / popup.js: 상태 안내만 표시. "Mac 위장 (1080p)" 등 우회 표현 제거 - README.md: 우회 기능 중단 사유 명시, 대안으로 그리드 정식 설치 / 720p 안내 검증: - 콘솔에 [chzzk-bypass:*] 런타임 로그 발생하지 않음 (content.js 부재) - nlog.js getHighEntropyValues 오류 본 확장에서 트리거 안 함 - manifest 누락 참조 없음 (rules.json / content.js 참조 전부 제거)
This commit is contained in:
74
README.md
74
README.md
@@ -1,75 +1,47 @@
|
||||
# Chzzk Bypass
|
||||
|
||||
치지직(CHZZK) 시청 환경을 개선하는 Chrome / Edge / Whale 용 확장 프로그램 (Manifest V3).
|
||||
치지직(CHZZK) 관련 Chrome 계열 확장. **1.2.2 부터 모든 우회 기능이 제거되었습니다.**
|
||||
|
||||
## 기능
|
||||
## 우회 기능 중단 안내
|
||||
|
||||
### 그리드 우회 (1080p 시청)
|
||||
이 확장은 더 이상 치지직 페이지에 개입하지 않습니다.
|
||||
|
||||
`navigator.userAgent`, `navigator.platform`, `navigator.userAgentData` 를 Mac 으로
|
||||
위장해, 치지직이 윈도우에서 1080p 시청 시 요구하는 그리드(Grid) 설치 없이 1080p
|
||||
화질을 시청할 수 있게 합니다.
|
||||
- `content_scripts` 제거
|
||||
- `declarativeNetRequest` 규칙 / 권한 제거
|
||||
- `navigator.userAgent` / `platform` / `userAgentData` 위장 코드 제거
|
||||
- HTTP 요청 헤더 (`User-Agent`, `sec-ch-ua*`) 수정 규칙 제거
|
||||
|
||||
위장은 두 레이어를 같은 값으로 맞춥니다.
|
||||
이전 버전(`1.1.x` ~ `1.2.1`) 의 기능과 제거 사유는 아래와 같습니다.
|
||||
|
||||
- **JS 레벨** (`content.js`): `navigator.userAgent`, `navigator.platform`,
|
||||
`navigator.userAgentData` (메서드 `getHighEntropyValues` / `toJSON` 포함).
|
||||
- **네트워크 레벨** (`rules.json` + declarativeNetRequest): 실제 HTTP 요청
|
||||
헤더 `User-Agent`, `sec-ch-ua`, `sec-ch-ua-platform`, `sec-ch-ua-mobile` 을
|
||||
Mac 값으로 덮어씁니다.
|
||||
### 타임머신 강제 활성화 (`1.1.x`)
|
||||
|
||||
두 레이어 중 하나만 바꾸면 JS 와 서버가 보는 값이 어긋나, 치지직 핑거프린팅이
|
||||
**"허용되지 않는 비정상적 접근입니다."** 팝업을 띄울 수 있습니다.
|
||||
1.2.1 부터 이 두 레이어를 함께 일관되게 위장합니다.
|
||||
스트리머가 타임머신을 꺼둔 라이브에서도 되감기 바 UI 를 띄우는 기능. `1.2.0` 부터 제거.
|
||||
|
||||
`userAgentData` 는 단순히 `brands` / `mobile` / `platform` 만 갈아끼우면
|
||||
치지직이 로드하는 `nlog.js` (네이버 핑거프린팅 / 로깅) 가
|
||||
`e.getHighEntropyValues is not a function` 으로 Uncaught TypeError 를 던집니다.
|
||||
이 자체가 비정상 접근 시그널이 될 수 있어서, `getHighEntropyValues` 메서드도
|
||||
일관된 Mac 값으로 채워 둡니다. (manifest 의 `world: MAIN` + `run_at: document_start`
|
||||
덕분에 페이지 스크립트보다 먼저 적용됩니다.)
|
||||
- 치지직의 DVR window 는 스트리머가 타임머신을 켰을 때만 CDN 이 프로비저닝합니다. 클라이언트에서 `timeMachineActive` 플래그만 `true` 로 바꿔도 HLS 매니페스트(`timemachine=false`) 와 어긋나서 실제 되감기는 동작하지 않습니다.
|
||||
- 이 클라이언트-사이드 상태 불일치가 치지직의 비정상 접근 감지를 트리거해 **"허용되지 않는 비정상적 접근입니다. 반복적인 접근 시 운영 정책에 따라 조치될 수 있습니다."** 팝업을 띄우는 것이 실측으로 확인되었습니다.
|
||||
|
||||
구현: `content.js`, `rules.json`
|
||||
### 그리드 우회 / 1080p Mac 위장 (`1.2.0` ~ `1.2.1`)
|
||||
|
||||
## 타임머신 강제 활성화는 지원하지 않습니다
|
||||
`navigator.*` 와 HTTP 요청 헤더를 Mac 으로 위장해 그리드 설치 없이 1080p 시청을 시도. `1.2.2` 부터 제거.
|
||||
|
||||
이전 버전(`1.1.x`)에는 스트리머가 타임머신을 꺼둔 라이브에서도 되감기 바 UI 를
|
||||
띄우는 기능이 있었습니다. **`1.2.0` 부터는 제거되었습니다.**
|
||||
- JS 레벨만 위장한 `1.2.0`, JS + 저엔트로피 HTTP 헤더까지 위장한 `1.2.1` 모두 동일한 비정상 접근 팝업을 트리거하는 것이 실측으로 확인되었습니다.
|
||||
- 치지직은 고엔트로피 Client Hints (`sec-ch-ua-platform-version`, `sec-ch-ua-arch`, `sec-ch-ua-bitness`, `sec-ch-ua-full-version-list`), WebGL `UNMASKED_RENDERER_WEBGL`, Canvas / AudioContext, 폰트 목록 등 다수의 핑거프린팅 신호를 추가로 보고 있습니다. 클라이언트 확장만으로는 이 신호를 모두 일관되게 위장할 수 없으며, lockstep 으로 따라가는 것도 의미가 없습니다.
|
||||
- 반복 접근 시 계정 제재 위험이 명시되어 있어, 우회 시도 자체를 중단했습니다.
|
||||
|
||||
이유:
|
||||
대안: 그리드(Grid) 정식 설치, 또는 720p 시청.
|
||||
|
||||
- 치지직의 DVR window 는 스트리머가 타임머신을 켰을 때만 CDN 이
|
||||
프로비저닝합니다. 클라이언트에서 `timeMachineActive` 플래그만 `true` 로
|
||||
바꿔도 HLS 매니페스트(`timemachine=false`) 와 상태가 어긋나서 실제 되감기는
|
||||
동작하지 않습니다 (cosmetic 한 UI 만 뜸).
|
||||
- 더 심각한 문제는, 이 클라이언트-사이드 상태 불일치가 치지직의 비정상 접근
|
||||
감지 로직을 트리거해 **"허용되지 않는 비정상적 접근입니다. 반복적인 접근 시
|
||||
운영 정책에 따라 조치될 수 있습니다."** 팝업이 뜨는 것이 실측으로 확인되었습니다.
|
||||
계정 제재 위험이 있어 기능을 제거했습니다.
|
||||
## 설치 / 제거
|
||||
|
||||
스트리머가 끈 타임머신은 클라이언트 확장만으로는 안전하게 우회할 수 없습니다.
|
||||
되감기가 필요하면 스트리머에게 타임머신을 켜달라고 요청하거나 다시보기
|
||||
업로드를 기다려 주세요.
|
||||
|
||||
## 설치
|
||||
|
||||
1. 이 저장소를 `git clone` 또는 ZIP 다운로드해 임의의 폴더에 둡니다.
|
||||
2. Chrome 계열 브라우저에서 `chrome://extensions` 접속.
|
||||
3. 우상단 **개발자 모드** 활성화.
|
||||
4. **압축해제된 확장 프로그램을 로드합니다** 클릭 → 위 폴더 선택.
|
||||
5. 치지직(`https://chzzk.naver.com`) 새로고침.
|
||||
설치 의미가 없습니다. 이미 설치되어 있다면 `chrome://extensions` 에서 제거하시는 걸 권장합니다.
|
||||
|
||||
## 파일 구조
|
||||
|
||||
```
|
||||
manifest.json 확장 정의 (MV3)
|
||||
content.js 그리드 우회 JS 레벨 (UA / platform / UA-CH 위장 + getHighEntropyValues)
|
||||
rules.json 그리드 우회 네트워크 레벨 (UA / sec-ch-ua* 헤더 modifyHeaders)
|
||||
popup.html/css/js 툴바 팝업
|
||||
manifest.json 확장 정의 (MV3, 권한 없음, content_scripts 없음)
|
||||
popup.html/css/js 툴바 팝업 (상태 안내만 표시)
|
||||
icons/ 확장 아이콘
|
||||
```
|
||||
|
||||
## 면책
|
||||
|
||||
본 확장은 학습 및 개인 사용 목적의 우회 도구입니다. 사용에 따른 모든 책임은
|
||||
사용자에게 있으며, 치지직 약관 및 관련 법령을 준수하여 사용하시기 바랍니다.
|
||||
본 확장은 학습 및 개인 사용 목적의 우회 도구였습니다. `1.2.2` 부터 우회 기능을 제공하지 않습니다. 사용에 따른 모든 책임은 사용자에게 있으며, 치지직 약관 및 관련 법령을 준수하여 사용하시기 바랍니다.
|
||||
|
||||
89
content.js
89
content.js
@@ -1,89 +0,0 @@
|
||||
// 치지직이 윈도우에서 1080p 시청 시 그리드 설치를 요구하는 것을 우회하기 위해
|
||||
// navigator 의 OS/브라우저 식별 값들을 Mac 으로 위장한다.
|
||||
//
|
||||
// 이 파일은 JS 레벨 (navigator.*) 만 다룬다. 실제 HTTP 요청 헤더
|
||||
// (User-Agent / sec-ch-ua / sec-ch-ua-platform / sec-ch-ua-mobile) 는
|
||||
// rules.json 의 declarativeNetRequest modifyHeaders 규칙이 똑같이 Mac 으로
|
||||
// 덮어쓴다. JS 와 네트워크 레벨 값이 어긋나면 치지직 핑거프린팅이
|
||||
// "비정상 접근" 으로 보고 팝업을 띄우므로 두 레이어가 반드시 같은 값을
|
||||
// 가져야 한다.
|
||||
//
|
||||
// userAgentData 의 getHighEntropyValues 까지 구현해 두지 않으면
|
||||
// 치지직이 로드하는 nlog.js (네이버 핑거프린팅 / 로깅) 가
|
||||
// `e.getHighEntropyValues is not a function` 으로 Uncaught TypeError 를 던지고,
|
||||
// 그 자체가 비정상 접근 시그널이 될 수 있다. 그래서 객체 형태와 메서드까지
|
||||
// 일관된 Mac 값으로 채워 둔다. (manifest 의 world: MAIN + run_at: document_start
|
||||
// 덕분에 페이지 스크립트보다 먼저 적용된다.)
|
||||
|
||||
Object.defineProperty(navigator, 'userAgent', {
|
||||
get: function () {
|
||||
return 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36';
|
||||
}
|
||||
});
|
||||
|
||||
Object.defineProperty(navigator, 'platform', {
|
||||
get: function () {
|
||||
return 'MacIntel';
|
||||
}
|
||||
});
|
||||
|
||||
const __chzzkBypassBrands = [
|
||||
{ brand: 'Chromium', version: '122' },
|
||||
{ brand: 'Google Chrome', version: '122' },
|
||||
{ brand: 'Not-A.Brand', version: '24' }
|
||||
];
|
||||
|
||||
const __chzzkBypassFullVersionList = [
|
||||
{ brand: 'Chromium', version: '122.0.0.0' },
|
||||
{ brand: 'Google Chrome', version: '122.0.0.0' },
|
||||
{ brand: 'Not-A.Brand', version: '24.0.0.0' }
|
||||
];
|
||||
|
||||
const __chzzkBypassHighEntropy = {
|
||||
brands: __chzzkBypassBrands,
|
||||
mobile: false,
|
||||
platform: 'macOS',
|
||||
platformVersion: '10.15.7',
|
||||
architecture: 'x86',
|
||||
bitness: '64',
|
||||
model: '',
|
||||
uaFullVersion: '122.0.0.0',
|
||||
fullVersionList: __chzzkBypassFullVersionList,
|
||||
wow64: false,
|
||||
formFactors: []
|
||||
};
|
||||
|
||||
const __chzzkBypassUAData = {
|
||||
brands: __chzzkBypassBrands,
|
||||
mobile: false,
|
||||
platform: 'macOS',
|
||||
getHighEntropyValues: function (hints) {
|
||||
// 항상 brands / mobile / platform 은 포함하고, 요청된 hints 만 추가로 채운다.
|
||||
const out = {
|
||||
brands: __chzzkBypassBrands,
|
||||
mobile: false,
|
||||
platform: 'macOS'
|
||||
};
|
||||
if (Array.isArray(hints)) {
|
||||
for (const h of hints) {
|
||||
if (Object.prototype.hasOwnProperty.call(__chzzkBypassHighEntropy, h)) {
|
||||
out[h] = __chzzkBypassHighEntropy[h];
|
||||
}
|
||||
}
|
||||
}
|
||||
return Promise.resolve(out);
|
||||
},
|
||||
toJSON: function () {
|
||||
return {
|
||||
brands: __chzzkBypassBrands,
|
||||
mobile: false,
|
||||
platform: 'macOS'
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
Object.defineProperty(navigator, 'userAgentData', {
|
||||
get: function () {
|
||||
return __chzzkBypassUAData;
|
||||
}
|
||||
});
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "Chzzk Bypass",
|
||||
"version": "1.2.1",
|
||||
"version": "1.2.2",
|
||||
"manifest_version": 3,
|
||||
"description": "치지직(CHZZK) 시청 환경 개선: Mac 위장으로 그리드 없이 1080p 시청.",
|
||||
"description": "치지직(CHZZK) 우회 기능은 비정상 접근 팝업 위험으로 인해 중단되었습니다. 확장은 더 이상 페이지에 개입하지 않습니다.",
|
||||
"icons": {
|
||||
"16": "icons/icon16.png",
|
||||
"48": "icons/icon48.png",
|
||||
@@ -10,36 +10,6 @@
|
||||
},
|
||||
"action": {
|
||||
"default_popup": "popup.html",
|
||||
"default_title": "Chzzk Bypass Status"
|
||||
},
|
||||
"permissions": [
|
||||
"declarativeNetRequest",
|
||||
"declarativeNetRequestWithHostAccess"
|
||||
],
|
||||
"host_permissions": [
|
||||
"*://*.naver.com/*",
|
||||
"*://*.ncloud.com/*",
|
||||
"*://*.pstatic.net/*"
|
||||
],
|
||||
"declarative_net_request": {
|
||||
"rule_resources": [
|
||||
{
|
||||
"id": "rules",
|
||||
"enabled": true,
|
||||
"path": "rules.json"
|
||||
}
|
||||
]
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": [
|
||||
"*://chzzk.naver.com/*"
|
||||
],
|
||||
"js": [
|
||||
"content.js"
|
||||
],
|
||||
"run_at": "document_start",
|
||||
"world": "MAIN"
|
||||
}
|
||||
]
|
||||
"default_title": "Chzzk Bypass (비활성)"
|
||||
}
|
||||
}
|
||||
|
||||
12
popup.html
12
popup.html
@@ -8,18 +8,18 @@
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1>Chzzk Bypass</h1>
|
||||
<span class="badge active">작동 중</span>
|
||||
<span class="badge">비활성</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p>치지직 시청 환경을 개선합니다.</p>
|
||||
<p>우회 기능은 중단되었습니다.</p>
|
||||
<div class="status-box">
|
||||
<div class="status-item">
|
||||
<span class="label">대상 사이트</span>
|
||||
<span class="value">chzzk.naver.com</span>
|
||||
<span class="label">상태</span>
|
||||
<span class="value">페이지에 개입하지 않음</span>
|
||||
</div>
|
||||
<div class="status-item">
|
||||
<span class="label">그리드 우회</span>
|
||||
<span class="value success">Mac 위장 (1080p)</span>
|
||||
<span class="label">사유</span>
|
||||
<span class="value">치지직 비정상 접근 팝업 위험</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
7
popup.js
7
popup.js
@@ -1,5 +1,2 @@
|
||||
// 팝업이 로드될 때 실행됩니다.
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
console.log("Chzzk Bypass 팝업 UI 로드 완료");
|
||||
// 향후 우회 On/Off 토글 버튼 등을 구현할 공간입니다.
|
||||
});
|
||||
// 팝업 UI 로드만 처리합니다. 페이지 개입 기능은 1.2.2 에서 제거되었습니다.
|
||||
document.addEventListener('DOMContentLoaded', function () {});
|
||||
|
||||
46
rules.json
46
rules.json
@@ -1,46 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"priority": 1,
|
||||
"action": {
|
||||
"type": "modifyHeaders",
|
||||
"requestHeaders": [
|
||||
{
|
||||
"header": "User-Agent",
|
||||
"operation": "set",
|
||||
"value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
|
||||
},
|
||||
{
|
||||
"header": "sec-ch-ua",
|
||||
"operation": "set",
|
||||
"value": "\"Chromium\";v=\"122\", \"Google Chrome\";v=\"122\", \"Not-A.Brand\";v=\"24\""
|
||||
},
|
||||
{
|
||||
"header": "sec-ch-ua-mobile",
|
||||
"operation": "set",
|
||||
"value": "?0"
|
||||
},
|
||||
{
|
||||
"header": "sec-ch-ua-platform",
|
||||
"operation": "set",
|
||||
"value": "\"macOS\""
|
||||
}
|
||||
]
|
||||
},
|
||||
"condition": {
|
||||
"resourceTypes": [
|
||||
"main_frame",
|
||||
"sub_frame",
|
||||
"xmlhttprequest",
|
||||
"script",
|
||||
"stylesheet",
|
||||
"image",
|
||||
"media",
|
||||
"font",
|
||||
"websocket",
|
||||
"ping",
|
||||
"other"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user