jumpy-lion 0.1.0 → 0.1.2
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.d.ts +22 -3
- package/dist/browser-controller.d.ts.map +1 -1
- package/dist/browser-controller.js +319 -28
- package/dist/browser-controller.js.map +1 -1
- package/dist/browser-plugin.d.ts +56 -7
- package/dist/browser-plugin.d.ts.map +1 -1
- package/dist/browser-plugin.js +268 -56
- package/dist/browser-plugin.js.map +1 -1
- package/dist/browser-process/browser.d.ts +39 -0
- package/dist/browser-process/browser.d.ts.map +1 -1
- package/dist/browser-process/browser.js +125 -18
- package/dist/browser-process/browser.js.map +1 -1
- package/dist/browser-process/process.d.ts +9 -0
- package/dist/browser-process/process.d.ts.map +1 -1
- package/dist/browser-process/process.js +100 -6
- package/dist/browser-process/process.js.map +1 -1
- package/dist/browser-profiles/chrome/default.d.ts +116 -0
- package/dist/browser-profiles/chrome/default.d.ts.map +1 -1
- package/dist/browser-profiles/chrome/default.js +118 -1
- package/dist/browser-profiles/chrome/default.js.map +1 -1
- package/dist/browser-profiles/chrome/populate-profile.d.ts +76 -0
- package/dist/browser-profiles/chrome/populate-profile.d.ts.map +1 -0
- package/dist/browser-profiles/chrome/populate-profile.js +300 -0
- package/dist/browser-profiles/chrome/populate-profile.js.map +1 -0
- package/dist/browser-profiles/index.d.ts +1 -0
- package/dist/browser-profiles/index.d.ts.map +1 -1
- package/dist/browser-profiles/index.js +2 -0
- package/dist/browser-profiles/index.js.map +1 -1
- package/dist/crawler.d.ts +81 -9
- package/dist/crawler.d.ts.map +1 -1
- package/dist/crawler.js +26 -10
- package/dist/crawler.js.map +1 -1
- package/dist/fingerprinting/all-fingerprint-defender/_locales/en/messages.json +95 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts +83 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/debounce-09920c81.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/options-fe2fb5aa.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/popup-1886d2ef.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-128.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-16.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-24.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-32-disabled.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-32.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-48.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/manifest.json +83 -0
- package/dist/fingerprinting/all-fingerprint-defender/options.html +17 -0
- package/dist/fingerprinting/all-fingerprint-defender/popup.html +23 -0
- package/dist/fingerprinting/anti-webgpu/background.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/background.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/background.js +4 -0
- package/dist/fingerprinting/anti-webgpu/background.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js +50 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js +172 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/128.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/16.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/32.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/48.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/64.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.css +88 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.html +58 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.js +96 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.js +249 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.js +86 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.js +14 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.js +107 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/manifest.json +58 -0
- package/dist/fingerprinting/custom-fingerprint-injector.d.ts +87 -0
- package/dist/fingerprinting/custom-fingerprint-injector.d.ts.map +1 -0
- package/dist/fingerprinting/custom-fingerprint-injector.js +342 -0
- package/dist/fingerprinting/custom-fingerprint-injector.js.map +1 -0
- package/dist/fingerprinting/fingerprint-injector.d.ts +157 -0
- package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-injector.js +632 -0
- package/dist/fingerprinting/fingerprint-injector.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js +119 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js +149 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts +14 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js +763 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js +195 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts +10 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js +195 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts +28 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +1181 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts +7 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js +171 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts +36 -0
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/index.js +40 -0
- package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts +45 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js +268 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +301 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts +7 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +58 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js +249 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts +33 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +618 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.d.ts +13 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js +356 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts +18 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js +171 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts +55 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js +244 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts +14 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +925 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts +13 -0
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js +346 -0
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts +13 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js +264 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts +27 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +213 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.d.ts +12 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.js +517 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts +12 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +215 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +202 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +188 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/launcher-wrap.d.ts +2 -2
- package/dist/launcher-wrap.d.ts.map +1 -1
- package/dist/launcher-wrap.js.map +1 -1
- package/dist/page.d.ts +161 -7
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +1034 -23
- package/dist/page.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +8 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/audio-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,oCAAoC,QAAO,MAiHvD,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio Fingerprint Spoofing
|
|
3
|
+
* Adds controlled noise to audio processing to prevent fingerprinting
|
|
4
|
+
*/
|
|
5
|
+
export const createAudioFingerprintSpoofingScript = () => {
|
|
6
|
+
return `
|
|
7
|
+
(() => {
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
// Audio Fingerprint Spoofing for 2025
|
|
11
|
+
const spoofAudioContext = () => {
|
|
12
|
+
const AudioContext = window.AudioContext || window.webkitAudioContext;
|
|
13
|
+
if (!AudioContext) return;
|
|
14
|
+
|
|
15
|
+
const OriginalAudioContext = AudioContext;
|
|
16
|
+
const OriginalOfflineAudioContext = window.OfflineAudioContext || window.webkitOfflineAudioContext;
|
|
17
|
+
|
|
18
|
+
// Seeded PRNG (mulberry32) for deterministic noise
|
|
19
|
+
const createSeededRNG = (seed) => {
|
|
20
|
+
let s = seed | 0;
|
|
21
|
+
return () => {
|
|
22
|
+
s = s + 0x6D2B79F5 | 0;
|
|
23
|
+
let t = Math.imul(s ^ s >>> 15, 1 | s);
|
|
24
|
+
t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
|
|
25
|
+
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
const sessionSeed = Date.now() ^ 0xB7E15162;
|
|
29
|
+
const seededRandom = createSeededRNG(sessionSeed);
|
|
30
|
+
|
|
31
|
+
// Add controlled per-sample noise to audio processing
|
|
32
|
+
const addNoise = (array) => {
|
|
33
|
+
if (!array || !array.length) return array;
|
|
34
|
+
|
|
35
|
+
for (let i = 0; i < array.length; i++) {
|
|
36
|
+
const noise = 0.00001 * (seededRandom() - 0.5);
|
|
37
|
+
array[i] = array[i] + noise;
|
|
38
|
+
}
|
|
39
|
+
return array;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// Override AudioContext
|
|
43
|
+
window.AudioContext = window.webkitAudioContext = new Proxy(OriginalAudioContext, {
|
|
44
|
+
construct(target, args) {
|
|
45
|
+
const context = Reflect.construct(target, args);
|
|
46
|
+
|
|
47
|
+
// Override createAnalyser
|
|
48
|
+
const originalCreateAnalyser = context.createAnalyser;
|
|
49
|
+
context.createAnalyser = function() {
|
|
50
|
+
const analyser = originalCreateAnalyser.apply(this, arguments);
|
|
51
|
+
|
|
52
|
+
const originalGetFloatFrequencyData = analyser.getFloatFrequencyData;
|
|
53
|
+
analyser.getFloatFrequencyData = function(array) {
|
|
54
|
+
originalGetFloatFrequencyData.apply(this, arguments);
|
|
55
|
+
addNoise(array);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const originalGetByteFrequencyData = analyser.getByteFrequencyData;
|
|
59
|
+
analyser.getByteFrequencyData = function(array) {
|
|
60
|
+
originalGetByteFrequencyData.apply(this, arguments);
|
|
61
|
+
for (let i = 0; i < array.length; i++) {
|
|
62
|
+
array[i] = Math.min(255, Math.max(0, array[i] + Math.floor(seededRandom() * 3 - 1)));
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
return analyser;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
return context;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Override OfflineAudioContext
|
|
74
|
+
if (OriginalOfflineAudioContext) {
|
|
75
|
+
window.OfflineAudioContext = window.webkitOfflineAudioContext = new Proxy(OriginalOfflineAudioContext, {
|
|
76
|
+
construct(target, args) {
|
|
77
|
+
const context = Reflect.construct(target, args);
|
|
78
|
+
|
|
79
|
+
const originalStartRendering = context.startRendering;
|
|
80
|
+
context.startRendering = function() {
|
|
81
|
+
return originalStartRendering.apply(this, arguments).then(buffer => {
|
|
82
|
+
// Add noise to the rendered buffer
|
|
83
|
+
for (let channel = 0; channel < buffer.numberOfChannels; channel++) {
|
|
84
|
+
const channelData = buffer.getChannelData(channel);
|
|
85
|
+
addNoise(channelData);
|
|
86
|
+
}
|
|
87
|
+
return buffer;
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
return context;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Register Proxy constructors with stealth utils for toString masking
|
|
97
|
+
const _s = typeof __stealth !== 'undefined' ? __stealth : null;
|
|
98
|
+
if (_s && _s.utils) {
|
|
99
|
+
_s.utils.registerNativeFunction(window.AudioContext, 'AudioContext');
|
|
100
|
+
if (window.OfflineAudioContext) {
|
|
101
|
+
_s.utils.registerNativeFunction(window.OfflineAudioContext, 'OfflineAudioContext');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
|
|
107
|
+
const ERROR_PREFIX = '[CDP-FP-ERROR]';
|
|
108
|
+
|
|
109
|
+
try {
|
|
110
|
+
console.log(DEBUG_PREFIX, 'Starting audio context spoofing...');
|
|
111
|
+
spoofAudioContext();
|
|
112
|
+
console.log(DEBUG_PREFIX, '✓ Audio context spoofing applied');
|
|
113
|
+
} catch (e) {
|
|
114
|
+
console.error(ERROR_PREFIX, '✗ Failed to apply audio context spoofing:', e);
|
|
115
|
+
throw e; // Rethrow to make errors visible
|
|
116
|
+
}
|
|
117
|
+
})();`;
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=audio-spoofing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/audio-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,oCAAoC,GAAG,GAAW,EAAE;IAC7D,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+GL,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-protection.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/canvas-protection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,oCAAoC,QAAO,MA+IvD,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced Canvas Protection
|
|
3
|
+
* Adds deterministic noise to canvas operations to prevent fingerprinting
|
|
4
|
+
*/
|
|
5
|
+
export const createAdvancedCanvasProtectionScript = () => {
|
|
6
|
+
return `
|
|
7
|
+
(() => {
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
// Advanced Canvas Protection for 2025
|
|
11
|
+
const protectCanvas = () => {
|
|
12
|
+
const noiseFactor = 0.0001;
|
|
13
|
+
|
|
14
|
+
// Seeded PRNG (mulberry32) for deterministic noise
|
|
15
|
+
const createSeededRNG = (seed) => {
|
|
16
|
+
let s = seed | 0;
|
|
17
|
+
return () => {
|
|
18
|
+
s = s + 0x6D2B79F5 | 0;
|
|
19
|
+
let t = Math.imul(s ^ s >>> 15, 1 | s);
|
|
20
|
+
t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
|
|
21
|
+
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
const sessionSeed = Date.now() ^ (Math.random() * 0xFFFFFFFF >>> 0);
|
|
25
|
+
const seededRandom = createSeededRNG(sessionSeed);
|
|
26
|
+
|
|
27
|
+
// Helper to add deterministic noise to a cloned image data
|
|
28
|
+
const addNoiseToImageData = (imageData) => {
|
|
29
|
+
const data = imageData.data;
|
|
30
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
31
|
+
// Add small deterministic noise to RGB channels, skip alpha
|
|
32
|
+
const noise = Math.floor((seededRandom() - 0.5) * 3);
|
|
33
|
+
data[i] = Math.min(255, Math.max(0, data[i] + noise)); // R
|
|
34
|
+
data[i+1] = Math.min(255, Math.max(0, data[i+1] + noise)); // G
|
|
35
|
+
data[i+2] = Math.min(255, Math.max(0, data[i+2] + noise)); // B
|
|
36
|
+
}
|
|
37
|
+
return imageData;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
// Store originals before overriding
|
|
41
|
+
const originalToDataURL = HTMLCanvasElement.prototype.toDataURL;
|
|
42
|
+
const originalToBlob = HTMLCanvasElement.prototype.toBlob;
|
|
43
|
+
const originalGetImageData = CanvasRenderingContext2D.prototype.getImageData;
|
|
44
|
+
const originalMeasureText = CanvasRenderingContext2D.prototype.measureText;
|
|
45
|
+
|
|
46
|
+
// Override toDataURL - use a copy canvas so the original is not modified
|
|
47
|
+
HTMLCanvasElement.prototype.toDataURL = function(...args) {
|
|
48
|
+
const context = this.getContext('2d');
|
|
49
|
+
if (context) {
|
|
50
|
+
const copyCanvas = document.createElement('canvas');
|
|
51
|
+
copyCanvas.width = this.width;
|
|
52
|
+
copyCanvas.height = this.height;
|
|
53
|
+
const copyCtx = copyCanvas.getContext('2d');
|
|
54
|
+
if (copyCtx) {
|
|
55
|
+
const imageData = originalGetImageData.call(context, 0, 0, this.width, this.height);
|
|
56
|
+
addNoiseToImageData(imageData);
|
|
57
|
+
copyCtx.putImageData(imageData, 0, 0);
|
|
58
|
+
return originalToDataURL.apply(copyCanvas, args);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return originalToDataURL.apply(this, args);
|
|
62
|
+
};
|
|
63
|
+
// Override toBlob - use a copy canvas so the original is not modified
|
|
64
|
+
HTMLCanvasElement.prototype.toBlob = function(callback, ...args) {
|
|
65
|
+
const context = this.getContext('2d');
|
|
66
|
+
if (context) {
|
|
67
|
+
const copyCanvas = document.createElement('canvas');
|
|
68
|
+
copyCanvas.width = this.width;
|
|
69
|
+
copyCanvas.height = this.height;
|
|
70
|
+
const copyCtx = copyCanvas.getContext('2d');
|
|
71
|
+
if (copyCtx) {
|
|
72
|
+
const imageData = originalGetImageData.call(context, 0, 0, this.width, this.height);
|
|
73
|
+
addNoiseToImageData(imageData);
|
|
74
|
+
copyCtx.putImageData(imageData, 0, 0);
|
|
75
|
+
return originalToBlob.call(copyCanvas, callback, ...args);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return originalToBlob.call(this, callback, ...args);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// Override getImageData - clone the data, add noise to clone, return clone
|
|
82
|
+
CanvasRenderingContext2D.prototype.getImageData = function(...args) {
|
|
83
|
+
const imageData = originalGetImageData.apply(this, args);
|
|
84
|
+
const cloned = new ImageData(
|
|
85
|
+
new Uint8ClampedArray(imageData.data),
|
|
86
|
+
imageData.width,
|
|
87
|
+
imageData.height
|
|
88
|
+
);
|
|
89
|
+
return addNoiseToImageData(cloned);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// Override readPixels for WebGL - use seeded PRNG
|
|
93
|
+
if (typeof WebGLRenderingContext !== 'undefined') {
|
|
94
|
+
const originalReadPixels = WebGLRenderingContext.prototype.readPixels;
|
|
95
|
+
WebGLRenderingContext.prototype.readPixels = function(x, y, width, height, format, type, pixels) {
|
|
96
|
+
originalReadPixels.apply(this, arguments);
|
|
97
|
+
if (pixels && pixels.length) {
|
|
98
|
+
for (let i = 0; i < pixels.length; i++) {
|
|
99
|
+
pixels[i] = Math.min(255, Math.max(0, pixels[i] + Math.floor(seededRandom() * 3 - 1)));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
if (typeof WebGL2RenderingContext !== 'undefined') {
|
|
105
|
+
WebGL2RenderingContext.prototype.readPixels = WebGLRenderingContext.prototype.readPixels;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Override font measurements to add slight deterministic variations
|
|
110
|
+
CanvasRenderingContext2D.prototype.measureText = function(text) {
|
|
111
|
+
const metrics = originalMeasureText.apply(this, arguments);
|
|
112
|
+
|
|
113
|
+
// Add tiny deterministic variation to measurements
|
|
114
|
+
const variation = 1 + (seededRandom() - 0.5) * 0.001;
|
|
115
|
+
|
|
116
|
+
return new Proxy(metrics, {
|
|
117
|
+
get(target, prop) {
|
|
118
|
+
if (typeof target[prop] === 'number') {
|
|
119
|
+
return target[prop] * variation;
|
|
120
|
+
}
|
|
121
|
+
return target[prop];
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// Register all overridden functions with stealth utils for toString masking
|
|
127
|
+
const _s = typeof __stealth !== 'undefined' ? __stealth : null;
|
|
128
|
+
if (_s && _s.utils) {
|
|
129
|
+
_s.utils.registerNativeFunction(HTMLCanvasElement.prototype.toDataURL, 'toDataURL');
|
|
130
|
+
_s.utils.registerNativeFunction(HTMLCanvasElement.prototype.toBlob, 'toBlob');
|
|
131
|
+
_s.utils.registerNativeFunction(CanvasRenderingContext2D.prototype.getImageData, 'getImageData');
|
|
132
|
+
_s.utils.registerNativeFunction(CanvasRenderingContext2D.prototype.measureText, 'measureText');
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
|
|
137
|
+
const ERROR_PREFIX = '[CDP-FP-ERROR]';
|
|
138
|
+
|
|
139
|
+
try {
|
|
140
|
+
console.log(DEBUG_PREFIX, 'Starting canvas protection...');
|
|
141
|
+
protectCanvas();
|
|
142
|
+
console.log(DEBUG_PREFIX, '✓ Canvas protection applied');
|
|
143
|
+
} catch (e) {
|
|
144
|
+
console.error(ERROR_PREFIX, '✗ Failed to apply canvas protection:', e);
|
|
145
|
+
throw e; // Rethrow to make errors visible
|
|
146
|
+
}
|
|
147
|
+
})();`;
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=canvas-protection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-protection.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/canvas-protection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,oCAAoC,GAAG,GAAW,EAAE;IAC7D,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6IL,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDP Detection Bypass
|
|
3
|
+
* Comprehensive CDP and automation detection bypass for 2024-2025
|
|
4
|
+
*
|
|
5
|
+
* Handles:
|
|
6
|
+
* - Iframe contentWindow access hiding
|
|
7
|
+
* - Puppeteer/Playwright evaluation script traces
|
|
8
|
+
* - Error.captureStackTrace patching
|
|
9
|
+
* - Storage access API spoofing
|
|
10
|
+
* - SourceURL/SourceMap hiding
|
|
11
|
+
* - Chrome DevTools property removal
|
|
12
|
+
*/
|
|
13
|
+
export declare const createCDPDetectionBypassScript: () => string;
|
|
14
|
+
//# sourceMappingURL=cdp-detection-bypass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp-detection-bypass.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/cdp-detection-bypass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,8BAA8B,QAAO,MA6uBjD,CAAC"}
|