@@ -73,152 +73,3 @@ author: BlazeFTL
7373 });
7474 window.addEventListener('load', () => { observer.disconnect(); Document.prototype.createElement = _origCreate; }, { once: true });
7575})();
76-
77- /// blaze-set-useragent.js
78- /// alias blaze-sua.js
79- (function() {
80- const UA_ANDROID = 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36';
81- const UA_DESKTOP = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36';
82-
83- const isMobile = /Android|iPhone|iPad|iPod|Mobile/i.test(navigator.userAgent);
84- const spoofUA = isMobile ? UA_ANDROID : UA_DESKTOP;
85-
86- try {
87- Object.defineProperty(navigator, 'userAgent', {
88- get: () => spoofUA,
89- configurable: true,
90- });
91- } catch(e) {}
92-
93- try {
94- Object.defineProperty(navigator, 'appVersion', {
95- get: () => spoofUA.replace('Mozilla/', ''),
96- configurable: true,
97- });
98- } catch(e) {}
99-
100- try {
101- Object.defineProperty(navigator, 'platform', {
102- get: () => isMobile ? 'Linux armv8l' : 'Win32',
103- configurable: true,
104- });
105- } catch(e) {}
106-
107- try {
108- Object.defineProperty(navigator, 'vendor', {
109- get: () => 'Google Inc.',
110- configurable: true,
111- });
112- } catch(e) {}
113-
114- // Spoof navigator.userAgentData (Chrome-only modern UA hints API)
115- const uadBrands = [
116- { brand: 'Google Chrome', version: '137' },
117- { brand: 'Chromium', version: '137' },
118- { brand: 'Not/A)Brand', version: '24' },
119- ];
120- const uadBrandsFull = [
121- { brand: 'Google Chrome', version: '137.0.0.0' },
122- { brand: 'Chromium', version: '137.0.0.0' },
123- { brand: 'Not/A)Brand', version: '24.0.0.0' },
124- ];
125- const uadObj = {
126- brands: uadBrands,
127- mobile: isMobile,
128- platform: isMobile ? 'Android' : 'Windows',
129- getHighEntropyValues: (hints) => Promise.resolve({
130- brands: uadBrands,
131- mobile: isMobile,
132- platform: isMobile ? 'Android' : 'Windows',
133- platformVersion: isMobile ? '10.0.0' : '15.0.0',
134- architecture: isMobile ? 'arm' : 'x86',
135- bitness: '64',
136- model: '',
137- uaFullVersion: '137.0.0.0',
138- fullVersionList: uadBrandsFull,
139- }),
140- toJSON: () => ({}),
141- };
142-
143- try {
144- Object.defineProperty(navigator, 'userAgentData', {
145- get: () => uadObj,
146- configurable: true,
147- });
148- } catch(e) {}
149-
150- // Sec-CH-UA header values
151- const secUA = '"Google Chrome";v="137", "Chromium";v="137", "Not/A)Brand";v="24"';
152- const secUAMobile = isMobile ? '?1' : '?0';
153- const secUAPlatform = isMobile ? '"Android"' : '"Windows"';
154- const secUAFullVer = '"137.0.0.0"';
155- const secUAPlatformVer = isMobile ? '"10.0.0"' : '"15.0.0"';
156- const secUAArch = isMobile ? '"arm"' : '"x86"';
157- const secUABitness = '"64"';
158- const secUAModel = '""';
159- const secUAFullVerList = '"Google Chrome";v="137.0.0.0", "Chromium";v="137.0.0.0", "Not/A)Brand";v="24.0.0.0"';
160-
161- function injectSecHeaders(headers) {
162- const set = (k, v) => {
163- try { headers.set(k, v); } catch(e) {}
164- };
165- set('sec-ch-ua', secUA);
166- set('sec-ch-ua-mobile', secUAMobile);
167- set('sec-ch-ua-platform', secUAPlatform);
168- set('sec-ch-ua-full-version', secUAFullVer);
169- set('sec-ch-ua-platform-version', secUAPlatformVer);
170- set('sec-ch-ua-arch', secUAArch);
171- set('sec-ch-ua-bitness', secUABitness);
172- set('sec-ch-ua-model', secUAModel);
173- set('sec-ch-ua-full-version-list', secUAFullVerList);
174- set('user-agent', spoofUA);
175- }
176-
177- // Proxy fetch to inject Sec-CH-UA headers
178- const _fetch = window.fetch;
179- window.fetch = new Proxy(_fetch, {
180- apply(target, thisArg, args) {
181- try {
182- let [input, init] = args;
183- init = init ? Object.assign({}, init) : {};
184- const headers = new Headers(init.headers || {});
185- injectSecHeaders(headers);
186- init.headers = headers;
187- args = [input, init];
188- } catch(e) {}
189- return Reflect.apply(target, thisArg, args);
190- }
191- });
192-
193- // Proxy XMLHttpRequest.setRequestHeader to inject Sec-CH-UA headers on send
194- const _open = XMLHttpRequest.prototype.open;
195- const _send = XMLHttpRequest.prototype.send;
196- const _setHeader = XMLHttpRequest.prototype.setRequestHeader;
197-
198- XMLHttpRequest.prototype.open = new Proxy(_open, {
199- apply(target, thisArg, args) {
200- thisArg._blazeInjectUA = true;
201- return Reflect.apply(target, thisArg, args);
202- }
203- });
204-
205- XMLHttpRequest.prototype.send = new Proxy(_send, {
206- apply(target, thisArg, args) {
207- if (thisArg._blazeInjectUA) {
208- const setH = (k, v) => {
209- try { _setHeader.call(thisArg, k, v); } catch(e) {}
210- };
211- setH('sec-ch-ua', secUA);
212- setH('sec-ch-ua-mobile', secUAMobile);
213- setH('sec-ch-ua-platform', secUAPlatform);
214- setH('sec-ch-ua-full-version', secUAFullVer);
215- setH('sec-ch-ua-platform-version', secUAPlatformVer);
216- setH('sec-ch-ua-arch', secUAArch);
217- setH('sec-ch-ua-bitness', secUABitness);
218- setH('sec-ch-ua-model', secUAModel);
219- setH('sec-ch-ua-full-version-list', secUAFullVerList);
220- }
221- return Reflect.apply(target, thisArg, args);
222- }
223- });
224- })();
0 commit comments