Skip to content

Latest commit

 

History

History
309 lines (216 loc) · 35.8 KB

STEALTH_GUIDE.md

File metadata and controls

309 lines (216 loc) · 35.8 KB

Stealth Guide (Ελληνικά)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇪🇸 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 · 🇳🇵 ne · 🇳🇱 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 κ.λπ.) και του ενοποιημένου API του OmniRoute. Δεν προορίζονται για την παράκαμψη της ανίχνευσης απάτης, την κοινή χρήση διαπιστευτηρίων ή την παραβίαση των Όρων Παροχής Υπηρεσιών των παρόχων. Οι συντηρητές αναμένουν από τους διαχειριστές να συμμορφώνονται με τους όρους ToS των ανάντη υπηρεσιών, τους οποίους αποδέχτηκαν κατά τη δημιουργία λογαριασμών.


Επίπεδο δακτυλικού αποτυπώματος TLS

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

Οι μόνιμες συνεδρίες wreq-js δημιουργούνται με οκνηρό τρόπο ανά εύρος λογαριασμού και επιλυμένο διακομιστή μεσολάβησης. Το TlsClient σε επίπεδο διεργασίας διατηρεί σε κοινόχρηστη δεξαμενή έως 128 συνεδρίες που μιμούνται το Chrome 124 σε macOS για ανάντη υπηρεσίες πίσω από το Cloudflare. Η TlsClient.fetch() αποτυγχάνει με ασφαλή τρόπο όταν το εγγενές περιβάλλον εκτέλεσης δεν είναι διαθέσιμο· ένας καλών μπορεί να επιλέξει ρητά μια εναλλακτική λύση εκτός αυτού του περιτυλίγματος.

  • Προφίλ συνεδρίας: browser: "chrome_124", os: "macos"
  • Επίλυση διακομιστή μεσολάβησης (προτεραιότητα): HTTPS_PROXY → HTTP_PROXY → ALL_PROXY (επίσης με πεζά)
  • Χρονικό όριο: TLS_CLIENT_TIMEOUT_MS (κληρονομείται από το FETCH_TIMEOUT_MS, προεπιλογή 600000)
  • Το Response του wreq-js είναι συμβατό με το fetch (headers, text(), json(), clone(), body).
  • Επόπτης πρώτου byte (open-sse/utils/tlsFirstByteWatchdog.ts, #12656): Η TlsClient.fetch() ολοκληρώνεται μόλις φτάσουν οι κεφαλίδες της ανάντη υπηρεσίας, επομένως το TLS_CLIENT_TIMEOUT_MS από μόνο του δεν μπορεί να θέσει όριο σε ένα σώμα που δεν παρέχει ποτέ πρώτο byte. Η guardTlsFirstByte() θέτει σε ανταγωνισμό την πρώτη read() του σώματος με το TLS_FIRST_BYTE_WATCHDOG_MS (προεπιλογή 10000, το 0 το απενεργοποιεί)· ένα υγιές σώμα δεν επηρεάζεται, ενώ ένα σώμα που έχει κολλήσει ακυρώνει τον αναγνώστη wreq και επιτρέπει στην υπάρχουσα λογική εναλλακτικής λύσης TLS του proxyFetch να συνεχίσει στον απευθείας/μέσω διακομιστή μεσολάβησης διεκπεραιωτή (ένα αίτημα που δεν είναι ασφαλές για επανάληψη, π.χ. ένα POST με σώμα, εξακολουθεί να προκαλεί εξαίρεση αντί να επαναλαμβάνεται σιωπηρά).

Μεταφορά παρόχων web-cookie — wreq-js 3.2.0

Το open-sse/services/tlsClientBase.ts είναι ο κοινόχρηστος προσαρμογέας για τις πέντε εξειδικευμένες μεταφορές web-cookie παρακάτω. Κάθε λεπτό περιτύλιγμα παρόχου επιλέγει ένα προφίλ προγράμματος περιήγησης/λειτουργικού συστήματος. Ο προσαρμογέας χρησιμοποιεί τον μοναδικό φορτωτή περιβάλλοντος εκτέλεσης wreq και τη δεξαμενή μεταφορών στο open-sse/utils/tlsClient.ts, με κλειδί το προφίλ + λειτουργικό σύστημα + επιλυμένο διακομιστή μεσολάβησης, ενώ κάθε αίτημα χρησιμοποιεί cookieMode: "ephemeral". Επομένως, οι λογαριασμοί και τα αιτήματα μοιράζονται συνδέσεις σε επίπεδο μεταφοράς, αλλά ποτέ μια συνεδρία wreq ή ένα χώρο αποθήκευσης cookie.

Πάροχος Προφίλ Εξομοιούμενο λειτουργικό σύστημα Πολιτική EOF ροής
Claude chrome_146 Linux συμπερίληψη [DONE]
Perplexity firefox_151 macOS συμπερίληψη event: end_of_stream
Grok chrome_146 Linux εξαίρεση [DONE]
Notion chrome_146 Windows συμπερίληψη [DONE]
LMArena chrome_146 Windows χωρίς σηματοδότη· κλείσιμο σε εγγενές EOF
  • Η ροή καταναλώνει απευθείας το ReadableStream της εγγενούς απόκρισης· δεν δημιουργείται προσωρινό αρχείο ή βοηθητική διεργασία.
  • Εξετάζονται έως 256 αρχικά byte πριν από την έκθεση μιας ροής. Οι πάροχοι SSE αποθηκεύουν προσωρινά τα σφάλματα που δεν είναι SSE· οι Grok/LMArena αντιστοιχίζουν τις προκλήσεις Cloudflare σε 403 και τις ενδιάμεσες σελίδες HTML σε 502.
  • Το εγγενές χρονικό όριο αιτήματος εξακολουθεί να περιβάλλεται από μια απόλυτη αυστηρή προθεσμία JS. Μια εμπλοκή ακυρώνει και κλείνει μόνο την επηρεαζόμενη μεταφορά προφίλ/λειτουργικού συστήματος/διακομιστή μεσολάβησης, προτού το επόμενο αίτημα την επαναδημιουργήσει.
  • Η προτεραιότητα επίλυσης διακομιστή μεσολάβησης είναι ανά κλήση proxyUrl → περιβάλλον λογαριασμού/πίνακα ελέγχου με εύρος αιτήματος → HTTPS_PROXY/HTTP_PROXY/ALL_PROXY (συμπεριλαμβανομένων των παραλλαγών με πεζά). Τα σφάλματα επίλυσης αποτυγχάνουν με ασφαλή τρόπο αντί να διαρρεύσει μια απευθείας σύνδεση. Το LMArena εκτελεί σκόπιμα την επίλυση με βάση το arena.ai.
  • Το byteResponse επιστρέφει ένα URL data: με τύπο περιεχομένου, χωρίς αλλοίωση UTF-8.
  • Τα σφάλματα είναι TlsClientUnavailableError (το πακέτο/πρόσθετο δεν είναι διαθέσιμο), TlsClientHangError (υπέρβαση προθεσμίας) και WreqTransportCapacityError (ο κοινόχρηστος κωδικός σφάλματος χωρητικότητας συνεδριών) όταν και οι 128 περιορισμένες θέσεις προφίλ/λειτουργικού συστήματος/διακομιστή μεσολάβησης είναι ενεργές ή κλείνουν.

Η γενική συνεδρία TlsClient παραπάνω παραμένει εξειδικευμένη για μόνιμη κατάσταση cookie που υποστηρίζεται από πρόγραμμα περιήγησης. Και οι δύο διαδρομές επαναχρησιμοποιούν έναν αποθηκευμένο στην κρυφή μνήμη φορτωτή μονάδας wreq και ένα άγκιστρο κύκλου ζωής διεργασίας· οι δεξαμενές τους παραμένουν ξεχωριστές, επειδή οι διάρκειες ζωής των cookie τους είναι σκόπιμα διαφορετικές.

Τα προφίλ υποστηρίζονται από το καρφιτσωμένο πακέτο, αλλά η πραγματική αποδοχή από το 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

Εισάγει έναν Unicode συνδετήρα μηδενικού πλάτους (U+200D) μετά τον πρώτο χαρακτήρα «ευαίσθητων» ονομάτων πελατών, ώστε τα φίλτρα ανάντη να μην μπορούν να τα εντοπίσουν μέσω grep. Προεπιλεγμένη λίστα λέξεων:

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.ts — πάροχοι anthropic-compatible-cc-*

Για αναμεταδότες Anthropic τρίτων που δέχονται μόνο «πραγματική κίνηση Claude Code»:

  • CLAUDE_CODE_COMPATIBLE_USER_AGENT = "claude-cli/2.1.280 (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" από προεπιλογή
  • Ο διακόπτης ανά σύνδεση «Ενεργοποίηση της beta έκδοσης απόκρυψης συλλογισμού» προσθέτει το redact-thinking-2026-02-12 όταν ένα ανάντη σύστημα συμβατό με CC απαιτεί συγκεκριμένα ροές με αποκρυμμένο συλλογισμό
  • Ο διακόπτης ανά σύνδεση «Ενεργοποίηση εμφάνισης συνοψισμένου συλλογισμού» αποθηκεύει το providerSpecificData.requestDefaults.summarizeThinking και προσθέτει display: "summarized" στα αιτήματα συλλογισμού που είναι συμβατά με CC και δεν είχαν ήδη ορίσει λειτουργία εμφάνισης
  • 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 διατηρούν το κείμενο του καλούντος ίδιο, byte προς byte. Το OmniRoute δεν εισάγει χαρακτήρες μηδενικού πλάτους στις προτροπές ούτε μετονομάζει/εισάγει εργαλεία για να μιμηθεί έναν πελάτη IDE.

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) δρομολογεί κάθε αίτημα μέσω των υπερβάσεων πιστώσεων του Antigravity AI (επί πληρωμή πιστώσεις Google), αντί να επιτρέπει στο όριο δωρεάν χρήσης της Google να περιορίζει τη δραστηριότητα. Αυτό τεκμηριώνεται ως δυνατότητα, αλλά αποτελεί τη συχνότερη αναφορά παραβίασης των Όρων Παροχής Υπηρεσιών που βλέπουμε — πολλοί λογαριασμοί Google Ultra έχουν αποκλειστεί με 403 / "service disabled for ToS violation" / insufficient_quota, αφού λειτούργησαν για λίγες ώρες με =always.

Η επιβολή των κανόνων ανάντη γίνεται από την πλευρά της Google και δεν είναι κάτι που μπορεί να αποτρέψει το OmniRoute. Το όνομα της μεταβλητής περιβάλλοντος και η υπάρχουσα τεκμηρίωση δίνουν την εντύπωση ότι πρόκειται για μια ασφαλή ρύθμιση· δεν είναι.

Γιατί αυτό ενεργοποιεί τον εντοπισμό κατάχρησης πιο επιθετικά από τη χρήση μόνο του δωρεάν ορίου:

  • Η συνεχής αυτοματοποιημένη δαπάνη σε έναν μόνο λογαριασμό Google επισημαίνεται διαφορετικά από τη συμπεριφορά όπου εξαντλείται το δωρεάν όριο και η χρήση σταματά.
  • Οι υπερβάσεις πιστώσεων δεν έχουν ανώτατο όριο ρυθμού, επομένως ένας εσφαλμένα ρυθμισμένος πελάτης μπορεί να καταναλώσει αρκετές εκατοντάδες USD μέσα σε λίγα λεπτά και να μοιάζει με μεταπώληση κλειδιών API ή κίνηση bot.
  • Η παράλληλη χρήση πιστώσεων υπέρβασης από πολλούς χρήστες του OmniRoute μέσω της ίδιας εξωτερικής διεύθυνσης IP ενισχύει το σχετικό σήμα.

Συνιστώμενη στάση:

  1. Διατηρήστε την προεπιλογή ANTIGRAVITY_CREDITS=off, εκτός εάν ο χειριστής αποδέχεται ρητά τον κίνδυνο χρεώσιμων πιστώσεων και επιβολής περιορισμών στον λογαριασμό. Το retry στέλνει πρώτα το κανονικό αίτημα και εισάγει πιστώσεις το πολύ μία φορά μετά από ένα επιλέξιμο σφάλμα ορίου 429· το always εισάγει πιστώσεις από το πρώτο αίτημα.
  2. Κατανείμετε το φορτίο μεταξύ παρόχων μέσω Auto-Combo (model: "auto" ή συνδυασμός kr/glm/etc), αντί να υπερφορτώνετε έναν μόνο λογαριασμό Antigravity.
  3. Ορίστε όρια RPM ανά σύνδεση στη σελίδα επεξεργασίας του παρόχου Antigravity (Πίνακας ελέγχου → Πάροχοι → Antigravity → σύνδεση → όριο ρυθμού). Τα 30–60 RPM αποτελούν ένα εύλογα υπερασπίσιμο ανώτατο όριο για συνεχή χρήση.
  4. Χρησιμοποιείτε σταθερή δικτύωση ανάντη που ελέγχεται από τον χειριστή και αποφεύγετε την κοινή χρήση ενός λογαριασμού μεταξύ άσχετων χρηστών ή φόρτων εργασίας.
  5. Σε περίπτωση αποκλεισμού: υποβάλετε ένσταση μέσω του support.google.com → «Επαναφορά πρόσβασης σε Workspace/Λογαριασμό», συμπεριλαμβάνοντας το ακριβές σώμα απόκρισης quota_exceeded / service disabled που έστειλε η Google. Η αποκατάσταση δεν είναι εγγυημένη.

Η αναφορά περιβάλλοντος τεκμηριώνει τις επιπτώσεις κάθε λειτουργίας πιστώσεων στον λογαριασμό και στις δαπάνες.

Σημεία επαφής:

  • open-sse/executors/antigravity.ts — διαβάζει το process.env.ANTIGRAVITY_CREDITS
  • src/lib/oauth/providers/antigravity.ts — διασύνδεση διαπιστευτηρίων
  • Αρχική αναφορά περιστατικού: Συζήτηση #1183

Μητρώο αποτυπωμάτων CLI — open-sse/config/cliFingerprints.ts

Πίνακας ανά πάροχο που καθορίζει την ακριβή σειρά των headers και των πεδίων του σώματος JSON, όπως καταγράφηκε από ίχνη mitmproxy των επίσημων CLI. Προς το παρόν έχουν καταχωριστεί: codex, claude, καθώς και προφίλ που παράγονται κατά την εκτέλεση στο providerHeaderProfiles.ts για τα antigravity και github.

interface CliFingerprint {
  headerOrder: string[]; // διάκριση πεζών-κεφαλαίων
  bodyFieldOrder: string[]; // κλειδιά JSON ανώτατου επιπέδου
  userAgent?: string | (() => string);
  extraHeaders?: Record<string, string>;
}

Ενεργοποιείται ή απενεργοποιείται ανά πάροχο μέσω μεταβλητής περιβάλλοντος (δείτε παρακάτω). Όταν είναι απενεργοποιημένο, τα headers/κλειδιά σώματος εμφανίζονται με οποιαδήποτε σειρά τα παρήγαγε το Node/JSON — γεγονός που διευκολύνει τη δημιουργία αποτυπώματος.


Διακομιστής μεσολάβησης MITM (Antigravity, Linux/macOS/Windows)

Για CLI των οποίων τα εκτελέσιμα αρχεία δεν μπορούν να ανακατευθυνθούν μέσω του OPENAI_BASE_URL, το OmniRoute εκτελεί έναν τοπικό διακομιστή μεσολάβησης που τερματίζει το TLS. Τα endpoints βρίσκονται κάτω από το src/app/api/cli-tools/antigravity-mitm/.

Μέθοδος Endpoint Σκοπός
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 (ο upstream διακομιστής του Antigravity).

Ακολουθία εκκίνησης (src/mitm/manager.ts::startMitm)

  1. Δημιουργία αυτοϋπογεγραμμένου πιστοποιητικού μέσω selfsigned (RSA-2048, SHA-256, 1 έτος) — cert/generate.ts
  2. Εγκατάσταση του πιστοποιητικού στον χώρο αποθήκευσης αξιόπιστων πιστοποιητικών του συστήματος — cert/install.ts
  3. Προσθήκη καταχώρισης hosts 127.0.0.1 daily-cloudcode-pa.googleapis.com — dns/dnsConfig.ts
  4. Εκκίνηση του src/mitm/server.cjs με ROUTER_API_KEY + MITM_LOCAL_PORT (προεπιλογή 443)
  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.crt. Αντιστοίχιση αποτυπώματος μέσω getCertFingerprint() (SHA-1 του DER).

Επιπλέον, η updateNssDatabases() πραγματοποιεί εγκατάσταση στις βάσεις δεδομένων NSS ανά χρήστη, όταν είναι διαθέσιμο το certutil: ~/.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

Έλεγχος ταυτότητας

Όλα τα endpoints MITM απαιτούν έλεγχο ταυτότητας διαχείρισης (requireCliToolsAuth). Ο κωδικός sudo αποθηκεύεται προσωρινά σε εμβέλεια module (ποτέ στο globalThis) και διαγράφεται κατά την κλήση της stopMitm().


Παρακάμψεις User-Agent — μεταβλητές περιβάλλοντος (ενότητα 12 του .env.example)

Μεταβλητή Προεπιλογή
CLAUDE_USER_AGENT claude-cli/2.1.280 (external, cli)
CODEX_USER_AGENT codex-cli/0.155.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 να μη διαρρέει το User-Agent: Cursor/X.Y.Z σε έναν ανάντη Claude. Ανατρέξτε στο src/shared/constants/upstreamHeaders.ts για τη λίστα αποκλεισμού, η οποία διατηρείται συγχρονισμένη με τα σχήματα Zod και τις δοκιμές μονάδας.


Ενημέρωση αποτυπωμάτων όταν ένας πάροχος τα αλλάζει

  1. Καταγράψτε την επίσημη κίνηση CLI με το mitmproxy (υποκλοπή TLS + εξαγωγή)
  2. Εξαγάγετε τα JA3/JA4 και την ακριβή σειρά των κεφαλίδων
  3. Ενημερώστε τη σχετική καταχώριση CLI_FINGERPRINTS[...]
  4. Αυξήστε την αντίστοιχη προεπιλεγμένη τιμή *_USER_AGENT στο .env.example
  5. Αν άλλαξε η ίδια η χειραψία TLS, ενημερώστε το σχετικό περίβλημα παρόχου ή την επιλογή browser: του wreq-js
  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 — η κοινή πηγή απόκρυψης ChatGPT Web παραμένει απούσα, ενώ το Codex Web παραμένει παρόν

Δείτε επίσης

  • RESILIENCE_GUIDE.md — τι συμβαίνει όταν μια διαδρομή stealth λαμβάνει ένα 403
  • TROUBLESHOOTING.md
  • ENVIRONMENT.md — πλήρης αναφορά μεταβλητών περιβάλλοντος
  • CLI-TOOLS.md — προβολή της ροής εργασίας MITM για τον χειριστή