v1.2.0: 타임머신 강제 활성화 기능 제거 + nlog.js getHighEntropyValues 오류 수정

- timemachine.js 제거 및 manifest content_scripts 에서 빼냄
  스트리머가 끈 타임머신은 서버 측 DVR 프로비저닝이 없어 cosmetic 우회만
  가능했고, 클라이언트-사이드 상태 불일치가 치지직 비정상 접근 감지를
  트리거해 "허용되지 않는 비정상적 접근입니다" 팝업 + 계정 제재 위험이
  실측으로 확인되어 제거.
- content.js 의 navigator.userAgentData override 에 getHighEntropyValues /
  toJSON 까지 일관된 Mac 값으로 구현. 기존엔 메서드가 없어서 nlog.js 가
  Uncaught TypeError: e.getHighEntropyValues is not a function 을 던졌음.
- popup.html 의 "타임머신: 강제 활성화" 상태 항목 제거.
- README 를 현재 동작 (그리드 우회만) 에 맞춰 재작성, 타임머신 미지원
  사유 명시.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
chzzk-bypass owner
2026-05-28 15:15:43 +09:00
parent ed2c9c9fc3
commit 0a326e5d80
5 changed files with 151 additions and 413 deletions

View File

@@ -1,26 +1,82 @@
// 치지직 플레이어가 OS를 검사할 때 Mac으로 인식하도록 속임
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';
}
});
Object.defineProperty(navigator, 'userAgentData', {
get: function () {
return {
brands: [
{ brand: "Chromium", version: "122" },
{ brand: "Google Chrome", version: "122" },
{ brand: "Not-A.Brand", version: "24" }
],
mobile: false,
platform: "macOS"
};
}
});
// 치지직이 윈도우에서 1080p 시청 시 그리드 설치를 요구하는 것을 우회하기 위해
// navigator 의 OS/브라우저 식별 값들을 Mac 으로 위장한다.
//
// 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;
}
});