jumpy-lion 0.0.41 → 0.0.43
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.map +1 -1
- package/dist/browser-controller.js +102 -16
- package/dist/browser-controller.js.map +1 -1
- package/dist/browser-plugin.d.ts +20 -1
- package/dist/browser-plugin.d.ts.map +1 -1
- package/dist/browser-plugin.js +21 -1
- package/dist/browser-plugin.js.map +1 -1
- package/dist/browser-process/browser.d.ts +22 -1
- package/dist/browser-process/browser.d.ts.map +1 -1
- package/dist/browser-process/browser.js +77 -5
- package/dist/browser-process/browser.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 +32 -1
- package/dist/crawler.d.ts.map +1 -1
- package/dist/crawler.js +7 -0
- package/dist/crawler.js.map +1 -1
- 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 +40 -2
- package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-injector.js +452 -44
- 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 +11 -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 +11 -1
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js.map +1 -1
- 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 +776 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js +11 -1
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts +14 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +643 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js +11 -1
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts +17 -1
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.js +21 -1
- package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
- 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 +291 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +153 -90
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +4 -5
- 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 +11 -1
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts +13 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +413 -70
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -1
- 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 +355 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts +12 -3
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js +261 -71
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js.map +1 -1
- 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 +380 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts +8 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +756 -71
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
- 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 +368 -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 +438 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts +7 -1
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +158 -58
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -1
- 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.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +51 -10
- 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 +11 -1
- 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 +11 -1
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -1
- package/dist/page.d.ts +12 -0
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +35 -3
- package/dist/page.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/dist/fingerprinting/canvas-fingerprint.d.ts +0 -4
- package/dist/fingerprinting/canvas-fingerprint.d.ts.map +0 -1
- package/dist/fingerprinting/canvas-fingerprint.js +0 -60
- package/dist/fingerprinting/canvas-fingerprint.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stealth-script.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/stealth-script.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stealth-script.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/stealth-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAW,EAAE;IAC5C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqlCL,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage Consistency Spoofing
|
|
3
|
+
* Handles storage-related fingerprinting for 2024-2025
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - navigator.storage.estimate() with realistic quota values
|
|
7
|
+
* - StorageManager.persist() behavior spoofing
|
|
8
|
+
* - IndexedDB database name consistency
|
|
9
|
+
* - localStorage/sessionStorage quota reporting
|
|
10
|
+
* - CacheStorage.keys() consistent cache names
|
|
11
|
+
*/
|
|
12
|
+
export declare const createStorageConsistencyScript: () => string;
|
|
13
|
+
//# sourceMappingURL=storage-consistency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-consistency.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/storage-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,8BAA8B,QAAO,MAmWjD,CAAC"}
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage Consistency Spoofing
|
|
3
|
+
* Handles storage-related fingerprinting for 2024-2025
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - navigator.storage.estimate() with realistic quota values
|
|
7
|
+
* - StorageManager.persist() behavior spoofing
|
|
8
|
+
* - IndexedDB database name consistency
|
|
9
|
+
* - localStorage/sessionStorage quota reporting
|
|
10
|
+
* - CacheStorage.keys() consistent cache names
|
|
11
|
+
*/
|
|
12
|
+
export const createStorageConsistencyScript = () => {
|
|
13
|
+
return `
|
|
14
|
+
(() => {
|
|
15
|
+
'use strict';
|
|
16
|
+
|
|
17
|
+
// Storage Consistency Spoofing for 2024-2025
|
|
18
|
+
const spoofStorageAPIs = () => {
|
|
19
|
+
const platform = navigator.platform || 'Win32';
|
|
20
|
+
|
|
21
|
+
// Generate consistent seed for stable values
|
|
22
|
+
const generateSeed = () => {
|
|
23
|
+
const ua = navigator.userAgent || '';
|
|
24
|
+
const screen = window.screen;
|
|
25
|
+
return (ua.length * 17 + (screen.width || 0) * 31 + (screen.height || 0) * 13) % 1000000;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const sessionSeed = generateSeed();
|
|
29
|
+
|
|
30
|
+
// Seeded random for consistent values
|
|
31
|
+
const seededRandom = (seed, min = 0, max = 1) => {
|
|
32
|
+
const x = Math.sin(seed) * 10000;
|
|
33
|
+
const random = x - Math.floor(x);
|
|
34
|
+
return min + random * (max - min);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// 1. Override navigator.storage.estimate()
|
|
38
|
+
const spoofStorageEstimate = () => {
|
|
39
|
+
if (navigator.storage && navigator.storage.estimate) {
|
|
40
|
+
const originalEstimate = navigator.storage.estimate;
|
|
41
|
+
|
|
42
|
+
navigator.storage.estimate = function() {
|
|
43
|
+
// Realistic storage values for different platforms
|
|
44
|
+
const storageConfigs = {
|
|
45
|
+
'Win32': {
|
|
46
|
+
quotaBase: 300 * 1024 * 1024 * 1024, // ~300GB typical Windows
|
|
47
|
+
usageBase: 50 * 1024 * 1024, // ~50MB typical usage
|
|
48
|
+
variance: 0.15
|
|
49
|
+
},
|
|
50
|
+
'MacIntel': {
|
|
51
|
+
quotaBase: 250 * 1024 * 1024 * 1024, // ~250GB typical Mac
|
|
52
|
+
usageBase: 45 * 1024 * 1024,
|
|
53
|
+
variance: 0.12
|
|
54
|
+
},
|
|
55
|
+
'Linux x86_64': {
|
|
56
|
+
quotaBase: 200 * 1024 * 1024 * 1024, // ~200GB typical Linux
|
|
57
|
+
usageBase: 40 * 1024 * 1024,
|
|
58
|
+
variance: 0.18
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const config = storageConfigs[platform] || storageConfigs['Win32'];
|
|
63
|
+
|
|
64
|
+
// Calculate consistent but varied values
|
|
65
|
+
const quotaVariance = seededRandom(sessionSeed, 1 - config.variance, 1 + config.variance);
|
|
66
|
+
const usageVariance = seededRandom(sessionSeed + 1, 0.5, 2);
|
|
67
|
+
|
|
68
|
+
const quota = Math.floor(config.quotaBase * quotaVariance);
|
|
69
|
+
const usage = Math.floor(config.usageBase * usageVariance);
|
|
70
|
+
|
|
71
|
+
return Promise.resolve({
|
|
72
|
+
quota: quota,
|
|
73
|
+
usage: usage,
|
|
74
|
+
usageDetails: {
|
|
75
|
+
indexedDB: Math.floor(usage * 0.6),
|
|
76
|
+
caches: Math.floor(usage * 0.3),
|
|
77
|
+
serviceWorkerRegistrations: Math.floor(usage * 0.1)
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// 2. Override StorageManager.persist()
|
|
85
|
+
const spoofStoragePersist = () => {
|
|
86
|
+
if (navigator.storage && navigator.storage.persist) {
|
|
87
|
+
navigator.storage.persist = function() {
|
|
88
|
+
// Most browsers return false unless explicitly granted
|
|
89
|
+
return Promise.resolve(false);
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (navigator.storage && navigator.storage.persisted) {
|
|
94
|
+
navigator.storage.persisted = function() {
|
|
95
|
+
return Promise.resolve(false);
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
// 3. Protect IndexedDB from fingerprinting
|
|
101
|
+
const spoofIndexedDB = () => {
|
|
102
|
+
if (!window.indexedDB) return;
|
|
103
|
+
|
|
104
|
+
const originalOpen = window.indexedDB.open;
|
|
105
|
+
const originalDatabases = window.indexedDB.databases;
|
|
106
|
+
|
|
107
|
+
// Track opened databases for consistency
|
|
108
|
+
const openedDatabases = new Set();
|
|
109
|
+
|
|
110
|
+
window.indexedDB.open = function(name, version) {
|
|
111
|
+
openedDatabases.add(name);
|
|
112
|
+
return originalOpen.call(this, name, version);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
// Override databases() to hide fingerprinting attempts
|
|
116
|
+
if (originalDatabases) {
|
|
117
|
+
window.indexedDB.databases = function() {
|
|
118
|
+
// Return only databases that were opened in this session
|
|
119
|
+
return originalDatabases.call(this).then(databases => {
|
|
120
|
+
// Filter to only known databases or return empty for privacy
|
|
121
|
+
return databases.filter(db =>
|
|
122
|
+
openedDatabases.has(db.name) ||
|
|
123
|
+
// Allow common legitimate databases
|
|
124
|
+
db.name.startsWith('firebaseLocalStorage') ||
|
|
125
|
+
db.name === 'localforage'
|
|
126
|
+
);
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
// 4. Override localStorage/sessionStorage quota reporting
|
|
133
|
+
const spoofStorageQuota = () => {
|
|
134
|
+
// Create consistent storage size reporting
|
|
135
|
+
const getStorageSize = (storage) => {
|
|
136
|
+
let totalSize = 0;
|
|
137
|
+
try {
|
|
138
|
+
for (let i = 0; i < storage.length; i++) {
|
|
139
|
+
const key = storage.key(i);
|
|
140
|
+
if (key) {
|
|
141
|
+
totalSize += key.length + (storage.getItem(key) || '').length;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
} catch (e) {}
|
|
145
|
+
return totalSize;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// Ensure storage appears normal
|
|
149
|
+
const originalLocalStorageLength = Object.getOwnPropertyDescriptor(Storage.prototype, 'length');
|
|
150
|
+
|
|
151
|
+
if (originalLocalStorageLength) {
|
|
152
|
+
Object.defineProperty(Storage.prototype, 'length', {
|
|
153
|
+
get() {
|
|
154
|
+
// Return actual length but ensure it's reasonable
|
|
155
|
+
const actualLength = originalLocalStorageLength.get.call(this);
|
|
156
|
+
return actualLength;
|
|
157
|
+
},
|
|
158
|
+
configurable: true,
|
|
159
|
+
enumerable: true
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
// 5. Override CacheStorage.keys()
|
|
165
|
+
const spoofCacheStorage = () => {
|
|
166
|
+
if ('caches' in window) {
|
|
167
|
+
const originalKeys = CacheStorage.prototype.keys;
|
|
168
|
+
const originalOpen = CacheStorage.prototype.open;
|
|
169
|
+
const originalHas = CacheStorage.prototype.has;
|
|
170
|
+
const originalDelete = CacheStorage.prototype.delete;
|
|
171
|
+
|
|
172
|
+
// Track caches opened in this session
|
|
173
|
+
const sessionCaches = new Set();
|
|
174
|
+
|
|
175
|
+
CacheStorage.prototype.open = function(cacheName) {
|
|
176
|
+
sessionCaches.add(cacheName);
|
|
177
|
+
return originalOpen.call(this, cacheName);
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
CacheStorage.prototype.keys = function() {
|
|
181
|
+
return originalKeys.call(this).then(keys => {
|
|
182
|
+
// Filter to only return caches that are expected
|
|
183
|
+
return keys.filter(key =>
|
|
184
|
+
sessionCaches.has(key) ||
|
|
185
|
+
// Allow common legitimate cache names
|
|
186
|
+
key.includes('workbox') ||
|
|
187
|
+
key.includes('runtime') ||
|
|
188
|
+
key.includes('precache') ||
|
|
189
|
+
key.includes('sw-') ||
|
|
190
|
+
key.includes('v1') ||
|
|
191
|
+
key.includes('v2')
|
|
192
|
+
);
|
|
193
|
+
});
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
CacheStorage.prototype.has = function(cacheName) {
|
|
197
|
+
// Be honest about caches that exist
|
|
198
|
+
return originalHas.call(this, cacheName);
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
// 6. Protect FileSystem API
|
|
204
|
+
const spoofFileSystemAPI = () => {
|
|
205
|
+
// Protect requestFileSystem if available
|
|
206
|
+
if (window.requestFileSystem || window.webkitRequestFileSystem) {
|
|
207
|
+
const originalRequestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
|
|
208
|
+
|
|
209
|
+
window.requestFileSystem = window.webkitRequestFileSystem = function(type, size, successCallback, errorCallback) {
|
|
210
|
+
// Allow the request but with controlled quota
|
|
211
|
+
const maxSize = 50 * 1024 * 1024; // 50MB max
|
|
212
|
+
const limitedSize = Math.min(size, maxSize);
|
|
213
|
+
|
|
214
|
+
return originalRequestFileSystem.call(
|
|
215
|
+
window,
|
|
216
|
+
type,
|
|
217
|
+
limitedSize,
|
|
218
|
+
successCallback,
|
|
219
|
+
errorCallback
|
|
220
|
+
);
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Protect StorageManager quota
|
|
225
|
+
if (navigator.storage && navigator.storage.estimate) {
|
|
226
|
+
// Already handled above
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
// 7. Cookie Store API protection
|
|
231
|
+
const spoofCookieStore = () => {
|
|
232
|
+
if ('cookieStore' in window) {
|
|
233
|
+
const originalGetAll = cookieStore.getAll;
|
|
234
|
+
const originalGet = cookieStore.get;
|
|
235
|
+
|
|
236
|
+
// Filter sensitive or fingerprinting cookies
|
|
237
|
+
const filterCookies = (cookies) => {
|
|
238
|
+
if (!Array.isArray(cookies)) return cookies;
|
|
239
|
+
|
|
240
|
+
return cookies.filter(cookie => {
|
|
241
|
+
// Allow legitimate cookies, filter suspicious ones
|
|
242
|
+
const name = cookie.name || '';
|
|
243
|
+
|
|
244
|
+
// Block known fingerprinting cookie patterns
|
|
245
|
+
if (name.includes('__fingerprint') ||
|
|
246
|
+
name.includes('_fp_') ||
|
|
247
|
+
name.includes('deviceId') ||
|
|
248
|
+
name.includes('browser_id')) {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return true;
|
|
253
|
+
});
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
cookieStore.getAll = function(options) {
|
|
257
|
+
return originalGetAll.call(this, options).then(filterCookies);
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
cookieStore.get = function(options) {
|
|
261
|
+
return originalGet.call(this, options).then(cookie => {
|
|
262
|
+
if (!cookie) return cookie;
|
|
263
|
+
const filtered = filterCookies([cookie]);
|
|
264
|
+
return filtered.length > 0 ? filtered[0] : null;
|
|
265
|
+
});
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
// 8. Web SQL Database protection (deprecated but still detected)
|
|
271
|
+
const spoofWebSQL = () => {
|
|
272
|
+
if (window.openDatabase) {
|
|
273
|
+
const originalOpenDatabase = window.openDatabase;
|
|
274
|
+
const openedDatabases = new Set();
|
|
275
|
+
|
|
276
|
+
window.openDatabase = function(name, version, displayName, estimatedSize) {
|
|
277
|
+
openedDatabases.add(name);
|
|
278
|
+
|
|
279
|
+
// Limit estimated size to prevent fingerprinting through quota
|
|
280
|
+
const limitedSize = Math.min(estimatedSize || 0, 5 * 1024 * 1024);
|
|
281
|
+
|
|
282
|
+
try {
|
|
283
|
+
return originalOpenDatabase.call(
|
|
284
|
+
window,
|
|
285
|
+
name,
|
|
286
|
+
version,
|
|
287
|
+
displayName,
|
|
288
|
+
limitedSize
|
|
289
|
+
);
|
|
290
|
+
} catch (e) {
|
|
291
|
+
// Web SQL is deprecated, return gracefully
|
|
292
|
+
throw e;
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
// 9. Broadcast Channel API protection
|
|
299
|
+
const spoofBroadcastChannel = () => {
|
|
300
|
+
if (typeof BroadcastChannel !== 'undefined') {
|
|
301
|
+
const OriginalBroadcastChannel = BroadcastChannel;
|
|
302
|
+
const channels = new Map();
|
|
303
|
+
|
|
304
|
+
window.BroadcastChannel = function(name) {
|
|
305
|
+
const channel = new OriginalBroadcastChannel(name);
|
|
306
|
+
|
|
307
|
+
// Track channel usage
|
|
308
|
+
if (!channels.has(name)) {
|
|
309
|
+
channels.set(name, []);
|
|
310
|
+
}
|
|
311
|
+
channels.get(name).push(channel);
|
|
312
|
+
|
|
313
|
+
return channel;
|
|
314
|
+
};
|
|
315
|
+
|
|
316
|
+
// Note: Don't assign to prototype - it may be frozen in modern Chrome
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
// 10. SharedWorker storage protection
|
|
321
|
+
const spoofSharedWorker = () => {
|
|
322
|
+
if (typeof SharedWorker !== 'undefined') {
|
|
323
|
+
const OriginalSharedWorker = SharedWorker;
|
|
324
|
+
const workers = new Set();
|
|
325
|
+
|
|
326
|
+
window.SharedWorker = function(scriptURL, options) {
|
|
327
|
+
const urlString = typeof scriptURL === 'string' ? scriptURL : scriptURL.toString();
|
|
328
|
+
workers.add(urlString);
|
|
329
|
+
|
|
330
|
+
return new OriginalSharedWorker(scriptURL, options);
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
// Note: Don't assign to prototype - it may be frozen in modern Chrome
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
// Initialize all storage protections
|
|
338
|
+
try {
|
|
339
|
+
spoofStorageEstimate();
|
|
340
|
+
spoofStoragePersist();
|
|
341
|
+
spoofIndexedDB();
|
|
342
|
+
spoofStorageQuota();
|
|
343
|
+
spoofCacheStorage();
|
|
344
|
+
spoofFileSystemAPI();
|
|
345
|
+
spoofCookieStore();
|
|
346
|
+
spoofWebSQL();
|
|
347
|
+
spoofBroadcastChannel();
|
|
348
|
+
spoofSharedWorker();
|
|
349
|
+
} catch (e) {
|
|
350
|
+
console.error('[STORAGE-CONSISTENCY] Failed to apply storage consistency:', e);
|
|
351
|
+
throw e; // Rethrow to make errors visible
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
|
|
355
|
+
const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
|
|
356
|
+
const ERROR_PREFIX = '[CDP-FP-ERROR]';
|
|
357
|
+
|
|
358
|
+
try {
|
|
359
|
+
console.log(DEBUG_PREFIX, 'Starting storage consistency...');
|
|
360
|
+
spoofStorageAPIs();
|
|
361
|
+
console.log(DEBUG_PREFIX, '✓ Storage consistency applied');
|
|
362
|
+
} catch (e) {
|
|
363
|
+
console.error(ERROR_PREFIX, '✗ Failed to apply storage consistency:', e);
|
|
364
|
+
throw e;
|
|
365
|
+
}
|
|
366
|
+
})();`;
|
|
367
|
+
};
|
|
368
|
+
//# sourceMappingURL=storage-consistency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-consistency.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/storage-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAW,EAAE;IACvD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiWL,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timing Consistency Module
|
|
3
|
+
* Dedicated timing fingerprint protection for 2024-2025
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Consistent Date.now() and performance.now() relationship
|
|
7
|
+
* - PerformanceEntry timing value protection
|
|
8
|
+
* - performance.measureUserAgentSpecificMemory() handling
|
|
9
|
+
* - event.timeStamp consistency in dispatched events
|
|
10
|
+
* - requestAnimationFrame timing patterns
|
|
11
|
+
*/
|
|
12
|
+
export declare const createTimingConsistencyScript: () => string;
|
|
13
|
+
//# sourceMappingURL=timing-consistency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing-consistency.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/timing-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,6BAA6B,QAAO,MAyahD,CAAC"}
|