
بروكسي HTTP خفي من الجيل التالي يخفي الطلبات بشكل مثالي بحيث تبدو وكأنها صادرة من متصفح Chrome عبر جميع طبقات المكدس التقني.
"لا أصدق ذلك، التمويه الحراري!"
هذا وكيل HTTP مصمم لتجاوز الخدمات التي تستخدم البصمات مثل JA4+ لحظر عملاء HTTP معيّنين. باستخدام هذا الوكيل، يمكنك استخدام عملاء HTTP المفضلين لديك مثل curl وتبقى بصماتك غير قابلة للتمييز بشكل سحري عن بصمات متصفح ويب حقيقي (Chrome/Chromium). كما يأتي thermoptic مع بعض الميزات الممتعة للتخفيف من البصمات المعتمدة على JavaScript. كما أنه يسهّل إجراء الكشط الهجين باستخدام متصفح ويب وعملاء HTTP منخفضي المستوى معًا.
حتى لو لم تكن على دراية ببصمات JA4+، فإذا كنت قد قمت بأي كشط من قبل، فمن المحتمل أنك تعرّضت للحظر بسببها. تستخدم خدمات شهيرة مثل Cloudflare هذه التقنيات (وخدع أخرى) لكشف استخدام عملاء HTTP «غير بشريين» لحظر الطلبات. يمكن لهذه الخدمات أيضًا استخدام هذه البصمات لكشف ما إذا كنت تبدأ جلسة بمتصفح حقيقي ثم تنتقل لاحقًا إلى عميل منخفض المستوى مثل curl. يحل thermoptic كل هذه المشكلات بتقديم بصمة متصفح «حقيقية» موحدة لجميع طلبات الكشط.
فيما يلي مثال على بصمة JA4H (HTTP) لـ curl بدون الوكيل:```
$ curl https://ja4db.com/id/ja4h/
ge11nn090000_b6a016211e8a_000000000000_e3b0c44298fc
هذا مختلف تمامًا عن البصمة التي يُنتجها Chrome عند زيارتك للرابط مباشرة:```
ge11cn19enus_f2808f0d04cf_9a10d4221160_7068f58def6e
ومع ذلك، عندما نستخدم البروكسي لإجراء الطلب، نجد أن بصمة JA4H الخاصة بنا متطابقة بشكل سحري:``` $ curl --proxy http://thermoptic:1234 https://ja4db.com/id/ja4h/ ge11cn19enus_f2808f0d04cf_9a10d4221160_7068f58def6e
(وينطبق الأمر نفسه على بصمة JA4 TLS الخاصة بنا أيضًا، وما إلى ذلك).
## الإعداد
لبدء بروكسي `thermoptic` الذي يُموّه حركة المرور الخاصة بك عبر مثيل Chrome معزول في حاوية على Ubuntu 22.04:
إعداد Docker العادي (يعمل على المضيفات التي لا تحتوي على بيئة تشغيل GPU):```
docker compose up --build
هذا كل شيء، الآن يمكنك تمرير حركة المرور عبره:``` curl --proxy http://127.0.0.1:1234 --insecure https://ja4db.com/id/ja4h/
Important notes:
* بشكل افتراضي يعمل الوكيل بدون مصادقة. إذا كنت تخطط لكشف الوكيل خارجيًا، فتأكد من ضبط المصادقة باستخدام متغيرات البيئة `PROXY_USERNAME` و`PROXY_PASSWORD`.
* إذا كنت لا تريد استخدام `---insecure`، فستحتاج إلى استخدام ملف CA المُنشأ الموجود في `./ssl/rootCA.crt`. يتم إنشاؤه في أول مرة تشغّل فيها `thermoptic`.
* يمكنك توصيل `thermoptic` بأي نسخة Chrome/Chromium تعمل مع علامة `--remote-debugging-port`. هذا ضروري لأنك سترغب في الإعداد والوكيل عبر بيئات أكثر شيوعًا للحفاظ على بصمتك منخفضة الظهور قدر الإمكان (مثل Chrome على Windows).
* تجاوز تكوين GPU مخصص للمضيفين الذين يعملون بـ NVIDIA ولديهم بالفعل NVIDIA runtime/toolkit الخاص بـ Docker. يحجز جهاز GPU، ويُثبّت `/dev/dri`، ويتيح لحاوية Chrome المرفوعة التبديل إلى مسار عرض NVIDIA/Vulkan. لاستخدام هذا، شغّل: `docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build`.
## الميزات
- 🕵️ [وكيل بمطابقة المتصفح](#how-does-this-cloaking-work-exactly) يعيد تشغيل الطلبات عبر جلسة Chrome حقيقية لمطابقة بصمات JA4 بايت ببايت.
- 🤝 لا يتطلب سوى القليل من التعليمات البرمجية المخصصة أو لا يتطلب أيًا منها لدمج عميل HTTP الخاص بك (مثل `curl` أو `requests` وغيرها) مع `thermoptic`، فقط [اضبط الوكيل](#setup) وسيتم التعامل مع بصماتك.
- 🪝 [إطار خطافات](#handling-browser-javascript-fingerprinting-with-thermoptic-hooks) لأتمتة قبل الطلب/بعد الطلب/عند البدء، بحيث يمكنك تشغيل المتصفح بالكامل لحل التحديات أو التقاط العناصر الناتجة.
- 📘 يمكن رؤية مثال لخطاف حل Cloudflare turnstile في [`./hooks/onstart.js`](https://github.com/mandatoryprogrammer/thermoptic/blob/main/hooks/onstart.js).
- 🖥️ [واجهة تحكم المتصفح عبر الويب](#control-the-dockerized-chrome-browser-via-web-ui-xpra) (على `http://127.0.0.1:14111`) للتحكم في نافذة متصفح Chrome داخل Docker. مفيد لتسجيل الدخول يدويًا إلى المواقع ثم استخدام الوكيل بسلاسة لإرسال الطلبات بجلسة تسجيل الدخول الخاصة بك (وللتصحيح).
- 🔌 عيّن URI وكيل HTTP أو SOCKS خارجي عبر متغير البيئة `UPSTREAM_PROXY` في `docker-compose.yml`.
- 🛡️ فحوصات صحة مدمجة وحلقة تحكم في إعادة التشغيل لاكتشاف المتصفحات المتجمدة واستعادتها تلقائيًا دون مراقبة المشغّل المستمرة.
- ⚡ يدعم HTTP/1.1 وHTTP/2، مما يسمح بتمرير الحركة عبر أي من البروتوكولين. (_لاحظ أنه يمكنك التحدث بـ HTTP/1.1 إلى الوكيل، وقد يتفاوض Chrome المُوجَّه مع الموقع الهدف عبر بروتوكول مختلف._)
## كيف يعمل هذا التمويه بالضبط؟

* يتم إرسال طلب HTTP باستخدام عميل HTTP مثل `curl` مع تعيين `thermoptic` كوكيل.
* يحلل `thermoptic` الطلب لتحديد نوع طلب المتصفح الذي *من المفترض* أن يكون عليه بأفضل شكل (مثل: زيارة URL يدويًا؟ إرسال نموذج؟ طلب `fetch()`؟).
* يستخدم `thermoptic` [بروتوكول تصحيح أخطاء Chrome (CDP)](https://chromedevtools.github.io/devtools-protocol/) لتوجيه المتصفح وإعداد صفحة تحاكي الطلب تمامًا كما يحدث عادةً في متصفح ويب حقيقي.
* يطلق `thermoptic` الطلب عبر السياق المُحاكى ويلتقط استجابة HTTP.
* يرسل `thermoptic` استجابة HTTP مرة أخرى إلى العميل.
نظرًا لأن المتصفح يقوم فعليًا بإرسال الطلب باستخدام مجموعته الكاملة، فإن بصمات JA4 الناتجة تكون مطابقة تمامًا.
ملاحظة: نظرًا لأن许多 أنظمة WAF تستخدم بصمة JavaScript على مستوى المتصفحات، فإن `thermoptic` يكشف أيضًا عن خطافات لاستخدام المتصفح في الخطوات الأساسية لعملية الكشط. راجع [هذا القسم](#handling-browser-javascript-fingerprinting-with-thermoptic-hooks) لمزيد من المعلومات حول ذلك.
## لماذا *هذا* النهج بدلاً من الحلول الأخرى؟
بصراحة: النهج الأخرى بها عيوب أساسية تمنعها من أن تكون حلاً عمليًا طويل الأمد لمشكلة بصمة المتصفح.
تحاول العديد من المحاولات الأخرى "للتغلب" على بصمة JA4+ للمتصفح عبر إعادة تنفيذ الطبقات المختلفة لحزمة المتصفح. هذا النهج له عدد من العيوب الخطيرة، مثل:
* يتطلب عناية كبيرة لمطابقة سلوك تنفيذ المتصفح "الحقيقي" بشكل مثالي. ونتيجة لذلك، يمكن استخدام *أي* سلوكيات غريبة أو اختلافات لتمييز هذه العملاء عن تنفيذ المتصفح "الحقيقي".
* محاولة حل المشكلة في طبقة واحدة فقط من الحزمة. يستخدم Chrome بروتوكولات متعددة لتوفير تجربة تصفح الويب. ونتيجة لذلك، حتى إذا أنشأت طبقة TLS مطابقة تمامًا، فقد تكشفك طبقة HTTP إذا لم تكن مطابقة بايت ببايت.
* نظرًا لأن المتصفحات "الحقيقية" تغير سلوكها بانتظام، تتغير بصماتها، ونتيجة لذلك تتطلب هذه الأدوات باستمرار عمل تطوير أكثر كثافة للتعويض.
على النقيض، لأن `thermoptic` يستخدم المتصفح نفسه لتنفيذ طلبات HTTP:
* كل طبقة من الحزمة مثل TCP وTLS وHTTP لا يمكن تمييزها عن المتصفح الحقيقي لأن الطلب يتم *باستخدام* متصفح حقيقي بالطريقة التي *يحدث* بها *عادةً*.
* التغييرات في سلوك المتصفح على الطبقات المختلفة تكون أقل إزعاجًا؛ فقط يجب تحديث المتصفح الذي يتحكم فيه `thermoptic` لمطابقة أحدث مجموعة بصمات.
بالطبع، لا يوجد حل بدون عيوب. راجع وثائق `DOWNSIDES.md` للحصول على قائمة مفصلة بسلبيات نهج `thermoptic`.
## الأسئلة الشائعة
### لماذا الاسم `thermoptic`؟
"Thermoptic" (اختصار "thermoptic camouflage") هو إشارة إلى التمويه الخيالي [الذي استخدمته الرائد في أنمي Ghost in the Shell (1995)](https://ghostintheshell.fandom.com/wiki/Thermoptic_camouflage). في الفيلم، يُظهر هذا التمويه قدرته على إخفاء مرتديه عبر أطياف متعددة من الاكتشاف بما في ذلك الضوء المرئي والإشعاع الحراري. وبالمثل، تحاول هذه الأداة إخفاء المستخدم عن البصمة عبر قنوات متعددة (HTTP وTLS وغيرها).
### JA4+ هي **مجموعة** بصمات! أي منها يزيّف؟
ستزيّف هذه الأداة بصمات JA4 التالية لتكون مطابقة تمامًا لمتصفح Chrome/Chromium المتصل به:
* JA4 (بصمة TLS)
* JA4H (بصمة HTTP)
* JA4X (بصمة شهادة TLS X509)
* JA4T (بصمة TCP)
### ماذا لو أردت استخدام وكيل HTTP/SOCKS خارجي آخر مع هذه الأداة؟