Skip to main content

xcelerate_core/stealth/
mod.rs

1pub mod patcher;
2pub mod process;
3
4pub use patcher::BinaryPatcher;
5pub use process::{spawn_detached, ProcessRegistry};
6
7pub const STEALTH_JS: &str = r#"
8(() => {
9    // 1. Hide navigator.webdriver
10    const newProto = Object.getPrototypeOf(navigator);
11    delete newProto.webdriver;
12    Object.defineProperty(navigator, 'webdriver', {
13        get: () => undefined
14    });
15
16    // 2. Hide Chrome signals (CDC and others)
17    // Overriding the getter for the 'chrome' property if it exists
18    if (!window.chrome) {
19        Object.defineProperty(window, 'chrome', {
20            get: () => ({
21                runtime: {},
22                loadTimes: () => {},
23                csi: () => {},
24                app: {}
25            })
26        });
27    }
28
29    // 3. Mock plugins (scanners check for empty plugins list)
30    if (navigator.plugins.length === 0) {
31        Object.defineProperty(navigator, 'plugins', {
32            get: () => [
33                { name: 'Chrome PDF Viewer', filename: 'internal-pdf-viewer' },
34                { name: 'Chromium PDF Viewer', filename: 'internal-pdf-viewer' },
35                { name: 'Microsoft Edge PDF Viewer', filename: 'internal-pdf-viewer' },
36                { name: 'PDF Viewer', filename: 'internal-pdf-viewer' },
37                { name: 'WebKit built-in PDF', filename: 'internal-pdf-viewer' }
38            ]
39        });
40    }
41
42    // 4. Mock languages if missing
43    if (!navigator.languages || navigator.languages.length === 0) {
44        Object.defineProperty(navigator, 'languages', {
45            get: () => ['en-US', 'en']
46        });
47    }
48
49    // 5. Hide 'cdc_adoQtmxX78vj7j9v9Kw839' which chromedriver might leave behind
50    // We already patch the binary for this, but this is a runtime safeguard.
51    for (const prop in window) {
52        if (prop.startsWith('cdc_') || prop.startsWith('uniffi_')) {
53            delete window[prop];
54        }
55    }
56})();
57"#;