jumpy-lion 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-controller.js +1 -1
- package/dist/browser-controller.js.map +1 -1
- package/dist/browser-process/browser.d.ts.map +1 -1
- package/dist/browser-process/browser.js +3 -1
- package/dist/browser-process/browser.js.map +1 -1
- package/dist/fingerprinting/fingerprint-injector.d.ts +7 -1
- package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-injector.js +92 -12
- package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js +16 -1
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js +18 -1
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js +16 -1
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js +16 -1
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +16 -1
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js +13 -3
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts +1 -0
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.js +1 -0
- package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.d.ts +14 -0
- package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.js +160 -0
- package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +16 -1
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js +16 -1
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +19 -17
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +77 -19
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +27 -18
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +16 -4
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +16 -2
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +20 -9
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -41,24 +41,19 @@ export const createUAClientHintsSpoofingScript = (platform = 'Win32', generatedU
|
|
|
41
41
|
bitness = '64';
|
|
42
42
|
wow64 = false;
|
|
43
43
|
}
|
|
44
|
-
// Chrome version - use generated data if available
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
// Chrome version - use generated data if available.
|
|
45
|
+
// When no generated data, we parse the version from navigator.userAgent at runtime
|
|
46
|
+
// to ensure JS-side brands match the HTTP-level Sec-CH-UA headers set by
|
|
47
|
+
// Network.setUserAgentOverride (which also parses from the UA string).
|
|
48
|
+
const hasGeneratedVersion = !!generatedUAData?.uaFullVersion;
|
|
49
|
+
const fullVersion = generatedUAData?.uaFullVersion || '';
|
|
47
50
|
// Brands - use generated data if available
|
|
48
51
|
const brandsJson = generatedUAData?.brands
|
|
49
52
|
? JSON.stringify(generatedUAData.brands)
|
|
50
|
-
:
|
|
51
|
-
{ brand: "Google Chrome", version: chromeVersion },
|
|
52
|
-
{ brand: "Chromium", version: chromeVersion },
|
|
53
|
-
{ brand: "Not_A Brand", version: "24" },
|
|
54
|
-
]);
|
|
53
|
+
: '';
|
|
55
54
|
const fullVersionListJson = generatedUAData?.fullVersionList
|
|
56
55
|
? JSON.stringify(generatedUAData.fullVersionList)
|
|
57
|
-
:
|
|
58
|
-
{ brand: "Google Chrome", version: fullVersion },
|
|
59
|
-
{ brand: "Chromium", version: fullVersion },
|
|
60
|
-
{ brand: "Not_A Brand", version: "24.0.0.0" },
|
|
61
|
-
]);
|
|
56
|
+
: '';
|
|
62
57
|
return `
|
|
63
58
|
(() => {
|
|
64
59
|
'use strict';
|
|
@@ -67,14 +62,28 @@ export const createUAClientHintsSpoofingScript = (platform = 'Win32', generatedU
|
|
|
67
62
|
// CRITICAL: Must match the platform spoofing and userAgent
|
|
68
63
|
|
|
69
64
|
const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
|
|
70
|
-
|
|
71
|
-
//
|
|
65
|
+
|
|
66
|
+
// Parse Chrome version from UA at runtime to stay in sync with
|
|
67
|
+
// HTTP-level Sec-CH-UA set by Network.setUserAgentOverride.
|
|
68
|
+
const _parsedMatch = navigator.userAgent.match(/Chrome\\/([\\d.]+)/);
|
|
69
|
+
const _rtFullVersion = _parsedMatch ? _parsedMatch[1] : '134.0.6998.88';
|
|
70
|
+
const _rtMajorVersion = _rtFullVersion.split('.')[0];
|
|
71
|
+
|
|
72
|
+
// Brand list - from generated fingerprint or derived from UA at runtime
|
|
72
73
|
const brands = Object.freeze(
|
|
73
|
-
${brandsJson
|
|
74
|
+
${brandsJson || `[
|
|
75
|
+
{ brand: "Google Chrome", version: _rtMajorVersion },
|
|
76
|
+
{ brand: "Chromium", version: _rtMajorVersion },
|
|
77
|
+
{ brand: "Not_A Brand", version: "24" },
|
|
78
|
+
]`}.map(b => Object.freeze(b))
|
|
74
79
|
);
|
|
75
80
|
|
|
76
81
|
const fullVersionList = Object.freeze(
|
|
77
|
-
${fullVersionListJson
|
|
82
|
+
${fullVersionListJson || `[
|
|
83
|
+
{ brand: "Google Chrome", version: _rtFullVersion },
|
|
84
|
+
{ brand: "Chromium", version: _rtFullVersion },
|
|
85
|
+
{ brand: "Not_A Brand", version: "24.0.0.0" },
|
|
86
|
+
]`}.map(b => Object.freeze(b))
|
|
78
87
|
);
|
|
79
88
|
|
|
80
89
|
const mobile = false;
|
|
@@ -94,7 +103,7 @@ export const createUAClientHintsSpoofingScript = (platform = 'Win32', generatedU
|
|
|
94
103
|
model: "",
|
|
95
104
|
platform: platformData,
|
|
96
105
|
platformVersion: platformVersion,
|
|
97
|
-
uaFullVersion: "${fullVersion}",
|
|
106
|
+
uaFullVersion: ${hasGeneratedVersion ? `"${fullVersion}"` : '_rtFullVersion'},
|
|
98
107
|
wow64: wow64,
|
|
99
108
|
formFactor: []
|
|
100
109
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ua-ch.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/ua-ch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC7C,QAAQ,GAAG,OAAO,EAClB,eAAmC,EAC7B,EAAE;IACR,oEAAoE;IACpE,+DAA+D;IAC/D,IAAI,YAAoB,CAAC;IACzB,IAAI,eAAuB,CAAC;IAC5B,IAAI,YAAoB,CAAC;IACzB,IAAI,OAAe,CAAC;IACpB,IAAI,KAAc,CAAC;IAEnB,IAAI,eAAe,EAAE,CAAC;QAClB,YAAY,GAAG,eAAe,CAAC,QAAQ,IAAI,SAAS,CAAC;QACrD,eAAe,GAAG,eAAe,CAAC,eAAe,IAAI,QAAQ,CAAC;QAC9D,YAAY,GAAG,eAAe,CAAC,YAAY,IAAI,KAAK,CAAC;QACrD,OAAO,GAAG,eAAe,CAAC,OAAO,IAAI,IAAI,CAAC;QAC1C,KAAK,GAAG,eAAe,CAAC,KAAK,IAAI,KAAK,CAAC;IAC3C,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC5D,YAAY,GAAG,SAAS,CAAC;QACzB,eAAe,GAAG,QAAQ,CAAC;QAC3B,YAAY,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC;QACf,KAAK,GAAG,KAAK,CAAC;IAClB,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,YAAY,GAAG,OAAO,CAAC;QACvB,eAAe,GAAG,QAAQ,CAAC;QAC3B,YAAY,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC;QACf,KAAK,GAAG,KAAK,CAAC;IAClB,CAAC;SAAM,CAAC;QACJ,YAAY,GAAG,OAAO,CAAC;QACvB,eAAe,GAAG,OAAO,CAAC;QAC1B,YAAY,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC;QACf,KAAK,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,uEAAuE;IACvE,MAAM,
|
|
1
|
+
{"version":3,"file":"ua-ch.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/ua-ch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC7C,QAAQ,GAAG,OAAO,EAClB,eAAmC,EAC7B,EAAE;IACR,oEAAoE;IACpE,+DAA+D;IAC/D,IAAI,YAAoB,CAAC;IACzB,IAAI,eAAuB,CAAC;IAC5B,IAAI,YAAoB,CAAC;IACzB,IAAI,OAAe,CAAC;IACpB,IAAI,KAAc,CAAC;IAEnB,IAAI,eAAe,EAAE,CAAC;QAClB,YAAY,GAAG,eAAe,CAAC,QAAQ,IAAI,SAAS,CAAC;QACrD,eAAe,GAAG,eAAe,CAAC,eAAe,IAAI,QAAQ,CAAC;QAC9D,YAAY,GAAG,eAAe,CAAC,YAAY,IAAI,KAAK,CAAC;QACrD,OAAO,GAAG,eAAe,CAAC,OAAO,IAAI,IAAI,CAAC;QAC1C,KAAK,GAAG,eAAe,CAAC,KAAK,IAAI,KAAK,CAAC;IAC3C,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC5D,YAAY,GAAG,SAAS,CAAC;QACzB,eAAe,GAAG,QAAQ,CAAC;QAC3B,YAAY,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC;QACf,KAAK,GAAG,KAAK,CAAC;IAClB,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,YAAY,GAAG,OAAO,CAAC;QACvB,eAAe,GAAG,QAAQ,CAAC;QAC3B,YAAY,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC;QACf,KAAK,GAAG,KAAK,CAAC;IAClB,CAAC;SAAM,CAAC;QACJ,YAAY,GAAG,OAAO,CAAC;QACvB,eAAe,GAAG,OAAO,CAAC;QAC1B,YAAY,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC;QACf,KAAK,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,oDAAoD;IACpD,mFAAmF;IACnF,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,mBAAmB,GAAG,CAAC,CAAC,eAAe,EAAE,aAAa,CAAC;IAC7D,MAAM,WAAW,GAAG,eAAe,EAAE,aAAa,IAAI,EAAE,CAAC;IAEzD,2CAA2C;IAC3C,MAAM,UAAU,GAAG,eAAe,EAAE,MAAM;QACtC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,mBAAmB,GAAG,eAAe,EAAE,eAAe;QACxD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,eAAe,CAAC;QACjD,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;;;;;;;;;;;;;;;;;UAiBD,UAAU,IAAI;;;;UAId;;;;UAIA,mBAAmB,IAAI;;;;UAIvB;;;;4BAIkB,YAAY;+BACT,eAAe;4BAClB,YAAY;uBACjB,OAAO;oBACV,KAAK;;;;;;;;;;;;yBAYA,mBAAmB,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkHnF,CAAC;AACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgl-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,yBAAyB,sBAAuB,WAAW,KAAG,
|
|
1
|
+
{"version":3,"file":"webgl-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgl-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,yBAAyB,sBAAuB,WAAW,KAAG,MA8N1E,CAAC"}
|
|
@@ -86,10 +86,22 @@ export const createWebGLSpoofingScript = (fingerprintWebGL) => {
|
|
|
86
86
|
const config = gpuConfigs[platform] || gpuConfigs['Win32'];
|
|
87
87
|
|
|
88
88
|
// Select a consistent vendor/renderer pair per session.
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
const
|
|
92
|
-
|
|
89
|
+
// Stable seed: must NOT use Date.now() because this script re-executes on
|
|
90
|
+
// every reload via addScriptToEvaluateOnNewDocument.
|
|
91
|
+
const _stableHash = (salt) => {
|
|
92
|
+
const _s = typeof __stealth !== 'undefined' ? __stealth : {};
|
|
93
|
+
const key = _s.seedKey || '';
|
|
94
|
+
const ua = navigator.userAgent || '';
|
|
95
|
+
const s = screen;
|
|
96
|
+
let h = salt | 0;
|
|
97
|
+
for (let i = 0; i < key.length; i++) h = (h << 5) - h + key.charCodeAt(i) | 0;
|
|
98
|
+
for (let i = 0; i < ua.length; i++) h = (h << 5) - h + ua.charCodeAt(i) | 0;
|
|
99
|
+
h = (h << 5) - h + (s.width || 0) | 0;
|
|
100
|
+
h = (h << 5) - h + (s.height || 0) | 0;
|
|
101
|
+
h = (h << 5) - h + (s.colorDepth || 0) | 0;
|
|
102
|
+
return h >>> 0;
|
|
103
|
+
};
|
|
104
|
+
const sessionSeed = _stableHash(0xCAFE1002);
|
|
93
105
|
const seededIdx = sessionSeed % config.vendorPairs.length;
|
|
94
106
|
const selectedPair = config.vendorPairs[seededIdx];
|
|
95
107
|
const selectedVendor = selectedPair.vendor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgl-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,gBAA8B,EAAU,EAAE;IAChF,iFAAiF;IACjF,MAAM,cAAc,GAAG,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,cAAc,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAElH,OAAO;;;;;;;;;;UAUD,cAAc,CAAC,CAAC,CAAC;;oCAES,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;;;;SAI3D,CAAC,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"webgl-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgl-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,gBAA8B,EAAU,EAAE;IAChF,iFAAiF;IACjF,MAAM,cAAc,GAAG,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,cAAc,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAElH,OAAO;;;;;;;;;;UAUD,cAAc,CAAC,CAAC,CAAC;;oCAES,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;;;;SAI3D,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAuFH;;;;;;;;;;;;;;yBAcgB,cAAc,IAAI,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU;;;yBAGxF,cAAc,IAAI,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA2CjH,CAAC,cAAc,CAAC,CAAC,CAAC;;;;;;;;;SASnB,CAAC,CAAC,CAAC;;SAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2CH,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgpu-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,0BAA0B,kCAA+B,
|
|
1
|
+
{"version":3,"file":"webgpu-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgpu-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,0BAA0B,kCAA+B,MAkNrE,CAAC"}
|
|
@@ -22,8 +22,22 @@ export const createWebGPUSpoofingScript = (experimentalMode = false) => {
|
|
|
22
22
|
` : ''}
|
|
23
23
|
|
|
24
24
|
// Standard mode: spoof WebGPU
|
|
25
|
-
//
|
|
26
|
-
|
|
25
|
+
// Stable seed: must NOT use Date.now() because this script re-executes on
|
|
26
|
+
// every reload via addScriptToEvaluateOnNewDocument.
|
|
27
|
+
const _stableHash = (salt) => {
|
|
28
|
+
const _s = typeof __stealth !== 'undefined' ? __stealth : {};
|
|
29
|
+
const key = _s.seedKey || '';
|
|
30
|
+
const ua = navigator.userAgent || '';
|
|
31
|
+
const s = screen;
|
|
32
|
+
let h = salt | 0;
|
|
33
|
+
for (let i = 0; i < key.length; i++) h = (h << 5) - h + key.charCodeAt(i) | 0;
|
|
34
|
+
for (let i = 0; i < ua.length; i++) h = (h << 5) - h + ua.charCodeAt(i) | 0;
|
|
35
|
+
h = (h << 5) - h + (s.width || 0) | 0;
|
|
36
|
+
h = (h << 5) - h + (s.height || 0) | 0;
|
|
37
|
+
h = (h << 5) - h + (s.colorDepth || 0) | 0;
|
|
38
|
+
return h >>> 0;
|
|
39
|
+
};
|
|
40
|
+
const sessionSeed = _stableHash(0xCAFE1004);
|
|
27
41
|
const createSeededRNG = (seed) => {
|
|
28
42
|
let s = seed | 0;
|
|
29
43
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgpu-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,gBAAgB,GAAG,KAAK,EAAU,EAAE;IAC3E,OAAO;;;;;;;UAOD,gBAAgB,CAAC,CAAC,CAAC;;;;;;;;;SASpB,CAAC,CAAC,CAAC,EAAE
|
|
1
|
+
{"version":3,"file":"webgpu-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgpu-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,gBAAgB,GAAG,KAAK,EAAU,EAAE;IAC3E,OAAO;;;;;;;UAOD,gBAAgB,CAAC,CAAC,CAAC;;;;;;;;;SASpB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgMR,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webrtc-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webrtc-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,0BAA0B,QAAO,
|
|
1
|
+
{"version":3,"file":"webrtc-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webrtc-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,0BAA0B,QAAO,MAiM7C,CAAC"}
|
|
@@ -19,20 +19,31 @@ export const createWebRTCSpoofingScript = () => {
|
|
|
19
19
|
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
|
-
|
|
22
|
+
// Stable seed: must NOT use Date.now() because this script re-executes on
|
|
23
|
+
// every reload via addScriptToEvaluateOnNewDocument.
|
|
24
|
+
const _stableHash = (salt) => {
|
|
25
|
+
const _s = typeof __stealth !== 'undefined' ? __stealth : {};
|
|
26
|
+
const key = _s.seedKey || '';
|
|
27
|
+
const ua = navigator.userAgent || '';
|
|
28
|
+
const s = screen;
|
|
29
|
+
let h = salt | 0;
|
|
30
|
+
for (let i = 0; i < key.length; i++) h = (h << 5) - h + key.charCodeAt(i) | 0;
|
|
31
|
+
for (let i = 0; i < ua.length; i++) h = (h << 5) - h + ua.charCodeAt(i) | 0;
|
|
32
|
+
h = (h << 5) - h + (s.width || 0) | 0;
|
|
33
|
+
h = (h << 5) - h + (s.height || 0) | 0;
|
|
34
|
+
h = (h << 5) - h + (s.colorDepth || 0) | 0;
|
|
35
|
+
return h >>> 0;
|
|
36
|
+
};
|
|
37
|
+
const sessionSeed = _stableHash(0xCAFE1006);
|
|
23
38
|
const seededRandom = createSeededRNG(sessionSeed);
|
|
24
39
|
|
|
25
|
-
// Generate
|
|
40
|
+
// Generate deterministic hex device IDs (64 chars) using the seeded PRNG.
|
|
41
|
+
// Must NOT use crypto.getRandomValues or Math.random because the cache resets
|
|
42
|
+
// on every reload (addScriptToEvaluateOnNewDocument re-runs).
|
|
26
43
|
const generateDeviceId = () => {
|
|
27
|
-
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
|
|
28
|
-
const bytes = new Uint8Array(32);
|
|
29
|
-
crypto.getRandomValues(bytes);
|
|
30
|
-
return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');
|
|
31
|
-
}
|
|
32
|
-
// Fallback: combine Date.now, Math.random, and performance.now for entropy
|
|
33
44
|
let id = '';
|
|
34
45
|
for (let i = 0; i < 64; i++) {
|
|
35
|
-
id += Math.floor(
|
|
46
|
+
id += Math.floor(seededRandom() * 16).toString(16);
|
|
36
47
|
}
|
|
37
48
|
return id;
|
|
38
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webrtc-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webrtc-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAW,EAAE;IACnD,OAAO
|
|
1
|
+
{"version":3,"file":"webrtc-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webrtc-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAW,EAAE;IACnD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+LL,CAAC;AACP,CAAC,CAAC"}
|