Files
OmniRoute/docs/i18n/ne/docs/security/STEALTH_GUIDE.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* feat(docs): mirror every docs/ page in all 65 locales

Extends the documentation mirrors from the 22-page core set (#13940) to
every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors
(6,208 new), language bars rewritten for the full locale list, state
adopted so the blocking drift gate now covers all 152 pages.

run-translation.mjs: an oversized block made only of table rows or list
items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is
cut at item boundaries and rejoined without a blank line — the single
16-40 KB request outlived the backend socket for verbose scripts. 48
older mirrors whose tables had lost rows were retranslated with --force.

* docs(i18n): refresh mirrors for the sources the base changed since the branch cut

Section-level retranslation of the 29 docs (and README.md) whose source
or mirrors moved on release/v3.8.51 during the run, then state adoption;
the drift gate is green again on the merged tree.
2026-09-18 13:16:46 -03:00

39 KiB
Raw Blame History

Stealth Guide (नेपाली)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


सत्यको आधिकारिक स्रोत: open-sse/utils/tlsClient.ts, open-sse/services/{tlsClientBase,claudeTlsClient,perplexityTlsClient,grokTlsClient,notionTlsClient,lmarenaTlsClient,claudeCodeCCH,claudeCodeFingerprint,claudeCodeObfuscation,claudeCodeCompatible}.ts, open-sse/config/cliFingerprints.ts, src/mitm/ अन्तिम अद्यावधिक: 2026-09-02 — v3.8.51 लक्षित पाठक: प्रदायक-विशिष्ट स्टेल्थ एकीकरणहरू मर्मत गर्ने इन्जिनियरहरू।

OmniRoute त्यस्ता प्रदायकहरूसँग एकीकृत हुन्छ जसका एजहरूले गैर-आधिकारिक क्लाइन्टहरूलाई सक्रिय रूपमा फिङ्गरप्रिन्ट गर्छन् (TLS JA3/JA4, हेडर क्रम, JSON बडीको संरचना, इन्टेग्रिटी टोकनहरू)। यस पृष्ठले OmniRoute ले उपलब्ध गराउने स्टेल्थ सतहहरू र तिनलाई कहाँ कार्यान्वयन गरिएको छ भन्ने दस्तावेजीकरण गर्छ।

कानुनी तथा नैतिक सूचना

स्टेल्थ सुविधाहरूको उद्देश्य OmniRoute लाई प्रयोगकर्ताको स्वामित्वमा रहेका आधिकारिक खाताहरू (Claude Code CLI, Codex, Antigravity, Cursor, आदि) र OmniRoute को एकीकृत API बीच अनुकूलता तहका रूपमा काम गर्न सक्षम बनाउनु हो। ती ठगी पत्ता लगाउने प्रणाली छल्न, क्रेडेन्सियलहरू साझेदारी गर्न, वा प्रदायकका सेवा सर्तहरू उल्लङ्घन गर्नका लागि होइनन्। खाताहरू सिर्जना गर्दा स्वीकार गरेका अपस्ट्रिम ToS पालना गर्न सञ्चालकहरू जिम्मेवार हुने अपेक्षा मर्मतकर्ताहरूले राख्छन्।


TLS फिङ्गरप्रिन्टिङ तह

open-sse/utils/tlsClient.ts — wreq-js (Chrome 124)

स्थायी wreq-js सत्रहरू प्रत्येक खाता स्कोप र समाधान गरिएको प्रोक्सीका लागि आवश्यक पर्दा मात्र सिर्जना गरिन्छन्। प्रक्रियाभरि प्रयोग हुने TlsClient ले Cloudflare पछाडि रहेका अपस्ट्रिमहरूका लागि macOS मा Chrome 124 को प्रतिरूपण गर्ने बढीमा 128 वटा सत्र पूल गर्छ। नेटिभ रनटाइम उपलब्ध नभएमा TlsClient.fetch() सुरक्षित रूपमा असफल हुन्छ; कलरले यस र्यापरबाहिर स्पष्ट रूपमा फल्ब्याक चयन गर्न सक्छ।

  • सत्र प्रोफाइल: browser: "chrome_124", os: "macos"
  • प्रोक्सी समाधान (प्राथमिकताअनुसार): HTTPS_PROXYHTTP_PROXYALL_PROXY (सानो अक्षरका संस्करणहरू पनि)
  • टाइमआउट: TLS_CLIENT_TIMEOUT_MS (FETCH_TIMEOUT_MS बाट इनहेरिट हुन्छ, पूर्वनिर्धारित 600000)
  • wreq-js Response fetch-सँग अनुकूल छ (headers, text(), json(), clone(), body)।
  • पहिलो-बाइट वाचडग (open-sse/utils/tlsFirstByteWatchdog.ts, #12656): अपस्ट्रिम हेडरहरू आइपुग्नेबित्तिकै TlsClient.fetch() रिजल्भ हुन्छ, त्यसैले TLS_CLIENT_TIMEOUT_MS ले मात्र कहिल्यै पहिलो बाइट नदिने बडीलाई सीमित गर्न सक्दैन। guardTlsFirstByte() ले बडीको पहिलो read() लाई TLS_FIRST_BYTE_WATCHDOG_MS (पूर्वनिर्धारित 10000, 0 ले यसलाई निष्क्रिय गर्छ) विरुद्ध रेस गराउँछ; स्वस्थ बडीमा कुनै असर पर्दैन, जबकि रोकिएको बडीले wreq रिडर रद्द गर्छ र proxyFetch को विद्यमान TLS-फल्ब्याक तर्कलाई प्रत्यक्ष/प्रोक्सी डिस्प्याचरतर्फ अगाडि बढ्न दिन्छ (पुनःप्ले गर्न असुरक्षित अनुरोध, जस्तै बडीसहितको POST, मौन रूपमा पुनःप्रयास हुनुको सट्टा अझै पनि त्रुटि थ्रो गर्छ)।

वेब-कुकी प्रदायक ट्रान्सपोर्ट — wreq-js 3.2.0

open-sse/services/tlsClientBase.ts तलका पाँचवटा विशिष्टीकृत वेब-कुकी ट्रान्सपोर्टका लागि साझा एडाप्टर हो। प्रत्येक पातलो प्रदायक र्यापरले ब्राउजर/OS प्रोफाइल चयन गर्छ। एडाप्टरले open-sse/utils/tlsClient.ts मा रहेको एकल wreq रनटाइम लोडर र ट्रान्सपोर्ट पूल प्रयोग गर्छ, जसलाई प्रोफाइल + OS + समाधान गरिएको प्रोक्सीअनुसार कुञ्जीकृत गरिन्छ, जबकि प्रत्येक अनुरोधले cookieMode: "ephemeral" प्रयोग गर्छ। त्यसैले खाता र अनुरोधहरूले ट्रान्सपोर्ट-स्तरका कनेक्सनहरू साझेदारी गर्छन्, तर wreq सत्र वा कुकी जार कहिल्यै साझेदारी गर्दैनन्।

प्रदायक प्रोफाइल अनुकरण गरिएको OS स्ट्रिम EOF नीति
Claude chrome_146 Linux [DONE] समावेश गर्ने
Perplexity firefox_148 macOS event: end_of_stream समावेश गर्ने
Grok chrome_146 Linux [DONE] बहिष्कार गर्ने
Notion chrome_146 Windows [DONE] समावेश गर्ने
LMArena chrome_146 Windows कुनै सेन्टिनेल छैन; नेटिभ EOF मा बन्द गर्ने
  • स्ट्रिमिङले नेटिभ रेस्पोन्स ReadableStream लाई सीधै उपभोग गर्छ; कुनै अस्थायी फाइल वा साइडकार सिर्जना गरिँदैन।
  • स्ट्रिम सार्वजनिक गर्नुअघि प्रारम्भिक 256 बाइटसम्म निरीक्षण गरिन्छ। SSE प्रदायकहरूले गैर-SSE त्रुटिहरू बफर गर्छन्; Grok/LMArena ले Cloudflare चुनौतीहरूलाई 403 र HTML इन्टरस्टिसियलहरूलाई 502 मा म्याप गर्छन्।
  • नेटिभ अनुरोध टाइमआउटलाई अझै पनि निरपेक्ष JS हार्ड डेडलाइनले र्याप गर्छ। ह्याङ हुँदा अर्को अनुरोधले त्यसलाई पुनःसिर्जना गर्नुअघि प्रभावित प्रोफाइल/OS/प्रोक्सी ट्रान्सपोर्ट मात्र अमान्य पारेर बन्द गरिन्छ।
  • प्रोक्सी समाधानको प्राथमिकता प्रत्येक कलको proxyUrl → अनुरोध-स्कोप गरिएको खाता/ड्यासबोर्ड सन्दर्भ → HTTPS_PROXY/HTTP_PROXY/ALL_PROXY (सानो अक्षरका संस्करणहरूसहित) हो। समाधान त्रुटिहरू प्रत्यक्ष कनेक्सन चुहाउनुभन्दा सुरक्षित रूपमा असफल हुन्छन्। LMArena ले जानाजान arena.ai विरुद्ध समाधान गर्छ।
  • byteResponse ले UTF-8 करप्सनबिनाको कन्टेन्ट-टाइपयुक्त data: URL फर्काउँछ।
  • सबै 128 सीमित प्रोफाइल/OS/प्रोक्सी स्लट सक्रिय वा बन्द हुँदै गर्दा त्रुटिहरू TlsClientUnavailableError (प्याकेज/एडअन उपलब्ध छैन), TlsClientHangError (डेडलाइन नाघ्यो), र WreqTransportCapacityError (साझा सत्र-क्षमता त्रुटि कोड) हुन्छन्।

माथिको जेनेरिक TlsClient सत्र स्थायी ब्राउजर-समर्थित कुकी अवस्थाका लागि विशिष्टीकृत नै रहन्छ। दुवै मार्गले एउटै क्यास गरिएको wreq मोड्युल लोडर र प्रक्रिया जीवनचक्र हुक पुनःप्रयोग गर्छन्; तिनका पूलहरू अलग रहन्छन् किनकि तिनका कुकी जीवनकालहरू जानाजान फरक राखिएका छन्।

प्रोफाइलहरूलाई पिन गरिएको प्याकेजले समर्थन गर्छ, तर वास्तविक WAF स्वीकृति स्थानीय कन्ट्र्याक्ट परीक्षणहरूबाट स्वतन्त्र रूपमा परिवर्तन हुन सक्छ। अपस्ट्रिम ब्राउजरसँग समानता भएको दाबी गर्नुअघि स्पष्ट रूपमा अधिकृत लाइभ खातामा फिङ्गरप्रिन्ट परिवर्तनहरू प्रमाणीकरण गर्नुहोस्।


Claude Code स्टेल्थ बन्डल

cliCompatMode सक्रिय हुँदा, OmniRoute ले बाहिर जाने Claude अनुरोधहरूलाई claude-cli ट्राफिकबाट छुट्याउन नसकिने गरी पुनःआकार दिन्छ। तीनवटा मोड्युलले सहकार्य गर्छन्:

claudeCodeFingerprint.ts

बिलिङ हेडरमा समावेश गरिएको 3-अक्षरको cc_version फिङ्गरप्रिन्ट गणना गर्छ:

SHA256(SALT + msg[4] + msg[7] + msg[20] + version)[:3]
  • FINGERPRINT_SALT = "59cf53e54c78" (हार्डकोड गरिएको; आधिकारिक क्लाइन्टसँग मेल खान्छ)
  • इनपुटहरू: पहिलो प्रयोगकर्ता सन्देशको पाठमा इन्डेक्स 4, 7, 20 का अक्षरहरू + संस्करण स्ट्रिङ
  • आउटपुट: 3-अक्षरको हेक्स प्रिफिक्स

claudeCodeCCH.ts (क्लाइन्ट सामग्री ह्यास)

आधिकारिक Claude Code CLI ले Bun/Zig मार्फत गणना गर्ने सर्भर-साइड अखण्डता जाँच। OmniRoute ले यसलाई xxhash-wasm प्रयोग गरेर पुनःकार्यान्वयन गर्छ:

  1. बडीलाई cch=00000; प्लेसहोल्डरसहित सिरियलाइज गर्ने
  2. xxhash64(bytes, seed) & 0xFFFFF
  3. शून्यले प्याड गरिएको 5-अक्षरको लोअरकेस हेक्स
  4. cch=00000; लाई गणना गरिएको टोकनले प्रतिस्थापन गर्ने

स्थिर मानहरू:

  • सिड: 0x6e52736ac806831e
  • प्याटर्न: /\bcch=([0-9a-f]{5});/

claudeCodeObfuscation.ts

अपस्ट्रिम फिल्टरहरूले तिनलाई grep गर्न नसकून् भनेर "संवेदनशील" क्लाइन्ट नामहरूको पहिलो अक्षरपछि Unicode zero-width joiner (U+200D) घुसाउँछ। पूर्वनिर्धारित शब्द सूची:

opencode, open-code, cline, roo-cline, roo_cline, cursor, windsurf,
aider, continue.dev, copilot, avante, codecompanion

यसमा लागू हुन्छ: system ब्लकहरू, सबै messages[].content, र tools[].description / tools[].function.description। अपरेटरले setSensitiveWords() मार्फत ओभरराइड गर्न सक्छ।

claudeCodeCompatible.tsanthropic-compatible-cc-* प्रदायकहरू

केवल "वास्तविक Claude Code" ट्राफिक स्वीकार गर्ने तेस्रो-पक्ष Anthropic रिलेहरूका लागि:

  • CLAUDE_CODE_COMPATIBLE_USER_AGENT = "claude-cli/2.1.258 (external, sdk-cli)"
  • CLAUDE_CODE_COMPATIBLE_STAINLESS_PACKAGE_VERSION = "0.112.1"
  • CLAUDE_CODE_COMPATIBLE_STAINLESS_RUNTIME_VERSION = "v26.3.0"
  • पूर्वनिर्धारित रूपमा anthropic-beta = "claude-code-20250219,interleaved-thinking-2025-05-14,effort-2025-11-24"
  • प्रति-कनेक्सन "Enable redact-thinking beta" टगलले CC Compatible अपस्ट्रिमलाई विशेष रूपमा संशोधित थिङ्किङ स्ट्रिमहरू आवश्यक पर्दा redact-thinking-2026-02-12 थप्छ
  • प्रति-कनेक्सन "Enable summarized thinking display" टगलले providerSpecificData.requestDefaults.summarizeThinking भण्डारण गर्छ र पहिल्यै डिस्प्ले मोड सेट नगरिएका CC Compatible थिङ्किङ अनुरोधहरूमा display: "summarized" थप्छ
  • CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07" (Opus/Sonnet 4.x परिवार)
  • पूर्वनिर्धारित पाथ: /v1/messages?beta=true

सोही बन्डलका सहायक मोड्युलहरू:

  • claudeCodeConstraints.ts — तापक्रम + क्यास-कन्ट्रोल नियमहरू
  • claudeCodeToolRemapper.ts — टुल-नाम रिम्यापिङ
  • claudeCodeExtraRemap.ts — अतिरिक्त पेलोड सामान्यीकरण

Antigravity स्टेल्थ

Antigravity अनुरोधहरूले कलरको पाठलाई बाइट-दर-बाइट जस्ताको तस्तै राख्छन्। OmniRoute ले IDE क्लाइन्टको नक्कल गर्न प्रम्प्टहरूमा zero-width अक्षरहरू घुसाउँदैन वा टुलहरूको नाम परिवर्तन/इन्जेक्ट गर्दैन।

antigravityHeaderScrub.ts

फर्वार्ड गर्नुअघि Stainless SDK मार्करहरू (x-stainless-lang, x-stainless-package-version, x-stainless-os, x-stainless-arch, x-stainless-runtime, x-stainless-runtime-version, x-stainless-timeout, x-stainless-retry-count, x-stainless-helper-method) हटाउँछ।

⚠️ जोखिम: ANTIGRAVITY_CREDITS=always (खाता प्रतिबन्धको प्रमुख जोखिम क्षेत्र)

ANTIGRAVITY_CREDITS=always (open-sse/executors/antigravity.ts द्वारा प्रयोग गरिने) ले Google को निःशुल्क-टियर कोटाले अनुरोधहरू नियन्त्रण गर्न दिनुको सट्टा हरेक अनुरोधलाई Antigravity AI Credit Overages (सशुल्क Google क्रेडिटहरू) मार्फत रुट गर्छ। यसलाई सुविधाका रूपमा दस्तावेज गरिएको छ, तर यो हामीले देख्ने ToS उल्लङ्घनसम्बन्धी रिपोर्टहरूको सबैभन्दा सामान्य एकल कारण हो=always सँग केही घण्टा चलाएपछि धेरै Google Ultra खाताहरूलाई 403 / "service disabled for ToS violation" / insufficient_quota सहित प्रतिबन्ध लगाइएको छ।

अपस्ट्रिम प्रवर्तन Google को पक्षमा हुन्छ, OmniRoute ले रोक्न सक्ने कुरा होइन। वातावरणीय चरको नाम र विद्यमान दस्तावेजहरूले यसलाई सक्रिय गर्नु सुरक्षित विकल्पजस्तो देखाउँछन्; तर यो सुरक्षित छैन।

यसले केवल निःशुल्क-टियर प्रयोगको तुलनामा दुरुपयोग पहिचानलाई अझ आक्रामक रूपमा आकर्षित गर्नुका कारणहरू:

  • एउटै Google खातामा निरन्तर स्वचालित खर्चलाई निःशुल्क-टियरले कोटा पुगेर रोक्ने अवस्थाभन्दा फरक ढङ्गले फ्ल्याग गरिन्छ।
  • क्रेडिट ओभरेजमा दर सीमा हुँदैन, त्यसैले गलत कन्फिगर गरिएको क्लाइन्टले केही मिनेटमै सयौँ USD खर्च गर्न सक्छ र API-key पुनर्बिक्री वा बट ट्राफिकजस्तो देखिन सक्छ।
  • एउटै बाह्य IP बाट समानान्तर रूपमा ओभरेज क्रेडिट प्रयोग गर्ने धेरै OmniRoute प्रयोगकर्ताहरूले सङ्केतलाई थप गम्भीर बनाउँछन्।

सिफारिस गरिएको कार्यपद्धति:

  1. अपरेटरले सशुल्क क्रेडिट र खाता-प्रवर्तनको जोखिम स्पष्ट रूपमा स्वीकार नगरेसम्म पूर्वनिर्धारित ANTIGRAVITY_CREDITS=off कायम राख्नुहोस्। retry ले पहिले सामान्य अनुरोध पठाउँछ र योग्य कोटा 429 आएपछि बढीमा एकपटक क्रेडिट इन्जेक्ट गर्छ; always ले पहिलो अनुरोधमै क्रेडिट इन्जेक्ट गर्छ।
  2. एउटै Antigravity खातालाई अत्यधिक प्रयोग गर्नुको सट्टा Auto-Combo मार्फत प्रदायकहरूमा लोड वितरण गर्नुहोस् (model: "auto" वा kr/glm/etc-combo)।
  3. Antigravity प्रदायकको सम्पादन पृष्ठमा प्रति-कनेक्सन RPM सीमाहरू सेट गर्नुहोस् (Dashboard → Providers → Antigravity → connection → rate limit)। निरन्तर प्रयोगका लागि 3060 RPM उचित ठहराउन सकिने माथिल्लो सीमा हो।
  4. स्थिर, अपरेटर-नियन्त्रित अपस्ट्रिम नेटवर्किङ प्रयोग गर्नुहोस् र असम्बन्धित प्रयोगकर्ता वा कार्यभारहरूबीच एउटै खाता साझा नगर्नुहोस्।
  5. प्रतिबन्ध लागेमा: Google ले पठाएको ठ्याक्कै quota_exceeded / service disabled प्रतिक्रिया बडीसहित support.google.com → "Restore Workspace/Account access" मार्फत अपिल गर्नुहोस्। पुनर्स्थापना हुने ग्यारेन्टी छैन।

वातावरण सन्दर्भले प्रत्येक क्रेडिट मोडका खाता र खर्चसम्बन्धी प्रभावहरू दस्तावेज गर्छ।

सम्बन्धित स्थानहरू:

  • open-sse/executors/antigravity.tsprocess.env.ANTIGRAVITY_CREDITS पढ्छ
  • src/lib/oauth/providers/antigravity.ts — क्रेडेन्सियल प्लम्बिङ
  • मूल घटना रिपोर्ट: छलफल #1183

CLI फिङ्गरप्रिन्ट रजिस्ट्री — open-sse/config/cliFingerprints.ts

आधिकारिक CLI हरूका mitmproxy ट्रेसहरूबाट क्याप्चर गरिएको ठ्याक्कै उही हेडर क्रम र JSON बडी फिल्ड क्रम निश्चित गर्ने प्रति-प्रदायक तालिका। हाल दर्ता भएका: codex, claude, साथै antigravitygithub का लागि providerHeaderProfiles.ts मा रहेका रनटाइमबाट व्युत्पन्न प्रोफाइलहरू।

interface CliFingerprint {
  headerOrder: string[]; // केस-संवेदनशील
  bodyFieldOrder: string[]; // शीर्ष-स्तरीय JSON कुञ्जीहरू
  userAgent?: string | (() => string);
  extraHeaders?: Record<string, string>;
}

env मार्फत प्रत्येक प्रदायकका लागि टगल गर्नुहोस् (तल हेर्नुहोस्)। असक्षम हुँदा, हेडर/बडी कुञ्जीहरू Node/JSON ले दिएको जुनसुकै क्रममा देखा पर्छन् — जसको फिङ्गरप्रिन्ट सजिलै लिन सकिन्छ।


MITM प्रोक्सी (Antigravity, Linux/macOS/Windows)

OPENAI_BASE_URL मार्फत बाइनरीहरू पुनर्निर्देशित गर्न नसकिने CLI हरूका लागि, OmniRoute ले स्थानीय TLS-समापन गर्ने प्रोक्सी चलाउँछ। एन्डपोइन्टहरू src/app/api/cli-tools/antigravity-mitm/ अन्तर्गत छन्।

विधि एन्डपोइन्ट उद्देश्य
GET /api/cli-tools/antigravity-mitm स्थिति — चलिरहेको, pid, dnsConfigured, certExists
POST /api/cli-tools/antigravity-mitm MITM सुरु गर्नुहोस् (apiKey + sudoPassword आवश्यक)
DELETE /api/cli-tools/antigravity-mitm MITM रोक्नुहोस्
GET /api/cli-tools/antigravity-mitm/alias मोडेल उपनामहरू सूचीबद्ध गर्नुहोस्
PUT /api/cli-tools/antigravity-mitm/alias कुनै उपकरणका लागि मोडेल उपनामहरू सुरक्षित गर्नुहोस्

इन्टरसेप्ट गरिने लक्षित होस्ट: daily-cloudcode-pa.googleapis.com (Antigravity को अपस्ट्रिम)।

सुरु गर्ने क्रम (src/mitm/manager.ts::startMitm)

  1. selfsigned मार्फत सेल्फ-साइन्ड प्रमाणपत्र उत्पन्न गर्नुहोस् (RSA-2048, SHA-256, 1y) — cert/generate.ts
  2. प्रणालीको ट्रस्ट स्टोरमा प्रमाणपत्र स्थापना गर्नुहोस् — cert/install.ts
  3. होस्ट्स प्रविष्टि 127.0.0.1 daily-cloudcode-pa.googleapis.com थप्नुहोस् — dns/dnsConfig.ts
  4. ROUTER_API_KEY + MITM_LOCAL_PORT (पूर्वनिर्धारित 443) सहित src/mitm/server.cjs स्पन गर्नुहोस्
  5. PID लाई <DATA_DIR>/mitm/.mitm.pid मा स्थायी रूपमा भण्डारण गर्नुहोस्

Linux गतिशील ट्रस्ट-स्टोर पत्ता लगाउने प्रक्रिया — cert/install.ts

getLinuxCertConfig() ले प्राथमिकता सूची क्रमशः जाँचेर पहिलो अवस्थित डाइरेक्टरी चयन गर्छ:

डिस्ट्रो परिवार डाइरेक्टरी अद्यावधिक कमाण्ड
Debian / Ubuntu /usr/local/share/ca-certificates update-ca-certificates
Arch / CachyOS / Manjaro /etc/ca-certificates/trust-source/anchors update-ca-trust
Fedora / RHEL / CentOS /etc/pki/ca-trust/source/anchors update-ca-trust
openSUSE /etc/pki/trust/anchors update-ca-certificates

प्रमाणपत्र फाइलनाम: omniroute-mitm.crtgetCertFingerprint() (DER को SHA-1) मार्फत फिङ्गरप्रिन्ट मिलान।

यसका अतिरिक्त, certutil उपलब्ध हुँदा updateNssDatabases() ले प्रति-प्रयोगकर्ता NSS DB हरूमा स्थापना गर्छ: ~/.pki/nssdb, ~/snap/chromium/.../nssdb, सबै Firefox प्रोफाइलहरू (snap सहित), OmniRoute MITM Root CA उपनामअन्तर्गत।

macOS / Windows

  • macOS: security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain
  • Windows: उन्नत-अधिकारसहितको PowerShell → certutil -addstore Root

प्रमाणीकरण

सबै MITM एन्डपोइन्टहरूलाई व्यवस्थापन प्रमाणीकरण (requireCliToolsAuth) आवश्यक हुन्छ। sudo पासवर्ड मोड्युल स्कोपमा क्यास गरिन्छ (globalThis मा कहिल्यै होइन) र stopMitm() मा खाली गरिन्छ।


User-Agent ओभरराइडहरू — env vars (.env.example खण्ड 12)

चर पूर्वनिर्धारित
CLAUDE_USER_AGENT claude-cli/2.1.258 (external, cli)
CODEX_USER_AGENT codex-cli/0.149.0 (Windows 10.0.26200; x64)
GITHUB_USER_AGENT GitHubCopilotChat/0.54.0
ANTIGRAVITY_USER_AGENT antigravity/2.0.1 linux/arm64 google-api-nodejs-client/10.3.0
KIRO_USER_AGENT AWS-SDK-JS/3.0.0 kiro-ide/1.0.0
QODER_USER_AGENT Qoder-Cli
CURSOR_USER_AGENT Cursor/3.4

डायनामिक लुकअपमार्फत open-sse/executors/base.ts::buildHeaders() द्वारा प्रयोग गरिन्छ। प्रदायकहरूले नयाँ CLI संस्करण जारी गर्दा यिनलाई अद्यावधिक गर्नुहोस् — पुराना UA स्ट्रिङहरूलाई पुराना क्लाइन्टका रूपमा अस्वीकार गर्न थालिन्छ।

CLI अनुकूलता मोड टगलहरू (.env.example खण्ड 13)

चर प्रभाव
CLI_COMPAT_CODEX=1 Codex फिङ्गरप्रिन्ट
CLI_COMPAT_CLAUDE=1 claude-cli फिङ्गरप्रिन्ट
CLI_COMPAT_GITHUB=1 GitHub Copilot Chat फिङ्गरप्रिन्ट
CLI_COMPAT_ANTIGRAVITY=1 Antigravity फिङ्गरप्रिन्ट
CLI_COMPAT_KIRO=1 Kiro
CLI_COMPAT_CURSOR=1 Cursor
CLI_COMPAT_KIMI_CODING=1 Kimi Coding
CLI_COMPAT_KILOCODE=1 KiloCode
CLI_COMPAT_CLINE=1 Cline
CLI_COMPAT_ALL=1 माथिका सबै सक्षम गर्नुहोस्

प्रदायकको IP सधैँ सुरक्षित राखिन्छ — टगलले अनुरोधको वायर इमेजलाई मात्र पुनःआकार दिन्छ, यसले IP इग्रेस परिवर्तन गर्दैन।


आगमन हेडर स्वच्छीकरण

OmniRoute ले फर्वार्ड गर्नुअघि आगमन क्लाइन्ट हेडरहरू हटाउँछ, जसले गर्दा Cursor बाट आएको अनुरोधले Claude अपस्ट्रिममा User-Agent: Cursor/X.Y.Z चुहाउँदैन। डिनाइलिस्टका लागि src/shared/constants/upstreamHeaders.ts हेर्नुहोस्, जसलाई Zod स्किमा र युनिट परीक्षणहरूसँग ठ्याक्कै समक्रमित राखिएको छ।


प्रदायकले परिवर्तन गर्दा फिङ्गरप्रिन्टहरू अद्यावधिक गर्ने

  1. mitmproxy प्रयोग गरी आधिकारिक CLI ट्राफिक क्याप्चर गर्नुहोस् (TLS इन्टरसेप्सन + डम्प)
  2. JA3/JA4 र अक्षरशः हेडर क्रम निकाल्नुहोस्
  3. सम्बन्धित CLI_FINGERPRINTS[...] प्रविष्टि अद्यावधिक गर्नुहोस्
  4. .env.example मा मिल्दो *_USER_AGENT पूर्वनिर्धारित मान बढाउनुहोस्
  5. TLS ह्यान्डसेक स्वयं परिवर्तन भएको छ भने, सम्बन्धित प्रदायक र्यापर वा wreq-js को browser: विकल्प अद्यावधिक गर्नुहोस्
  6. प्रदायक-विशिष्ट TLS परीक्षणहरू र प्रत्यक्ष प्रदायकविरुद्ध म्यानुअल क्यानरी चलाउनुहोस्
  7. प्याच रिलिजमा जारी गर्नुहोस्; CHANGELOG.md मा दस्तावेजीकरण गर्नुहोस्

परीक्षणहरू

  • open-sse/services/__tests__/claudeTlsClient.test.ts — साझा TLS र्यापरको व्यवहार
  • tests/unit/anthropic-cache-fingerprint.test.ts — फिङ्गरप्रिन्ट निर्धारणात्मकता
  • tests/unit/chatgpt-web-source-retirement.test.ts — Codex Web उपस्थित रहँदा साझा ChatGPT Web स्टेल्थ स्रोत अनुपस्थित नै रहन्छ

यो पनि हेर्नुहोस्