brave-real-playwright-core 1.57.0-patch.1 → 1.57.0-patch.11
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/README.md +2 -2
- package/advanced-stealth.js +99 -79
- package/package.json +6 -6
- package/stealth-injection.js +98 -78
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# 🦁 brave-real-playwright-core v1.57.0-patch.
|
|
1
|
+
# 🦁 brave-real-playwright-core v1.57.0-patch.11
|
|
2
2
|
|
|
3
3
|
**Based on Playwright Core v1.57.0**
|
|
4
4
|
|
|
@@ -48,7 +48,7 @@ await page.goto('https://bot-detector.rebrowser.net/');
|
|
|
48
48
|
|
|
49
49
|
- **playwright-core**: v1.57.0
|
|
50
50
|
- **rebrowser-patches**: Latest stealth optimizations
|
|
51
|
-
- **Brave optimization**: v1.57.0-patch.
|
|
51
|
+
- **Brave optimization**: v1.57.0-patch.11
|
|
52
52
|
|
|
53
53
|
## 🔗 Links
|
|
54
54
|
|
package/advanced-stealth.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
timingRange: '1-5ms',
|
|
6
6
|
stealthLevel: 'professional',
|
|
7
7
|
engine: 'playwright',
|
|
8
|
-
braveVersion: '1.57.0-patch.
|
|
8
|
+
braveVersion: '1.57.0-patch.11',
|
|
9
9
|
features: {
|
|
10
10
|
performanceOptimization: true,
|
|
11
11
|
navigatorSpoofing: true,
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
return Promise.resolve({
|
|
72
72
|
ok: true,
|
|
73
73
|
json: () => Promise.resolve([{
|
|
74
|
-
version: '
|
|
74
|
+
version: '144.0.7559.59',
|
|
75
75
|
time: new Date().toISOString()
|
|
76
76
|
}])
|
|
77
77
|
});
|
|
@@ -107,16 +107,11 @@
|
|
|
107
107
|
delete navigator.webdriver;
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
get: () => undefined,
|
|
113
|
-
set: () => {},
|
|
114
|
-
configurable: false,
|
|
115
|
-
enumerable: false
|
|
116
|
-
});
|
|
110
|
+
|
|
111
|
+
|
|
117
112
|
|
|
118
113
|
// Additional webdriver property variations
|
|
119
|
-
const webdriverProps = ['
|
|
114
|
+
const webdriverProps = ['__webdriver__', '_webdriver', 'webDriver'];
|
|
120
115
|
webdriverProps.forEach(prop => {
|
|
121
116
|
if (prop in navigator) {
|
|
122
117
|
delete navigator[prop];
|
|
@@ -485,29 +480,15 @@
|
|
|
485
480
|
|
|
486
481
|
// 4. BULLETPROOF USER AGENT STEALTH
|
|
487
482
|
|
|
488
|
-
// BULLETPROOF User Agent spoofing -
|
|
483
|
+
// BULLETPROOF User Agent spoofing - DYNAMIC VERSION: 144.0.7559.59
|
|
489
484
|
(function() {
|
|
490
|
-
// 🦁
|
|
491
|
-
const
|
|
492
|
-
|
|
493
|
-
const isChromeOptimized = process.env.REBROWSER_STEALTH_CHROME_OPTIMIZATIONS === '1' ||
|
|
494
|
-
process.env.REBROWSER_AUTO_BROWSER_TYPE === 'chrome';
|
|
485
|
+
// 🦁 DYNAMIC CHROME VERSION - Auto-synced with latest stable
|
|
486
|
+
const INJECTED_CHROME_VERSION = '144.0.7559.59';
|
|
487
|
+
const INJECTED_MAJOR_VERSION = '144';
|
|
495
488
|
|
|
496
|
-
//
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
// Brave-optimized user agent (maximum stealth)
|
|
500
|
-
bulletproofUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36';
|
|
501
|
-
console.log('[🦁 BRAVE-STEALTH] Brave browser optimizations active - maximum stealth mode');
|
|
502
|
-
} else if (isChromeOptimized) {
|
|
503
|
-
// Chrome-optimized user agent
|
|
504
|
-
bulletproofUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36';
|
|
505
|
-
console.log('[🔵 CHROME-STEALTH] Chrome browser optimizations active');
|
|
506
|
-
} else {
|
|
507
|
-
// Default fallback user agent
|
|
508
|
-
bulletproofUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36';
|
|
509
|
-
console.log('[⚙️ DEFAULT-STEALTH] Using default browser stealth mode');
|
|
510
|
-
}
|
|
489
|
+
// Dynamic user agent with latest Chrome version
|
|
490
|
+
const bulletproofUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.7559.59 Safari/537.36';
|
|
491
|
+
console.log('[🎯 DYNAMIC-STEALTH] Using Chrome version: ' + INJECTED_CHROME_VERSION);
|
|
511
492
|
|
|
512
493
|
// COMPLETELY override navigator.userAgent
|
|
513
494
|
Object.defineProperty(navigator, 'userAgent', {
|
|
@@ -518,43 +499,11 @@
|
|
|
518
499
|
|
|
519
500
|
// COMPLETELY override appVersion
|
|
520
501
|
Object.defineProperty(navigator, 'appVersion', {
|
|
521
|
-
get: () => '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/
|
|
502
|
+
get: () => '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.7559.59 Safari/537.36',
|
|
522
503
|
configurable: false,
|
|
523
504
|
enumerable: true
|
|
524
505
|
});
|
|
525
506
|
|
|
526
|
-
// BULLETPROOF webdriver property elimination
|
|
527
|
-
if ('webdriver' in navigator) {
|
|
528
|
-
delete navigator.webdriver;
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
// PREVENT webdriver property from being redefined
|
|
532
|
-
Object.defineProperty(navigator, 'webdriver', {
|
|
533
|
-
get: () => undefined,
|
|
534
|
-
set: () => {},
|
|
535
|
-
configurable: false,
|
|
536
|
-
enumerable: false
|
|
537
|
-
});
|
|
538
|
-
|
|
539
|
-
// OVERRIDE Object.getOwnPropertyDescriptor to hide our modifications
|
|
540
|
-
const originalGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
|
541
|
-
Object.getOwnPropertyDescriptor = function(obj, prop) {
|
|
542
|
-
if (obj === navigator && prop === 'webdriver') {
|
|
543
|
-
return undefined;
|
|
544
|
-
}
|
|
545
|
-
return originalGetOwnPropertyDescriptor.call(this, obj, prop);
|
|
546
|
-
};
|
|
547
|
-
|
|
548
|
-
// OVERRIDE Object.getOwnPropertyNames to hide webdriver
|
|
549
|
-
const originalGetOwnPropertyNames = Object.getOwnPropertyNames;
|
|
550
|
-
Object.getOwnPropertyNames = function(obj) {
|
|
551
|
-
const props = originalGetOwnPropertyNames.call(this, obj);
|
|
552
|
-
if (obj === navigator) {
|
|
553
|
-
return props.filter(prop => prop !== 'webdriver');
|
|
554
|
-
}
|
|
555
|
-
return props;
|
|
556
|
-
};
|
|
557
|
-
|
|
558
507
|
// BULLETPROOF platform detection
|
|
559
508
|
Object.defineProperty(navigator, 'platform', {
|
|
560
509
|
get: () => 'Win32',
|
|
@@ -587,13 +536,31 @@
|
|
|
587
536
|
});
|
|
588
537
|
})();
|
|
589
538
|
|
|
590
|
-
// Enhanced userAgentData with getHighEntropyValues method
|
|
591
|
-
|
|
592
|
-
|
|
539
|
+
// Enhanced userAgentData with getHighEntropyValues method - DYNAMIC VERSION
|
|
540
|
+
(function() {
|
|
541
|
+
const INJECTED_CHROME_VERSION = '144.0.7559.59';
|
|
542
|
+
const INJECTED_MAJOR_VERSION = '144';
|
|
543
|
+
|
|
544
|
+
// Aggressively delete existing userAgentData
|
|
545
|
+
try {
|
|
546
|
+
// Try to delete from prototype
|
|
547
|
+
if (Navigator.prototype.userAgentData) {
|
|
548
|
+
delete Navigator.prototype.userAgentData;
|
|
549
|
+
}
|
|
550
|
+
} catch (e) { console.log('[stealth] Failed to delete proto userAgentData:', e.message); }
|
|
551
|
+
|
|
552
|
+
try {
|
|
553
|
+
// Try to delete from instance
|
|
554
|
+
if (navigator.hasOwnProperty('userAgentData') || 'userAgentData' in navigator) {
|
|
555
|
+
delete navigator.userAgentData;
|
|
556
|
+
}
|
|
557
|
+
} catch (e) { console.log('[stealth] Failed to delete instance userAgentData:', e.message); }
|
|
558
|
+
|
|
559
|
+
const userAgentDataInstance = {
|
|
593
560
|
brands: [
|
|
594
|
-
{ brand: 'Not_A Brand', version: '
|
|
595
|
-
{ brand: 'Chromium', version:
|
|
596
|
-
{ brand: 'Google Chrome', version:
|
|
561
|
+
{ brand: 'Not_A Brand', version: '24' },
|
|
562
|
+
{ brand: 'Chromium', version: INJECTED_MAJOR_VERSION },
|
|
563
|
+
{ brand: 'Google Chrome', version: INJECTED_MAJOR_VERSION }
|
|
597
564
|
],
|
|
598
565
|
mobile: false,
|
|
599
566
|
platform: 'Windows',
|
|
@@ -601,23 +568,76 @@
|
|
|
601
568
|
return Promise.resolve({
|
|
602
569
|
architecture: 'x86',
|
|
603
570
|
bitness: '64',
|
|
604
|
-
brands:
|
|
571
|
+
brands: userAgentDataInstance.brands,
|
|
605
572
|
fullVersionList: [
|
|
606
|
-
{ brand: 'Not_A Brand', version:
|
|
607
|
-
{ brand: 'Chromium', version:
|
|
608
|
-
{ brand: 'Google Chrome', version:
|
|
573
|
+
{ brand: 'Not_A Brand', version: INJECTED_CHROME_VERSION },
|
|
574
|
+
{ brand: 'Chromium', version: INJECTED_CHROME_VERSION },
|
|
575
|
+
{ brand: 'Google Chrome', version: INJECTED_CHROME_VERSION }
|
|
609
576
|
],
|
|
610
577
|
mobile: false,
|
|
611
578
|
model: '',
|
|
612
579
|
platform: 'Windows',
|
|
613
580
|
platformVersion: '10.0.0',
|
|
614
|
-
uaFullVersion:
|
|
581
|
+
uaFullVersion: INJECTED_CHROME_VERSION
|
|
615
582
|
});
|
|
583
|
+
},
|
|
584
|
+
toJSON: function() {
|
|
585
|
+
return {
|
|
586
|
+
brands: this.brands,
|
|
587
|
+
mobile: this.mobile,
|
|
588
|
+
platform: this.platform
|
|
589
|
+
};
|
|
616
590
|
}
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
591
|
+
};
|
|
592
|
+
|
|
593
|
+
try {
|
|
594
|
+
// Define on INSTANCE directly (more reliable)
|
|
595
|
+
Object.defineProperty(navigator, 'userAgentData', {
|
|
596
|
+
get: () => userAgentDataInstance,
|
|
597
|
+
configurable: false,
|
|
598
|
+
enumerable: true
|
|
599
|
+
});
|
|
600
|
+
console.log('[stealth] userAgentData injected successfully on navigator instance');
|
|
601
|
+
} catch (e) {
|
|
602
|
+
console.error('[stealth] FAILED to inject userAgentData on instance:', e.message);
|
|
603
|
+
|
|
604
|
+
// Fallback to prototype
|
|
605
|
+
try {
|
|
606
|
+
Object.defineProperty(Navigator.prototype, 'userAgentData', {
|
|
607
|
+
get: () => userAgentDataInstance,
|
|
608
|
+
configurable: false,
|
|
609
|
+
enumerable: true
|
|
610
|
+
});
|
|
611
|
+
console.log('[stealth] userAgentData injected successfully on Navigator.prototype');
|
|
612
|
+
} catch (e2) {
|
|
613
|
+
console.error('[stealth] FAILED to inject userAgentData on prototype:', e2.message);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
// AGGRESSIVE: Proxy navigator if possible
|
|
618
|
+
try {
|
|
619
|
+
// Only if direct injection failed or to be double sure
|
|
620
|
+
if (!navigator.userAgentData) {
|
|
621
|
+
const originalNavigator = navigator;
|
|
622
|
+
const proxyNavigator = new Proxy(originalNavigator, {
|
|
623
|
+
get(target, prop) {
|
|
624
|
+
if (prop === 'userAgentData') return userAgentDataInstance;
|
|
625
|
+
if (prop === 'userAgent') return bulletproofUserAgent;
|
|
626
|
+
return Reflect.get(target, prop);
|
|
627
|
+
}
|
|
628
|
+
});
|
|
629
|
+
|
|
630
|
+
try {
|
|
631
|
+
Object.defineProperty(window, 'navigator', {
|
|
632
|
+
get: () => proxyNavigator,
|
|
633
|
+
configurable: true,
|
|
634
|
+
enumerable: true
|
|
635
|
+
});
|
|
636
|
+
console.log('[stealth] Window.navigator proxied successfully');
|
|
637
|
+
} catch(e) {}
|
|
638
|
+
}
|
|
639
|
+
} catch(e) {}
|
|
640
|
+
})();
|
|
621
641
|
|
|
622
642
|
|
|
623
643
|
console.log('[REBROWSER-STEALTH] ✅ Ultra-fast professional stealth mode activated');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "brave-real-playwright-core",
|
|
3
|
-
"version": "1.57.0-patch.
|
|
3
|
+
"version": "1.57.0-patch.11",
|
|
4
4
|
"description": "Brave-optimized Playwright Core (v1.57.0) with comprehensive stealth patches and error stack sanitization",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"playwright",
|
|
@@ -48,16 +48,16 @@
|
|
|
48
48
|
],
|
|
49
49
|
"brave": {
|
|
50
50
|
"optimized": true,
|
|
51
|
-
"version": "1.57.0-patch.
|
|
51
|
+
"version": "1.57.0-patch.11",
|
|
52
52
|
"basedOn": {
|
|
53
53
|
"playwright-core": "1.57.0",
|
|
54
|
-
"patches-version": "1.57.0-patch.
|
|
55
|
-
"release-info": "Brave Playwright v1.57.0-patch.
|
|
54
|
+
"patches-version": "1.57.0-patch.11",
|
|
55
|
+
"release-info": "Brave Playwright v1.57.0-patch.11 based on Playwright Core v1.57.0"
|
|
56
56
|
},
|
|
57
57
|
"versionInfo": {
|
|
58
|
-
"braveVersion": "1.57.0-patch.
|
|
58
|
+
"braveVersion": "1.57.0-patch.11",
|
|
59
59
|
"playwrightVersion": "1.57.0",
|
|
60
|
-
"fullName": "Brave Playwright Core v1.57.0-patch.
|
|
60
|
+
"fullName": "Brave Playwright Core v1.57.0-patch.11 (Playwright 1.57.0)"
|
|
61
61
|
},
|
|
62
62
|
"features": [
|
|
63
63
|
"error-stack-sanitization",
|
package/stealth-injection.js
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
return Promise.resolve({
|
|
36
36
|
ok: true,
|
|
37
37
|
json: () => Promise.resolve([{
|
|
38
|
-
version: '
|
|
38
|
+
version: '144.0.7559.59',
|
|
39
39
|
time: new Date().toISOString()
|
|
40
40
|
}])
|
|
41
41
|
});
|
|
@@ -71,16 +71,11 @@
|
|
|
71
71
|
delete navigator.webdriver;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
get: () => undefined,
|
|
77
|
-
set: () => {},
|
|
78
|
-
configurable: false,
|
|
79
|
-
enumerable: false
|
|
80
|
-
});
|
|
74
|
+
|
|
75
|
+
|
|
81
76
|
|
|
82
77
|
// Additional webdriver property variations
|
|
83
|
-
const webdriverProps = ['
|
|
78
|
+
const webdriverProps = ['__webdriver__', '_webdriver', 'webDriver'];
|
|
84
79
|
webdriverProps.forEach(prop => {
|
|
85
80
|
if (prop in navigator) {
|
|
86
81
|
delete navigator[prop];
|
|
@@ -449,29 +444,15 @@
|
|
|
449
444
|
|
|
450
445
|
// 4. BULLETPROOF USER AGENT STEALTH
|
|
451
446
|
|
|
452
|
-
// BULLETPROOF User Agent spoofing -
|
|
447
|
+
// BULLETPROOF User Agent spoofing - DYNAMIC VERSION: 144.0.7559.59
|
|
453
448
|
(function() {
|
|
454
|
-
// 🦁
|
|
455
|
-
const
|
|
456
|
-
|
|
457
|
-
const isChromeOptimized = process.env.REBROWSER_STEALTH_CHROME_OPTIMIZATIONS === '1' ||
|
|
458
|
-
process.env.REBROWSER_AUTO_BROWSER_TYPE === 'chrome';
|
|
449
|
+
// 🦁 DYNAMIC CHROME VERSION - Auto-synced with latest stable
|
|
450
|
+
const INJECTED_CHROME_VERSION = '144.0.7559.59';
|
|
451
|
+
const INJECTED_MAJOR_VERSION = '144';
|
|
459
452
|
|
|
460
|
-
//
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
// Brave-optimized user agent (maximum stealth)
|
|
464
|
-
bulletproofUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36';
|
|
465
|
-
console.log('[🦁 BRAVE-STEALTH] Brave browser optimizations active - maximum stealth mode');
|
|
466
|
-
} else if (isChromeOptimized) {
|
|
467
|
-
// Chrome-optimized user agent
|
|
468
|
-
bulletproofUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36';
|
|
469
|
-
console.log('[🔵 CHROME-STEALTH] Chrome browser optimizations active');
|
|
470
|
-
} else {
|
|
471
|
-
// Default fallback user agent
|
|
472
|
-
bulletproofUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36';
|
|
473
|
-
console.log('[⚙️ DEFAULT-STEALTH] Using default browser stealth mode');
|
|
474
|
-
}
|
|
453
|
+
// Dynamic user agent with latest Chrome version
|
|
454
|
+
const bulletproofUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.7559.59 Safari/537.36';
|
|
455
|
+
console.log('[🎯 DYNAMIC-STEALTH] Using Chrome version: ' + INJECTED_CHROME_VERSION);
|
|
475
456
|
|
|
476
457
|
// COMPLETELY override navigator.userAgent
|
|
477
458
|
Object.defineProperty(navigator, 'userAgent', {
|
|
@@ -482,43 +463,11 @@
|
|
|
482
463
|
|
|
483
464
|
// COMPLETELY override appVersion
|
|
484
465
|
Object.defineProperty(navigator, 'appVersion', {
|
|
485
|
-
get: () => '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/
|
|
466
|
+
get: () => '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.7559.59 Safari/537.36',
|
|
486
467
|
configurable: false,
|
|
487
468
|
enumerable: true
|
|
488
469
|
});
|
|
489
470
|
|
|
490
|
-
// BULLETPROOF webdriver property elimination
|
|
491
|
-
if ('webdriver' in navigator) {
|
|
492
|
-
delete navigator.webdriver;
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
// PREVENT webdriver property from being redefined
|
|
496
|
-
Object.defineProperty(navigator, 'webdriver', {
|
|
497
|
-
get: () => undefined,
|
|
498
|
-
set: () => {},
|
|
499
|
-
configurable: false,
|
|
500
|
-
enumerable: false
|
|
501
|
-
});
|
|
502
|
-
|
|
503
|
-
// OVERRIDE Object.getOwnPropertyDescriptor to hide our modifications
|
|
504
|
-
const originalGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
|
505
|
-
Object.getOwnPropertyDescriptor = function(obj, prop) {
|
|
506
|
-
if (obj === navigator && prop === 'webdriver') {
|
|
507
|
-
return undefined;
|
|
508
|
-
}
|
|
509
|
-
return originalGetOwnPropertyDescriptor.call(this, obj, prop);
|
|
510
|
-
};
|
|
511
|
-
|
|
512
|
-
// OVERRIDE Object.getOwnPropertyNames to hide webdriver
|
|
513
|
-
const originalGetOwnPropertyNames = Object.getOwnPropertyNames;
|
|
514
|
-
Object.getOwnPropertyNames = function(obj) {
|
|
515
|
-
const props = originalGetOwnPropertyNames.call(this, obj);
|
|
516
|
-
if (obj === navigator) {
|
|
517
|
-
return props.filter(prop => prop !== 'webdriver');
|
|
518
|
-
}
|
|
519
|
-
return props;
|
|
520
|
-
};
|
|
521
|
-
|
|
522
471
|
// BULLETPROOF platform detection
|
|
523
472
|
Object.defineProperty(navigator, 'platform', {
|
|
524
473
|
get: () => 'Win32',
|
|
@@ -551,13 +500,31 @@
|
|
|
551
500
|
});
|
|
552
501
|
})();
|
|
553
502
|
|
|
554
|
-
// Enhanced userAgentData with getHighEntropyValues method
|
|
555
|
-
|
|
556
|
-
|
|
503
|
+
// Enhanced userAgentData with getHighEntropyValues method - DYNAMIC VERSION
|
|
504
|
+
(function() {
|
|
505
|
+
const INJECTED_CHROME_VERSION = '144.0.7559.59';
|
|
506
|
+
const INJECTED_MAJOR_VERSION = '144';
|
|
507
|
+
|
|
508
|
+
// Aggressively delete existing userAgentData
|
|
509
|
+
try {
|
|
510
|
+
// Try to delete from prototype
|
|
511
|
+
if (Navigator.prototype.userAgentData) {
|
|
512
|
+
delete Navigator.prototype.userAgentData;
|
|
513
|
+
}
|
|
514
|
+
} catch (e) { console.log('[stealth] Failed to delete proto userAgentData:', e.message); }
|
|
515
|
+
|
|
516
|
+
try {
|
|
517
|
+
// Try to delete from instance
|
|
518
|
+
if (navigator.hasOwnProperty('userAgentData') || 'userAgentData' in navigator) {
|
|
519
|
+
delete navigator.userAgentData;
|
|
520
|
+
}
|
|
521
|
+
} catch (e) { console.log('[stealth] Failed to delete instance userAgentData:', e.message); }
|
|
522
|
+
|
|
523
|
+
const userAgentDataInstance = {
|
|
557
524
|
brands: [
|
|
558
|
-
{ brand: 'Not_A Brand', version: '
|
|
559
|
-
{ brand: 'Chromium', version:
|
|
560
|
-
{ brand: 'Google Chrome', version:
|
|
525
|
+
{ brand: 'Not_A Brand', version: '24' },
|
|
526
|
+
{ brand: 'Chromium', version: INJECTED_MAJOR_VERSION },
|
|
527
|
+
{ brand: 'Google Chrome', version: INJECTED_MAJOR_VERSION }
|
|
561
528
|
],
|
|
562
529
|
mobile: false,
|
|
563
530
|
platform: 'Windows',
|
|
@@ -565,23 +532,76 @@
|
|
|
565
532
|
return Promise.resolve({
|
|
566
533
|
architecture: 'x86',
|
|
567
534
|
bitness: '64',
|
|
568
|
-
brands:
|
|
535
|
+
brands: userAgentDataInstance.brands,
|
|
569
536
|
fullVersionList: [
|
|
570
|
-
{ brand: 'Not_A Brand', version:
|
|
571
|
-
{ brand: 'Chromium', version:
|
|
572
|
-
{ brand: 'Google Chrome', version:
|
|
537
|
+
{ brand: 'Not_A Brand', version: INJECTED_CHROME_VERSION },
|
|
538
|
+
{ brand: 'Chromium', version: INJECTED_CHROME_VERSION },
|
|
539
|
+
{ brand: 'Google Chrome', version: INJECTED_CHROME_VERSION }
|
|
573
540
|
],
|
|
574
541
|
mobile: false,
|
|
575
542
|
model: '',
|
|
576
543
|
platform: 'Windows',
|
|
577
544
|
platformVersion: '10.0.0',
|
|
578
|
-
uaFullVersion:
|
|
545
|
+
uaFullVersion: INJECTED_CHROME_VERSION
|
|
579
546
|
});
|
|
547
|
+
},
|
|
548
|
+
toJSON: function() {
|
|
549
|
+
return {
|
|
550
|
+
brands: this.brands,
|
|
551
|
+
mobile: this.mobile,
|
|
552
|
+
platform: this.platform
|
|
553
|
+
};
|
|
580
554
|
}
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
555
|
+
};
|
|
556
|
+
|
|
557
|
+
try {
|
|
558
|
+
// Define on INSTANCE directly (more reliable)
|
|
559
|
+
Object.defineProperty(navigator, 'userAgentData', {
|
|
560
|
+
get: () => userAgentDataInstance,
|
|
561
|
+
configurable: false,
|
|
562
|
+
enumerable: true
|
|
563
|
+
});
|
|
564
|
+
console.log('[stealth] userAgentData injected successfully on navigator instance');
|
|
565
|
+
} catch (e) {
|
|
566
|
+
console.error('[stealth] FAILED to inject userAgentData on instance:', e.message);
|
|
567
|
+
|
|
568
|
+
// Fallback to prototype
|
|
569
|
+
try {
|
|
570
|
+
Object.defineProperty(Navigator.prototype, 'userAgentData', {
|
|
571
|
+
get: () => userAgentDataInstance,
|
|
572
|
+
configurable: false,
|
|
573
|
+
enumerable: true
|
|
574
|
+
});
|
|
575
|
+
console.log('[stealth] userAgentData injected successfully on Navigator.prototype');
|
|
576
|
+
} catch (e2) {
|
|
577
|
+
console.error('[stealth] FAILED to inject userAgentData on prototype:', e2.message);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// AGGRESSIVE: Proxy navigator if possible
|
|
582
|
+
try {
|
|
583
|
+
// Only if direct injection failed or to be double sure
|
|
584
|
+
if (!navigator.userAgentData) {
|
|
585
|
+
const originalNavigator = navigator;
|
|
586
|
+
const proxyNavigator = new Proxy(originalNavigator, {
|
|
587
|
+
get(target, prop) {
|
|
588
|
+
if (prop === 'userAgentData') return userAgentDataInstance;
|
|
589
|
+
if (prop === 'userAgent') return bulletproofUserAgent;
|
|
590
|
+
return Reflect.get(target, prop);
|
|
591
|
+
}
|
|
592
|
+
});
|
|
593
|
+
|
|
594
|
+
try {
|
|
595
|
+
Object.defineProperty(window, 'navigator', {
|
|
596
|
+
get: () => proxyNavigator,
|
|
597
|
+
configurable: true,
|
|
598
|
+
enumerable: true
|
|
599
|
+
});
|
|
600
|
+
console.log('[stealth] Window.navigator proxied successfully');
|
|
601
|
+
} catch(e) {}
|
|
602
|
+
}
|
|
603
|
+
} catch(e) {}
|
|
604
|
+
})();
|
|
585
605
|
|
|
586
606
|
|
|
587
607
|
console.log('[REBROWSER-STEALTH] ✅ Ultra-fast professional stealth mode activated');
|