Skip to content

feat: kernel engine, inject leak fixes and a measured benchmark - #3

Merged
huanthuyon671 merged 6 commits into
mainfrom
feat/kernel-engine
Oct 4, 2026
Merged

huanthuyon671 merged 6 commits into
mainfrom
feat/kernel-engine

Conversation

@huanthuyon671

Copy link
Copy Markdown
Contributor

Summary

  • Kernel engine. engine: 'auto' | 'kernel' | 'inject'. With a fingerprint-chromium binary the fingerprint is spoofed inside Chromium and no JavaScript hooks are installed. auto detects the binary from its switch table (framework on macOS, chrome.dll on Windows). Profiles that name no platform claim the host OS, since Windows claimed on Apple Silicon reads as a virtual machine.
  • Inject leak fixes, each with a regression test against real Chrome: Intl reported the host locale; module, shared and service workers leaked the real machine; Accept-Language disagreed with navigator.languages; webdriver, plugins, connection and getBattery were own properties of navigator.
  • Timezone now comes from the proxy's exit IP, looked up through the proxy, not from proxy.host.
  • Benchmark. scripts/measure.mjs and docs/benchmark.md: both engines next to AdsPower, GPM Login and Multilogin on the same machine and proxy. The README's old scores could not be reproduced and are replaced.
  • Docs pin the tested kernel build (SHA-256) and state what kernel mode does not cover: Windows claimed on Apple Silicon, and Widevine.

The library still ships no browser: users pick the binary with chromePath, CHROMIUM_PATH or CHROME_PATH.

Test plan

  • npm run typecheck
  • npx vitest run — 203 passed
  • BROWSER_PROFILES_E2E=1 KERNEL_PATH=… npx vitest run src/launcher/launch.e2e.test.ts src/integration — 8 passed in 4 of 5 runs; the worker e2e failed once and could not be reproduced
  • Benchmark runs through a US residential proxy, results in docs/benchmark.md

🤖 Generated with Claude Code

namvippro and others added 6 commits October 4, 2026 12:30
Kernel engine: with a fingerprint-chromium binary the fingerprint is
spoofed inside Chromium from a per-profile seed and no JavaScript hooks
are installed. engine=auto picks it when the binary's switch table (the
framework on macOS, chrome.dll on Windows) has fingerprint-platform.
The launcher only sends Emulation.setLocaleOverride, because Chrome on
macOS ignores --lang.

Inject engine fixes, each with a regression test against real Chrome:
- Intl reported the host locale; every tab gets setLocaleOverride.
- Module, shared and service workers leaked the real machine; every
  worker target is paused, spoofed and resumed.
- Accept-Language disagreed with navigator.languages.
- webdriver, plugins, connection and getBattery were own properties of
  navigator; they now live on Navigator.prototype.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scripts/measure.mjs opens browserscan, creepjs, pixelscan, fingerprint.com,
deviceandbrowserinfo, rebrowser and a Cloudflare challenge in a tab no
automation client is attached to, masks IP addresses, and saves text and
screenshots. It drives stock Chrome, both engines, AdsPower, GPM Login,
Multilogin or any open browser.

docs/benchmark.md holds the results; the README and llms.txt quote it
instead of the earlier scores, which could not be reproduced.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The timezone was looked up for proxy.host. A gateway proxy exits from
another address, often another country, so the profile could report a
timezone that disagrees with the IP sites see. The lookup now goes
through the relay, falling back to the host when that fails.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On Apple Silicon a Windows claim reads as a virtual machine to
fingerprint.com: the CPU shows through. Measured on the same proxy,
claiming macOS clears the virtual machine and rare device flags and
drops the suspect score from 38 to 8, while browserscan stays at 100%
and the Cloudflare challenge still passes (2 of 3 runs).

A profile that sets fingerprint.platform is unchanged; the inject engine
still defaults to Windows, so the standalone launcher no longer forces
Win32 itself. When another OS is claimed on a Mac, the display is forced
to sRGB, since only Mac displays report a P3 gamut and HDR.

The benchmark script can now leave the platform unset (PROFILE_PLATFORM=host);
docs and the changelog cover this and the exit-IP timezone fix.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Names the fingerprint-chromium build the benchmark ran on with its
SHA-256 (matching the release digest), how to point the library at any
other binary, and what kernel mode does not cover: Windows claimed on
Apple Silicon, and Widevine. Fixes the outdated detection note in
configuration.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@huanthuyon671
huanthuyon671 merged commit ca8909e into main Oct 4, 2026
4 checks passed
@huanthuyon671 huanthuyon671 mentioned this pull request Oct 4, 2026
@huanthuyon671
huanthuyon671 deleted the feat/kernel-engine branch October 4, 2026 08:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant