Hardware Spoofing (CPU & Memory)
Relevant source files
The following files were used as context for generating this wiki page:Hardware spoofing is a key feature of GeekEZ Browser designed to enhance fingerprint uniqueness for each browser profile. By randomizing hardware-related properties such as CPU core count (navigator.hardwareConcurrency) and device memory (navigator.deviceMemory), the browser aims to prevent cross-profile tracking by advanced detection systems. This randomization is part of a broader fingerprinting strategy that includes spoofing media, timezone, and other browser attributes.
This system generates unique hardware values upon profile creation and stores them within the profile's configuration. While the generation mechanism is clearly defined, the method of injecting these specific hardware values into the running browser instance is not explicitly implemented in the provided getInjectScript function, which focuses on other attributes like Canvas, Audio, and Timezone.
Sources: README.md:21-22, CHANGELOG_v1.2.3.md:5-7, fingerprint.js:77-100
Feature Overview
The hardware spoofing feature was introduced in version 1.2.3 to significantly increase the uniqueness of each profile's fingerprint. The system automatically assigns a random CPU core count and device memory size from a predefined set of common hardware configurations when a new profile is created.
Sources: CHANGELOG_v1.2.3.md:3-7
Randomized Parameters
The following hardware parameters are randomized for each new profile:
| Parameter | Spoofed Property | Possible Values |
|---|---|---|
| CPU Cores | navigator.hardwareConcurrency | 4, 8, 12, 16 |
| Device Memory | navigator.deviceMemory | 4, 8, 16 (GB) |
This table shows the parameters and their potential randomized values as defined in the fingerprint generation logic.
Sources: fingerprint.js:84-85, CHANGELOG_v1.2.3.md:20-22
Fingerprint Generation
The core logic for hardware spoofing resides in the generateFingerprint function. When a new profile is created, this function is called to generate a comprehensive fingerprint object, which includes randomized values for hardwareConcurrency and deviceMemory.
Sources: main.js:310, fingerprint.js:10-91
Generation Flow
The diagram below illustrates the process of generating a new fingerprint, including the hardware randomization step.
This flowchart shows that hardware randomization is an integral step within the generateFingerprint function.
Sources: fingerprint.js:10-91, main.js:310-315
Implementation Details
The randomization is achieved by selecting a value from a predefined array for each parameter.
// fingerprint.js:84-85
hardwareConcurrency: [4, 8, 12, 16][Math.floor(Math.random() * 4)],
deviceMemory: [4, 8, 16][Math.floor(Math.random() * 3)],
These values are then stored in the fingerprint object associated with the profile.
Sources: fingerprint.js:84-85
Fingerprint Object Structure
The generated hardware values are part of a larger fingerprint object. The relevant fields are shown below.
This diagram shows the structure of the fingerprint object, highlighting the hardwareConcurrency and deviceMemory properties.
Sources: fingerprint.js:77-90
Integration and Application
The hardware spoofing values are generated during the profile creation workflow, which is initiated from the renderer process (UI).
Profile Creation Sequence
The following diagram shows the sequence of events when a user creates a new profile.
This sequence shows that main.js orchestrates the call to generateFingerprint and saves the result.
Sources: renderer.js:630-639, preload.js:5, main.js:310-315, fingerprint.js:10
Application of Fingerprint Values
When a profile is launched, its fingerprint object is retrieved. A content script is dynamically generated by getInjectScript and loaded into the browser via a temporary extension.
However, the implementation of getInjectScript in fingerprint.js does not include code to override navigator.hardwareConcurrency or navigator.deviceMemory. The script primarily focuses on injecting noise for Canvas and Audio, and spoofing Timezone and WebRTC settings. The generated hardware values are present in the fp object passed to the script but are not actively used for injection in the provided code.
// fingerprint.js:94-100
function getInjectScript(fp) {
const fpJson = JSON.stringify(fp);
return `
(function() {
try {
const fp = ${fpJson};
// ...
// NOTE: No override for hardwareConcurrency or deviceMemory here.
// ...
} catch(e) { console.error("FP Error", e); }
})();
`;
}
Sources: main.js:108-115, fingerprint.js:94-189
Conclusion
The GeekEZ Browser architecture includes a dedicated mechanism for generating randomized hardware fingerprints, specifically for CPU core count and device memory. These values are created during profile initialization and stored persistently in the profile's configuration file. This functionality is documented as a key feature for enhancing profile uniqueness.
While the generation of these values is clearly implemented in fingerprint.js, their application within the running browser instance is not evident in the analyzed source files. The content script responsible for injecting other fingerprint modifications does not currently apply the hardwareConcurrency or deviceMemory values. This suggests a potential gap between the documented feature and its current implementation, or that the injection is handled by a mechanism not present in the provided code.
Sources: fingerprint.js, main.js, README.md