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:
chzzk-bypass owner
2026-05-28 19:21:30 +09:00
parent 15a852c8ad
commit a59992dc87
6 changed files with 61 additions and 257 deletions

View File

@@ -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;
}
});