M1–M5 fingerprint lab — separates empty Chrome from hardened browsers.
Live: echo-print-ai.vercel.app · Docs: ARCHITECTURE-M1-M5
| # | Name | What it does |
|---|---|---|
| M1 | Network (/api/fp) |
IP ASN/type/VPN, JA3/JA4 hooks, header order, WebRTC vs HTTP, geo↔timezone map (>1000 km = mismatch) |
| M2 | Hardware | stable_id: 3× canvas, WebGL, WebGPU, Audio, fonts, screen, Math — same on all browsers of one PC |
| M3 | Software | Spoof (UA/CH/GPU/fonts), adblock DOM, Brave, canvas noise, tracker script probes → protection 0 vs 95 |
| M4 | Four scores | A uniqueness · B spoof · C aggressiveness · D vulnerability + trackability % |
| M5 | Advanced | localStorage temporal ID, emoji FP, VM WebGL strings |
History & compare — last 10 full reports stay in localStorage only. Select two scans (e.g. stock Chrome vs Brave) and diff scores / stable_id / protection.
Privacy: M2–M5 run client-side; M1 is an ephemeral server request (no DB). History never leaves the browser. JA3 needs edge headers or sidecar.
git clone https://github.com/Evreu1pro/EchoPrint-AI.git
cd EchoPrint-AI
npm install
npm run devOpen http://localhost:3000.
npm run build
npm start
npm test # unit tests (scoring, compare, IP extract)
npm run typecheck
npm run lint- Import
Evreu1pro/EchoPrint-AIin Vercel - Framework: Next.js (auto)
- Build:
npm run build· Output: default
In next.config.ts:
const nextConfig = {
output: 'export',
images: { unoptimized: true },
// basePath: '/EchoPrint-AI', // if project site on GitHub Pages
};Then npm run build → publish the out/ folder.
Note: /api/fp will not work on pure static hosting (M1 falls back to empty network module).
src/
app/ # Next.js App Router UI + /api/fp
components/scanner/ # Report, history, compare
hooks/useModuleScan.ts # Pipeline + local history
lib/
modules/ # M1–M5 pipeline
m1-network/ # IP extract, intel, geo↔tz
m2-hardware/
m3-software/
m4-scoring/
m5-advanced/
history/ # localStorage + compare (pure)
i18n/messages.ts # EN / RU
See docs/MODULE-1-NETWORK-DETECTIVE.md and docs/ARCHITECTURE-M1-M5.md.
- Collect in the matching
src/lib/modules/mN-*/module - Extend
types.tsif the report shape changes - Wire scoring in
m4-scoring/scores.tswhen the signal should move A/B/C/D
Uniqueness — estimated signal entropy → score 0–100 (higher = easier to re-identify).
Spoof / undercover — geo↔tz mismatch, datacenter/TOR, WebRTC≠HTTP, software spoof findings.
Protection / aggressiveness — Brave, canvas noise, adblock DOM, tracker script probes.
Vulnerability — open ad surface + powerful browser APIs (USB, Bluetooth, GPU, …).
This project is educational. It does not claim perfect bot detection or legal tracker blocking.
- Next.js 16 · React 19 · TypeScript
- Tailwind CSS 4 · shadcn-style Button
- Vitest (unit) · GitHub Actions CI
MIT
Built for privacy education. Contributions welcome.