Fingerprint Isolation Overview
Relevant source files
The following files were used as context for generating this wiki page:
The Fingerprint Isolation system is a core feature of GeekEZ Browser, designed to create unique and consistent browser environments for each profile. Its primary purpose is to prevent cross-profile tracking and bypass advanced anti-bot detection systems used by platforms like Cloudflare. This is achieved by randomizing key hardware and software attributes, and then injecting these spoofed values at runtime using a combination of Chromium launch arguments and a dedicated content script.
The strategy focuses on "Native Consistency," which means it avoids easily detectable JavaScript hooks in favor of more robust methods. This includes generating a custom extension for each profile launch, which applies the fingerprint modifications in an isolated world (MAIN) at the very beginning of document creation (document_start). This ensures the fingerprint is stable and appears authentic to detection scripts.
Sources: README.md, main.js:103-112, fingerprint.js:102-109
Architecture
The fingerprinting architecture involves three main stages: Generation, Injection, and Management. The process begins when a user creates a new profile and culminates in a launched browser instance with a completely isolated and unique fingerprint.
The following diagram illustrates the high-level data flow for fingerprint generation and application.
This diagram shows the flow from user action in the UI to the main process handling fingerprint generation and storage, and finally to the browser launch sequence where the fingerprint is injected.
Sources: renderer.js:636-646, main.js:256-263, 350-455
Fingerprint Generation
When a new profile is created without a pre-existing fingerprint, the generateFingerprint() function is invoked to create a new set of unique identifiers. This function randomizes several key parameters to ensure each profile is distinct.
Sources: main.js:258, fingerprint.js:10-100
Generated Parameters
The following table details the parameters that are automatically generated for each new profile.
| Parameter | Randomized Values | Description |
|---|---|---|
| Hardware | hardwareConcurrency: 4, 8, 12, or 16deviceMemory: 4, 8, or 16 GB | Simulates different CPU core counts and RAM sizes. |
| Screen Resolution | 1920x1080, 2560x1440, 1366x768, 1536x864, 1440x900 | A random resolution is selected from a predefined list. |
| Canvas Noise | Small random integer values for R, G, B, A channels | Adds subtle noise to canvas rendering to create a unique hash. |
| Audio Noise | A small random float value | Adds noise to the AudioBuffer to create a unique audio fingerprint. |
| Noise Seed | A large random integer | Used as a seed for applying canvas noise consistently within a session. |
| User Agent | Based on host OS (Win, Mac, Linux) and a fixed Chrome version | The User-Agent string is constructed to match the host operating system. |
| Timezone | Defaults to America/Los_Angeles | Can be overridden by the user during profile creation or editing. |
Sources: fingerprint.js:4-7, 89-96, CHANGELOG_v1.2.3.md
Fingerprint Object Structure
The generated data is stored in a fingerprint object within the profile's entry in profiles.json.
This diagram shows the relationship between a Profile and its associated Fingerprint object.
Sources: main.js:259-262, fingerprint.js:78-98
Fingerprint Injection
The application of the fingerprint is a multi-step process that occurs when a profile is launched. It uses a combination of Puppeteer launch arguments and a dynamically generated browser extension.
Launch Sequence
The following sequence diagram details the interactions during a profile launch.
This diagram shows that main.js first creates a custom extension and then launches the browser via Puppeteer, passing arguments for native settings and loading the extension to handle JavaScript-level modifications.
Sources: main.js:103-112, 350-455
Injection Methods
GeekEZ Browser uses two primary methods for fingerprint injection:
-
Chromium Launch Arguments: For native browser properties that can be set at startup. This is the preferred method as it's less detectable.
--proxy-server: Sets the network proxy.--window-size: Sets the initial window dimensions.--lang: Sets thenavigator.language.--load-extension: Loads the custom "GeekEZ Guard" extension and any user-added extensions.--force-webrtc-ip-handling-policy=disable_non_proxied_udp: Prevents WebRTC IP leaks.
Sources: main.js:424-445
-
Content Script Injection: For properties that must be modified within the JavaScript environment of a web page. This is handled by a dynamically generated extension named "GeekEZ Guard". The script runs at
document_startin theMAINworld to apply changes before any page scripts can execute.- Timezone Spoofing: Hooks
Intl.DateTimeFormatandDate.prototype.getTimezoneOffsetto report the profile's specified timezone. - Canvas/Audio Noise: Overrides
getImageDataandgetChannelDatato inject subtle, unique noise. - WebRTC Protection: Wraps the
RTCPeerConnectionconstructor to enforce arelaypolicy, further preventing IP leaks. - WebDriver Spoofing: Sets
navigator.webdrivertofalse.
Sources: main.js:103-112, fingerprint.js:102-205
- Timezone Spoofing: Hooks
Spoofed Parameters Deep Dive
Hardware and OS
- CPU & Memory: Randomized values for
navigator.hardwareConcurrencyandnavigator.deviceMemoryare generated. These are applied via the injected content script. - Platform: The
navigator.platformand User-Agent Client Hints (navigator.userAgentData) are set to match the host operating system (Windows, macOS, or Linux) to ensure consistency.
Sources: fingerprint.js:11-40, 90-91
Graphics and Media
- Canvas: The
CanvasRenderingContext2D.prototype.getImageDatamethod is patched. It adds a small, seeded random value to the alpha channel of specific pixels, which alters the resulting hash of the canvas image without creating visible artifacts. - WebGL: The WebGL vendor and renderer strings are currently hardcoded to
Google Inc. (NVIDIA)andANGLE (NVIDIA)respectively. - AudioContext: The
AudioBuffer.prototype.getChannelDatamethod is patched to add a very small random value to the audio buffer data, creating a unique audio fingerprint.
Sources: fingerprint.js:43-45, 160-184
Timezone and Geolocation
- Timezone: This is one of the most complex spoofs. The system hooks multiple
DateandIntlmethods to consistently report the timezone specified in the profile. This includesIntl.DateTimeFormat,Date.prototype.getTimezoneOffset, andDate.prototype.toString. The timezone can be set by the user in the profile creation/edit modal. - Geolocation: While not explicitly spoofed in
fingerprint.js, the tight integration with a proxy server means that any geolocation checks based on IP address will reflect the proxy's location.
Sources: fingerprint.js:113-158, renderer.js:639, 701
WebRTC
WebRTC IP leakage is prevented through two layers of protection:
- Native Policy: The
--force-webrtc-ip-handling-policy=disable_non_proxied_udplaunch argument provides a strong, native block. - JS-Level Reinforcement: The
RTCPeerConnectionconstructor is patched to force theiceTransportPolicytorelay, ensuring that even if a connection is attempted, it cannot use local network candidates to reveal the real IP address.
Sources: main.js:434, fingerprint.js:186-194
Conclusion
The Fingerprint Isolation system in GeekEZ Browser is a sophisticated mechanism that combines native browser controls with carefully crafted JavaScript injections to create highly unique and isolated browsing environments. By focusing on "Native Consistency" and generating a wide range of randomized parameters—from hardware specs to canvas rendering—it effectively mitigates the risk of browser fingerprinting and provides a robust solution for multi-account management. The dynamic generation of a custom extension for each launch is a key architectural choice that enhances stealth and effectiveness.
Sources: README.md, main.js, fingerprint.js
Relevant source files
The following files were used as context for generating this wiki page:
The Fingerprint Isolation system is a core feature of GeekEZ Browser, designed to create unique and consistent browser environments for each profile. Its primary purpose is to prevent cross-profile tracking and bypass advanced anti-bot detection systems used by platforms like Cloudflare. This is achieved by randomizing key hardware and software attributes, and then injecting these spoofed values at runtime using a combination of Chromium launch arguments and a dedicated content script.
The strategy focuses on "Native Consistency," which means it avoids easily detectable JavaScript hooks in favor of more robust methods. This includes generating a custom extension for each profile launch, which applies the fingerprint modifications in an isolated world (MAIN) at the very beginning of document creation (document_start). This ensures the fingerprint is stable and appears authentic to detection scripts.
Sources: README.md, main.js:103-112, fingerprint.js:102-109
Architecture
The fingerprinting architecture involves three main stages: Generation, Injection, and Management. The process begins when a user creates a new profile and culminates in a launched browser instance with a completely isolated and unique fingerprint.
The following diagram illustrates the high-level data flow for fingerprint generation and application.
This diagram shows the flow from user action in the UI to the main process handling fingerprint generation and storage, and finally to the browser launch sequence where the fingerprint is injected.
Sources: renderer.js:636-646, main.js:256-263, 350-455
Fingerprint Generation
When a new profile is created without a pre-existing fingerprint, the generateFingerprint() function is invoked to create a new set of unique identifiers. This function randomizes several key parameters to ensure each profile is distinct.
Sources: main.js:258, fingerprint.js:10-100
Generated Parameters
The following table details the parameters that are automatically generated for each new profile.
| Parameter | Randomized Values | Description |
|---|---|---|
| Hardware | hardwareConcurrency: 4, 8, 12, or 16deviceMemory: 4, 8, or 16 GB | Simulates different CPU core counts and RAM sizes. |
| Screen Resolution | 1920x1080, 2560x1440, 1366x768, 1536x864, 1440x900 | A random resolution is selected from a predefined list. |
| Canvas Noise | Small random integer values for R, G, B, A channels | Adds subtle noise to canvas rendering to create a unique hash. |
| Audio Noise | A small random float value | Adds noise to the AudioBuffer to create a unique audio fingerprint. |
| Noise Seed | A large random integer | Used as a seed for applying canvas noise consistently within a session. |
| User Agent | Based on host OS (Win, Mac, Linux) and a fixed Chrome version | The User-Agent string is constructed to match the host operating system. |
| Timezone | Defaults to America/Los_Angeles | Can be overridden by the user during profile creation or editing. |
Sources: fingerprint.js:4-7, 89-96, CHANGELOG_v1.2.3.md
Fingerprint Object Structure
The generated data is stored in a fingerprint object within the profile's entry in profiles.json.
This diagram shows the relationship between a Profile and its associated Fingerprint object.
Sources: main.js:259-262, fingerprint.js:78-98
Fingerprint Injection
The application of the fingerprint is a multi-step process that occurs when a profile is launched. It uses a combination of Puppeteer launch arguments and a dynamically generated browser extension.
Launch Sequence
The following sequence diagram details the interactions during a profile launch.
This diagram shows that main.js first creates a custom extension and then launches the browser via Puppeteer, passing arguments for native settings and loading the extension to handle JavaScript-level modifications.
Sources: main.js:103-112, 350-455
Injection Methods
GeekEZ Browser uses two primary methods for fingerprint injection:
-
Chromium Launch Arguments: For native browser properties that can be set at startup. This is the preferred method as it's less detectable.
--proxy-server: Sets the network proxy.--window-size: Sets the initial window dimensions.--lang: Sets thenavigator.language.--load-extension: Loads the custom "GeekEZ Guard" extension and any user-added extensions.--force-webrtc-ip-handling-policy=disable_non_proxied_udp: Prevents WebRTC IP leaks.
Sources: main.js:424-445
-
Content Script Injection: For properties that must be modified within the JavaScript environment of a web page. This is handled by a dynamically generated extension named "GeekEZ Guard". The script runs at
document_startin theMAINworld to apply changes before any page scripts can execute.- Timezone Spoofing: Hooks
Intl.DateTimeFormatandDate.prototype.getTimezoneOffsetto report the profile's specified timezone. - Canvas/Audio Noise: Overrides
getImageDataandgetChannelDatato inject subtle, unique noise. - WebRTC Protection: Wraps the
RTCPeerConnectionconstructor to enforce arelaypolicy, further preventing IP leaks. - WebDriver Spoofing: Sets
navigator.webdrivertofalse.
Sources: main.js:103-112, fingerprint.js:102-205
- Timezone Spoofing: Hooks
Spoofed Parameters Deep Dive
Hardware and OS
- CPU & Memory: Randomized values for
navigator.hardwareConcurrencyandnavigator.deviceMemoryare generated. These are applied via the injected content script. - Platform: The
navigator.platformand User-Agent Client Hints (navigator.userAgentData) are set to match the host operating system (Windows, macOS, or Linux) to ensure consistency.
Sources: fingerprint.js:11-40, 90-91
Graphics and Media
- Canvas: The
CanvasRenderingContext2D.prototype.getImageDatamethod is patched. It adds a small, seeded random value to the alpha channel of specific pixels, which alters the resulting hash of the canvas image without creating visible artifacts. - WebGL: The WebGL vendor and renderer strings are currently hardcoded to
Google Inc. (NVIDIA)andANGLE (NVIDIA)respectively. - AudioContext: The
AudioBuffer.prototype.getChannelDatamethod is patched to add a very small random value to the audio buffer data, creating a unique audio fingerprint.
Sources: fingerprint.js:43-45, 160-184
Timezone and Geolocation
- Timezone: This is one of the most complex spoofs. The system hooks multiple
DateandIntlmethods to consistently report the timezone specified in the profile. This includesIntl.DateTimeFormat,Date.prototype.getTimezoneOffset, andDate.prototype.toString. The timezone can be set by the user in the profile creation/edit modal. - Geolocation: While not explicitly spoofed in
fingerprint.js, the tight integration with a proxy server means that any geolocation checks based on IP address will reflect the proxy's location.
Sources: fingerprint.js:113-158, renderer.js:639, 701
WebRTC
WebRTC IP leakage is prevented through two layers of protection:
- Native Policy: The
--force-webrtc-ip-handling-policy=disable_non_proxied_udplaunch argument provides a strong, native block. - JS-Level Reinforcement: The
RTCPeerConnectionconstructor is patched to force theiceTransportPolicytorelay, ensuring that even if a connection is attempted, it cannot use local network candidates to reveal the real IP address.
Sources: main.js:434, fingerprint.js:186-194
Conclusion
The Fingerprint Isolation system in GeekEZ Browser is a sophisticated mechanism that combines native browser controls with carefully crafted JavaScript injections to create highly unique and isolated browsing environments. By focusing on "Native Consistency" and generating a wide range of randomized parameters—from hardware specs to canvas rendering—it effectively mitigates the risk of browser fingerprinting and provides a robust solution for multi-account management. The dynamic generation of a custom extension for each launch is a key architectural choice that enhances stealth and effectiveness.
Sources: README.md, main.js, fingerprint.js