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
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prototype Integrity Module
|
|
3
|
+
*
|
|
4
|
+
* Ensures all property overrides are undetectable by:
|
|
5
|
+
* - Making overridden properties appear native (configurable: false)
|
|
6
|
+
* - Hiding modified property descriptors from Object.getOwnPropertyDescriptor
|
|
7
|
+
* - Protecting prototype chains from Object.getPrototypeOf inspection
|
|
8
|
+
* - Masking shadow properties from enumeration
|
|
9
|
+
*
|
|
10
|
+
* This module MUST be injected FIRST, before any other fingerprint overrides.
|
|
11
|
+
*/
|
|
12
|
+
export const createPrototypeIntegrityScript = () => {
|
|
13
|
+
return `
|
|
14
|
+
(() => {
|
|
15
|
+
'use strict';
|
|
16
|
+
|
|
17
|
+
// Skip if already initialized
|
|
18
|
+
if (window.__PROTOTYPE_INTEGRITY_INITIALIZED__) return;
|
|
19
|
+
window.__PROTOTYPE_INTEGRITY_INITIALIZED__ = true;
|
|
20
|
+
|
|
21
|
+
// ============================================
|
|
22
|
+
// PROTOTYPE INTEGRITY - Hide All Overrides
|
|
23
|
+
// ============================================
|
|
24
|
+
|
|
25
|
+
// Shadow maps to track original descriptors and overrides
|
|
26
|
+
const originalDescriptors = new WeakMap(); // obj -> Map<prop, originalDescriptor>
|
|
27
|
+
const overriddenProperties = new WeakMap(); // obj -> Set<prop>
|
|
28
|
+
const fakeDescriptors = new WeakMap(); // obj -> Map<prop, fakeDescriptor>
|
|
29
|
+
|
|
30
|
+
// Cache original functions BEFORE any modifications
|
|
31
|
+
const _Object = Object;
|
|
32
|
+
const _Reflect = Reflect;
|
|
33
|
+
const _getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
|
34
|
+
const _getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors;
|
|
35
|
+
const _getPrototypeOf = Object.getPrototypeOf;
|
|
36
|
+
const _defineProperty = Object.defineProperty;
|
|
37
|
+
const _getOwnPropertyNames = Object.getOwnPropertyNames;
|
|
38
|
+
const _keys = Object.keys;
|
|
39
|
+
const _hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
40
|
+
const _ReflectGetOwnPropertyDescriptor = Reflect.getOwnPropertyDescriptor;
|
|
41
|
+
const _ReflectDefineProperty = Reflect.defineProperty;
|
|
42
|
+
const _ReflectOwnKeys = Reflect.ownKeys;
|
|
43
|
+
const _ReflectGet = Reflect.get;
|
|
44
|
+
const _ReflectHas = Reflect.has;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Register a property as overridden and cache its original descriptor
|
|
48
|
+
*/
|
|
49
|
+
const registerOverride = (obj, prop, originalDescriptor) => {
|
|
50
|
+
if (!originalDescriptors.has(obj)) {
|
|
51
|
+
originalDescriptors.set(obj, new Map());
|
|
52
|
+
}
|
|
53
|
+
if (!overriddenProperties.has(obj)) {
|
|
54
|
+
overriddenProperties.set(obj, new Set());
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const objDescriptors = originalDescriptors.get(obj);
|
|
58
|
+
const objOverrides = overriddenProperties.get(obj);
|
|
59
|
+
|
|
60
|
+
// Only cache original if not already cached
|
|
61
|
+
if (!objDescriptors.has(prop) && originalDescriptor) {
|
|
62
|
+
objDescriptors.set(prop, originalDescriptor);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
objOverrides.add(prop);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Check if a property has been overridden
|
|
70
|
+
*/
|
|
71
|
+
const isOverridden = (obj, prop) => {
|
|
72
|
+
const objOverrides = overriddenProperties.get(obj);
|
|
73
|
+
return objOverrides ? objOverrides.has(prop) : false;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Get the original descriptor for an overridden property
|
|
78
|
+
*/
|
|
79
|
+
const getOriginalDescriptor = (obj, prop) => {
|
|
80
|
+
const objDescriptors = originalDescriptors.get(obj);
|
|
81
|
+
return objDescriptors ? objDescriptors.get(prop) : undefined;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Create a native-like descriptor that hides the override
|
|
86
|
+
*/
|
|
87
|
+
const createNativeDescriptor = (obj, prop, actualDescriptor) => {
|
|
88
|
+
const original = getOriginalDescriptor(obj, prop);
|
|
89
|
+
|
|
90
|
+
if (original) {
|
|
91
|
+
// Return a descriptor that looks like the original
|
|
92
|
+
// but actually uses our getter/setter
|
|
93
|
+
return {
|
|
94
|
+
configurable: original.configurable !== undefined ? original.configurable : false,
|
|
95
|
+
enumerable: original.enumerable !== undefined ? original.enumerable : true,
|
|
96
|
+
get: actualDescriptor?.get,
|
|
97
|
+
set: actualDescriptor?.set,
|
|
98
|
+
value: actualDescriptor?.value,
|
|
99
|
+
writable: original.writable
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Default: make it look like a native property
|
|
104
|
+
if (actualDescriptor?.get || actualDescriptor?.set) {
|
|
105
|
+
return {
|
|
106
|
+
configurable: false,
|
|
107
|
+
enumerable: true,
|
|
108
|
+
get: actualDescriptor.get,
|
|
109
|
+
set: actualDescriptor.set
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
configurable: false,
|
|
115
|
+
enumerable: true,
|
|
116
|
+
writable: false,
|
|
117
|
+
value: actualDescriptor?.value
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Set a fake descriptor to return for getOwnPropertyDescriptor
|
|
123
|
+
*/
|
|
124
|
+
const setFakeDescriptor = (obj, prop, descriptor) => {
|
|
125
|
+
if (!fakeDescriptors.has(obj)) {
|
|
126
|
+
fakeDescriptors.set(obj, new Map());
|
|
127
|
+
}
|
|
128
|
+
fakeDescriptors.get(obj).set(prop, descriptor);
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Override a property with native-like appearance
|
|
133
|
+
* This is the main function other modules should use
|
|
134
|
+
*/
|
|
135
|
+
const overridePropertyNative = (obj, prop, descriptor) => {
|
|
136
|
+
// Cache original descriptor first
|
|
137
|
+
const originalDescriptor = _getOwnPropertyDescriptor.call(_Object, obj, prop);
|
|
138
|
+
registerOverride(obj, prop, originalDescriptor);
|
|
139
|
+
|
|
140
|
+
// Apply the actual override
|
|
141
|
+
try {
|
|
142
|
+
_defineProperty.call(_Object, obj, prop, {
|
|
143
|
+
...descriptor,
|
|
144
|
+
configurable: true // We need this to work, but will fake it
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Set up the fake descriptor to return
|
|
148
|
+
const fakeDesc = createNativeDescriptor(obj, prop, descriptor);
|
|
149
|
+
setFakeDescriptor(obj, prop, fakeDesc);
|
|
150
|
+
|
|
151
|
+
return true;
|
|
152
|
+
} catch (e) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Override Object.getOwnPropertyDescriptor to hide our modifications
|
|
159
|
+
*/
|
|
160
|
+
const patchGetOwnPropertyDescriptor = () => {
|
|
161
|
+
_defineProperty.call(_Object, _Object, 'getOwnPropertyDescriptor', {
|
|
162
|
+
value: function(obj, prop) {
|
|
163
|
+
// Check if we have a fake descriptor for this property
|
|
164
|
+
const objFakes = fakeDescriptors.get(obj);
|
|
165
|
+
if (objFakes && objFakes.has(prop)) {
|
|
166
|
+
const fake = objFakes.get(prop);
|
|
167
|
+
// Return a copy to prevent modification
|
|
168
|
+
return { ...fake };
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Otherwise return the real descriptor
|
|
172
|
+
return _getOwnPropertyDescriptor.call(_Object, obj, prop);
|
|
173
|
+
},
|
|
174
|
+
writable: true,
|
|
175
|
+
configurable: true
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
// Also patch Reflect.getOwnPropertyDescriptor
|
|
179
|
+
if (_Reflect && _ReflectGetOwnPropertyDescriptor) {
|
|
180
|
+
_defineProperty.call(_Object, _Reflect, 'getOwnPropertyDescriptor', {
|
|
181
|
+
value: function(obj, prop) {
|
|
182
|
+
const objFakes = fakeDescriptors.get(obj);
|
|
183
|
+
if (objFakes && objFakes.has(prop)) {
|
|
184
|
+
return { ...objFakes.get(prop) };
|
|
185
|
+
}
|
|
186
|
+
return _ReflectGetOwnPropertyDescriptor.call(_Reflect, obj, prop);
|
|
187
|
+
},
|
|
188
|
+
writable: true,
|
|
189
|
+
configurable: true
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Override Object.getOwnPropertyDescriptors to use our patched version
|
|
196
|
+
*/
|
|
197
|
+
const patchGetOwnPropertyDescriptors = () => {
|
|
198
|
+
_defineProperty.call(_Object, _Object, 'getOwnPropertyDescriptors', {
|
|
199
|
+
value: function(obj) {
|
|
200
|
+
const result = {};
|
|
201
|
+
const props = _getOwnPropertyNames.call(_Object, obj);
|
|
202
|
+
|
|
203
|
+
for (const prop of props) {
|
|
204
|
+
// Use our patched getOwnPropertyDescriptor
|
|
205
|
+
const desc = _Object.getOwnPropertyDescriptor(obj, prop);
|
|
206
|
+
if (desc) {
|
|
207
|
+
result[prop] = desc;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Also include symbol properties
|
|
212
|
+
const symbols = _Object.getOwnPropertySymbols ? _Object.getOwnPropertySymbols(obj) : [];
|
|
213
|
+
for (const sym of symbols) {
|
|
214
|
+
const desc = _Object.getOwnPropertyDescriptor(obj, sym);
|
|
215
|
+
if (desc) {
|
|
216
|
+
result[sym] = desc;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
return result;
|
|
221
|
+
},
|
|
222
|
+
writable: true,
|
|
223
|
+
configurable: true
|
|
224
|
+
});
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Protect prototype chain inspection
|
|
229
|
+
*/
|
|
230
|
+
const patchGetPrototypeOf = () => {
|
|
231
|
+
// Store original prototypes before any modification
|
|
232
|
+
const originalPrototypes = new WeakMap();
|
|
233
|
+
|
|
234
|
+
// We don't modify Object.getPrototypeOf because we want prototypes to look normal
|
|
235
|
+
// But we can use this to verify prototype chains are intact
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Patch Object.keys to filter automation properties
|
|
240
|
+
*/
|
|
241
|
+
const patchObjectKeys = () => {
|
|
242
|
+
const automationProps = new Set([
|
|
243
|
+
'webdriver', '__webdriver_evaluate', '__selenium_evaluate',
|
|
244
|
+
'__driver_evaluate', '__webdriver_script_function',
|
|
245
|
+
'__webdriver_script_fn', '__fxdriver_evaluate',
|
|
246
|
+
'__webdriver_unwrapped', '$cdc_', 'cdc_'
|
|
247
|
+
]);
|
|
248
|
+
|
|
249
|
+
_defineProperty.call(_Object, _Object, 'keys', {
|
|
250
|
+
value: function(obj) {
|
|
251
|
+
const keys = _keys.call(_Object, obj);
|
|
252
|
+
return keys.filter(key => {
|
|
253
|
+
const keyStr = String(key).toLowerCase();
|
|
254
|
+
for (const autoProp of automationProps) {
|
|
255
|
+
if (keyStr.includes(autoProp.toLowerCase())) {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return true;
|
|
260
|
+
});
|
|
261
|
+
},
|
|
262
|
+
writable: true,
|
|
263
|
+
configurable: true
|
|
264
|
+
});
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Patch Object.getOwnPropertyNames to filter automation properties
|
|
269
|
+
*/
|
|
270
|
+
const patchGetOwnPropertyNames = () => {
|
|
271
|
+
const automationProps = new Set([
|
|
272
|
+
'webdriver', '__webdriver_evaluate', '__selenium_evaluate',
|
|
273
|
+
'__driver_evaluate', '__webdriver_script_function',
|
|
274
|
+
'__webdriver_script_fn', '__fxdriver_evaluate',
|
|
275
|
+
'__webdriver_unwrapped', '$cdc_', 'cdc_', '__puppeteer',
|
|
276
|
+
'__playwright'
|
|
277
|
+
]);
|
|
278
|
+
|
|
279
|
+
_defineProperty.call(_Object, _Object, 'getOwnPropertyNames', {
|
|
280
|
+
value: function(obj) {
|
|
281
|
+
const names = _getOwnPropertyNames.call(_Object, obj);
|
|
282
|
+
return names.filter(name => {
|
|
283
|
+
const nameStr = String(name).toLowerCase();
|
|
284
|
+
for (const autoProp of automationProps) {
|
|
285
|
+
if (nameStr.includes(autoProp.toLowerCase())) {
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return true;
|
|
290
|
+
});
|
|
291
|
+
},
|
|
292
|
+
writable: true,
|
|
293
|
+
configurable: true
|
|
294
|
+
});
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Patch Reflect.ownKeys to filter automation properties
|
|
299
|
+
*/
|
|
300
|
+
const patchReflectOwnKeys = () => {
|
|
301
|
+
if (!_Reflect || !_ReflectOwnKeys) return;
|
|
302
|
+
|
|
303
|
+
const automationProps = new Set([
|
|
304
|
+
'webdriver', '__webdriver', '__selenium', '__driver',
|
|
305
|
+
'__puppeteer', '__playwright', '$cdc_', 'cdc_'
|
|
306
|
+
]);
|
|
307
|
+
|
|
308
|
+
_defineProperty.call(_Object, _Reflect, 'ownKeys', {
|
|
309
|
+
value: function(obj) {
|
|
310
|
+
const keys = _ReflectOwnKeys.call(_Reflect, obj);
|
|
311
|
+
return keys.filter(key => {
|
|
312
|
+
const keyStr = String(key).toLowerCase();
|
|
313
|
+
for (const autoProp of automationProps) {
|
|
314
|
+
if (keyStr.includes(autoProp.toLowerCase())) {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return true;
|
|
319
|
+
});
|
|
320
|
+
},
|
|
321
|
+
writable: true,
|
|
322
|
+
configurable: true
|
|
323
|
+
});
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Initialize all prototype integrity patches
|
|
328
|
+
*/
|
|
329
|
+
const initialize = () => {
|
|
330
|
+
patchGetOwnPropertyDescriptor();
|
|
331
|
+
patchGetOwnPropertyDescriptors();
|
|
332
|
+
patchGetPrototypeOf();
|
|
333
|
+
patchObjectKeys();
|
|
334
|
+
patchGetOwnPropertyNames();
|
|
335
|
+
patchReflectOwnKeys();
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
// Initialize immediately
|
|
339
|
+
initialize();
|
|
340
|
+
|
|
341
|
+
// Export utilities for use by other modules
|
|
342
|
+
window.__prototypeIntegrity__ = {
|
|
343
|
+
registerOverride,
|
|
344
|
+
isOverridden,
|
|
345
|
+
getOriginalDescriptor,
|
|
346
|
+
setFakeDescriptor,
|
|
347
|
+
overridePropertyNative,
|
|
348
|
+
createNativeDescriptor
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
console.log('[CDP-FP-DEBUG] ✓ Prototype integrity initialized');
|
|
352
|
+
})();
|
|
353
|
+
`;
|
|
354
|
+
};
|
|
355
|
+
//# sourceMappingURL=prototype-integrity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prototype-integrity.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/prototype-integrity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAW,EAAE;IACvD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoVV,CAAC;AACF,CAAC,CAAC"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Runtime.enable Bypass
|
|
3
|
-
* Prevents CDP detection through console.log(Error) technique
|
|
2
|
+
* Runtime.enable Bypass Script
|
|
3
|
+
* Prevents CDP detection through console.log(Error) technique and stack trace analysis.
|
|
4
|
+
*
|
|
5
|
+
* IMPORTANT: This is now a SCRIPT to be injected via addScriptToEvaluateOnNewDocument,
|
|
6
|
+
* NOT via Runtime.evaluate (which would defeat the purpose since Runtime.evaluate IS detectable!)
|
|
7
|
+
*
|
|
8
|
+
* Enhanced 2024-2025: Comprehensive stack trace sanitization that removes ALL CDP markers
|
|
4
9
|
*/
|
|
5
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Creates the runtime enable bypass script that should be bundled with other stealth scripts.
|
|
12
|
+
* This script runs BEFORE page JavaScript and patches Error/console to hide CDP markers.
|
|
13
|
+
*/
|
|
14
|
+
export declare const createRuntimeEnableBypassScript: () => string;
|
|
6
15
|
//# sourceMappingURL=runtime-enable-bypass.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-enable-bypass.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/runtime-enable-bypass.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"runtime-enable-bypass.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/runtime-enable-bypass.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,eAAO,MAAM,+BAA+B,QAAO,MAmQlD,CAAC"}
|