diff --git a/sources/browser.py b/sources/browser.py index 2bb7b92..30415b0 100644 --- a/sources/browser.py +++ b/sources/browser.py @@ -172,16 +172,25 @@ def create_driver(headless=False, stealth_mode=True, crx_path="./crx/nopecha.crx ) return driver security_prefs = { - "profile.default_content_setting_values.media_stream": 2, - "profile.default_content_setting_values.geolocation": 2, - "profile.default_content_setting_values.notifications": 2, - "profile.default_content_setting_values.camera": 2, - "profile.default_content_setting_values.microphone": 2, + # Set all permissions to prompt (1=allow, 2=block, 0=prompt) + "profile.default_content_setting_values.geolocation": 0, + "profile.default_content_setting_values.notifications": 0, + "profile.default_content_setting_values.camera": 0, + "profile.default_content_setting_values.microphone": 0, + "profile.default_content_setting_values.midi_sysex": 0, + "profile.default_content_setting_values.clipboard": 0, + "profile.default_content_setting_values.media_stream": 0, + "profile.default_content_setting_values.background_sync": 0, + "profile.default_content_setting_values.sensors": 0, + "profile.default_content_setting_values.accessibility_events": 0, "safebrowsing.enabled": True, + "credentials_enable_service": False, + "profile.password_manager_enabled": False, "webkit.webprefs.accelerated_2d_canvas_enabled": True, "webkit.webprefs.force_dark_mode_enabled": False, - "webkit.webprefs.accelerated_2d_canvas_enabled": True, "webkit.webprefs.accelerated_2d_canvas_msaa_sample_count": 4, + "enable_webgl": True, + "enable_webgl2_compute_context": True } chrome_options.add_experimental_option("prefs", security_prefs) chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) @@ -688,15 +697,13 @@ class Browser: input_elements = self.driver.execute_script(script) if __name__ == "__main__": - driver = create_driver(headless=False, stealth_mode=False) + driver = create_driver(headless=False, stealth_mode=True) browser = Browser(driver, anticaptcha_manual_install=False) input("press enter to continue") print("AntiCaptcha / Form Test") - browser.go_to("https://browserleaks.com/webgl") - time.sleep(20) browser.go_to("https://bot.sannysoft.com/") - time.sleep(5) + time.sleep(50) browser.go_to("https://antoinevastel.com/bots/") time.sleep(5) #txt = browser.get_text() diff --git a/sources/web_scripts/spoofing.js b/sources/web_scripts/spoofing.js index 5d7ff89..96faf2b 100644 --- a/sources/web_scripts/spoofing.js +++ b/sources/web_scripts/spoofing.js @@ -4,6 +4,7 @@ Object.defineProperty(navigator, 'webdriver', {get: () => undefined}); delete window.cdc_adoQpoasnfa76pfcZLmcfl_Array; delete window.cdc_adoQpoasnfa76pfcZLmcfl_Promise; delete window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol; + Object.keys(window).forEach((key) => { if (key.includes("webdriver") || key.includes("selenium") || key.includes("driver")) { delete window[key]; @@ -174,21 +175,51 @@ Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'], }); -try { - const canvas = document.createElement('canvas'); - const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl'); - if (gl) { - const debugInfo = gl.getExtension('WEBGL_debug_renderer_info'); - Object.defineProperty(WebGLRenderingContext.prototype, 'getParameter', { - value: function(parameter) { - if (parameter === 37445) { // UNMASKED_VENDOR_WEBGL - return 'Intel Inc.'; - } - if (parameter === 37446) { // UNMASKED_RENDERER_WEBGL - return 'Intel Iris OpenGL Engine'; - } - return this.__proto__.getParameter(parameter); +const canvas = document.createElement('canvas'); +const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl'); + +if (gl) { + // Store original getParameter function + const originalGetParameter = gl.getParameter; + // Override getParameter to spoof values + gl.getParameter = function(parameter) { + // UNMASKED_VENDOR_WEBGL + if (parameter === 37445) return 'Intel Inc.'; + // UNMASKED_RENDERER_WEBGL + if (parameter === 37446) return 'Intel Iris Pro OpenGL Engine'; + // Other common fingerprint points + if (parameter === gl.VERSION) return 'WebGL 2.0 (OpenGL ES 3.0 Intel)'; + if (parameter === gl.SHADING_LANGUAGE_VERSION) return 'WebGL GLSL ES 3.00 (OpenGL ES GLSL ES 3.0)'; + + // Default to original behavior + return originalGetParameter.call(gl, parameter); + }; + + // Spoof debug renderer info extension + const debugInfo = { + getExtension: function(name) { + if (name === 'WEBGL_debug_renderer_info') { + return { + UNMASKED_VENDOR_WEBGL: 37445, + UNMASKED_RENDERER_WEBGL: 37446, + __proto__: WebGLExtension.prototype + }; } - }); - } -} catch(e) {} \ No newline at end of file + return null; + }, + __proto__: WebGLRenderingContext.prototype + }; + + // Override getExtension + const originalGetExtension = gl.getExtension; + gl.getExtension = function(name) { + if (name === 'WEBGL_debug_renderer_info') { + return debugInfo; + } + return originalGetExtension.call(gl, name); + }; + + // Freeze objects to prevent detection + Object.freeze(gl); + Object.freeze(debugInfo); +} \ No newline at end of file