v1.2.1: HTTP 헤더(User-Agent / sec-ch-ua*)도 Mac 으로 위장
v1.2.0 까지는 navigator.* JS 값만 Mac 으로 덮어쓰고 실제 HTTP 요청 헤더는 원본(Windows)으로 나가서, 치지직 핑거프린팅이 클라이언트 사이드 불일치를 잡아내 "허용되지 않는 비정상적 접근" 팝업을 띄우는 것으로 추정됨. declarativeNetRequest modifyHeaders 규칙으로 다음 요청 헤더를 Mac 값으로 덮어써 JS 레벨 (navigator.*) 과 네트워크 레벨이 일치하도록 한다: - User-Agent - sec-ch-ua - sec-ch-ua-platform - sec-ch-ua-mobile 부수 변경: - host_permissions 에 *.pstatic.net 추가 (치지직 비디오/이미지 CDN) - README / content.js 주석에 두-레이어 위장 구조 명시
This commit is contained in:
18
README.md
18
README.md
@@ -10,6 +10,18 @@
|
|||||||
위장해, 치지직이 윈도우에서 1080p 시청 시 요구하는 그리드(Grid) 설치 없이 1080p
|
위장해, 치지직이 윈도우에서 1080p 시청 시 요구하는 그리드(Grid) 설치 없이 1080p
|
||||||
화질을 시청할 수 있게 합니다.
|
화질을 시청할 수 있게 합니다.
|
||||||
|
|
||||||
|
위장은 두 레이어를 같은 값으로 맞춥니다.
|
||||||
|
|
||||||
|
- **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 값으로 덮어씁니다.
|
||||||
|
|
||||||
|
두 레이어 중 하나만 바꾸면 JS 와 서버가 보는 값이 어긋나, 치지직 핑거프린팅이
|
||||||
|
**"허용되지 않는 비정상적 접근입니다."** 팝업을 띄울 수 있습니다.
|
||||||
|
1.2.1 부터 이 두 레이어를 함께 일관되게 위장합니다.
|
||||||
|
|
||||||
`userAgentData` 는 단순히 `brands` / `mobile` / `platform` 만 갈아끼우면
|
`userAgentData` 는 단순히 `brands` / `mobile` / `platform` 만 갈아끼우면
|
||||||
치지직이 로드하는 `nlog.js` (네이버 핑거프린팅 / 로깅) 가
|
치지직이 로드하는 `nlog.js` (네이버 핑거프린팅 / 로깅) 가
|
||||||
`e.getHighEntropyValues is not a function` 으로 Uncaught TypeError 를 던집니다.
|
`e.getHighEntropyValues is not a function` 으로 Uncaught TypeError 를 던집니다.
|
||||||
@@ -17,7 +29,7 @@
|
|||||||
일관된 Mac 값으로 채워 둡니다. (manifest 의 `world: MAIN` + `run_at: document_start`
|
일관된 Mac 값으로 채워 둡니다. (manifest 의 `world: MAIN` + `run_at: document_start`
|
||||||
덕분에 페이지 스크립트보다 먼저 적용됩니다.)
|
덕분에 페이지 스크립트보다 먼저 적용됩니다.)
|
||||||
|
|
||||||
구현: `content.js`
|
구현: `content.js`, `rules.json`
|
||||||
|
|
||||||
## 타임머신 강제 활성화는 지원하지 않습니다
|
## 타임머신 강제 활성화는 지원하지 않습니다
|
||||||
|
|
||||||
@@ -51,8 +63,8 @@
|
|||||||
|
|
||||||
```
|
```
|
||||||
manifest.json 확장 정의 (MV3)
|
manifest.json 확장 정의 (MV3)
|
||||||
content.js 그리드 우회 (UA / platform / UA-CH 위장 + getHighEntropyValues)
|
content.js 그리드 우회 JS 레벨 (UA / platform / UA-CH 위장 + getHighEntropyValues)
|
||||||
rules.json declarativeNetRequest 규칙 (현재 비어 있음)
|
rules.json 그리드 우회 네트워크 레벨 (UA / sec-ch-ua* 헤더 modifyHeaders)
|
||||||
popup.html/css/js 툴바 팝업
|
popup.html/css/js 툴바 팝업
|
||||||
icons/ 확장 아이콘
|
icons/ 확장 아이콘
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
// 치지직이 윈도우에서 1080p 시청 시 그리드 설치를 요구하는 것을 우회하기 위해
|
// 치지직이 윈도우에서 1080p 시청 시 그리드 설치를 요구하는 것을 우회하기 위해
|
||||||
// navigator 의 OS/브라우저 식별 값들을 Mac 으로 위장한다.
|
// 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 까지 구현해 두지 않으면
|
// userAgentData 의 getHighEntropyValues 까지 구현해 두지 않으면
|
||||||
// 치지직이 로드하는 nlog.js (네이버 핑거프린팅 / 로깅) 가
|
// 치지직이 로드하는 nlog.js (네이버 핑거프린팅 / 로깅) 가
|
||||||
// `e.getHighEntropyValues is not a function` 으로 Uncaught TypeError 를 던지고,
|
// `e.getHighEntropyValues is not a function` 으로 Uncaught TypeError 를 던지고,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "Chzzk Bypass",
|
"name": "Chzzk Bypass",
|
||||||
"version": "1.2.0",
|
"version": "1.2.1",
|
||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"description": "치지직(CHZZK) 시청 환경 개선: Mac 위장으로 그리드 없이 1080p 시청.",
|
"description": "치지직(CHZZK) 시청 환경 개선: Mac 위장으로 그리드 없이 1080p 시청.",
|
||||||
"icons": {
|
"icons": {
|
||||||
@@ -18,7 +18,8 @@
|
|||||||
],
|
],
|
||||||
"host_permissions": [
|
"host_permissions": [
|
||||||
"*://*.naver.com/*",
|
"*://*.naver.com/*",
|
||||||
"*://*.ncloud.com/*"
|
"*://*.ncloud.com/*",
|
||||||
|
"*://*.pstatic.net/*"
|
||||||
],
|
],
|
||||||
"declarative_net_request": {
|
"declarative_net_request": {
|
||||||
"rule_resources": [
|
"rule_resources": [
|
||||||
|
|||||||
47
rules.json
47
rules.json
@@ -1 +1,46 @@
|
|||||||
[]
|
[
|
||||||
|
{
|
||||||
|
"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