Skip to content

Stealth Engine

Nginjen's stealth system uses a Fingerprint Consistency Engine: a single FingerprintContext generates all 21 stealth vectors so every signal matches the same fake identity.

Why Consistency Matters

Browser fingerprinting works by cross-referencing signals. If your navigator.platform says "Windows" but your WebGL renderer says "Apple GPU", the mismatch itself is a red flag. Nginjen solves this by generating a coherent profile first, then deriving all vectors from it.

21 Stealth Vectors

#VectorWhat It Does
1Navigator overrideswebdriver=false, platform, languages, hardware concurrency
2navigator.vendorMatches browser profile (Google Inc. for Chrome)
3navigator.pluginsRealistic plugin list for the browser/OS
4navigator.connectionRTT, downlink, effectiveType spoofing
5navigator.permissions.queryReturns realistic permission states

Graphics Layer

#VectorWhat It Does
6WebGL vendor/rendererMatches GPU string to OS profile
7Canvas fingerprint noiseDeterministic noise seeded by profile
8AudioContext fingerprintNoise injected into audio sample data

Browser Globals

#VectorWhat It Does
9Chrome globalschrome.app, chrome.runtime, chrome.csi present
10Function.prototype.toStringNative code wrapping for all overrides
11Notification.permissionSpoofed to default
12Battery APIBlocked (returns null)
13MediaDevices enumerationControlled device list

Window & Screen

#VectorWhat It Does
14Window size consistencyouterWidth/Height matches innerWidth/Height
15Screen resolutionMatches OS profile
16Iframe contentWindowDetection evasion for cross-origin frames

Privacy & Hardening

#VectorWhat It Does
17WebRTC IP leak preventionBlocks STUN requests that leak real IP
18Timezone/locale overrideIntl.DateTimeFormat matches profile timezone
19Console protectiondebug, info, table methods preserved
20Error.stack sanitizationCDP frame references removed from stack traces
21Property descriptor hardeningconfigurable: false on all overrides

Fingerprint Profiles

Nginjen ships with built-in profiles:

ProfileOSPlatformMax Touch Points
windowsWindows 10Win320
macosmacOSMacIntel0
linuxLinuxLinux x86_640
androidAndroidLinux armv8l5
iosiOSiPhone5

Each profile generates a coherent FingerprintContext that drives all 21 vectors.

Injection Timing

Nginjen uses pre-load injection: stealth scripts run before any page JavaScript executes. This is done via CDP's Page.addScriptToEvaluateOnNewDocument, which ensures the overrides are in place before the page's own scripts can read the original values.

Headless Modes

ModeHow It WorksDetection Resistance
"new"Chrome's new headless modeGood. Some advanced tests can still detect.
"shell"Chrome 131+ headless shellBetter. Strips more indicators.
"virtual-display"Real browser inside XvfbBest. Renders exactly like headed mode.

For maximum stealth, use virtual-display mode. This requires Xvfb installed:

bash
sudo apt install xvfb

Then in your config:

toml
[stealth]
headless_mode = "virtual-display"

Released under the MIT License.