العودة إلى المدونة

كيفية استخراج خريطة كشف الموقع: العثور على سكريبتات fingerprint بأنفسنا

حالة AliExpress: بصمة الصوت المخفية كشفت عن نفسها من خلال سماعات Bluetooth. نقوم بتحليل المنهج العملي - كيفية تحديد بائع مكافحة الاحتيال في ساعة واحدة، العثور على نصوصه، تجهيز واجهة برمجة التطبيقات fingerprint-API في أدوات المطورين ورؤية أي الإشارات يتم التقاطها فعليًا من قبل المنصة وأين يتم إرسالها.

📅١٢ ربيع الأول ١٤٤٨ هـ
كيفية استخراج خريطة كشف الموقع: العثور على سكريبتات fingerprint بأنفسنا

في 20 أغسطس 2026، نشر المطور ماث كالاگان (مدونة laserphile) تحليلًا لخطأ غريب: كانت سماعاته البلوتوثية مع multipoint تتوقف عن التبديل من الكمبيوتر إلى الهاتف كلما تم فتح علامة تبويب AliExpress. لم يتكهن — بل قام بأدوات API المتصفح ورأى ما يحدث داخل الصفحة. اتضح أن هناك سكريبتين مشوشين من مجموعة مكافحة الاحتيال في Alibaba كانا يرفعان سياق الصوت ويأخذان بصمة الجهاز من خلال الصوت الذي لا يسمعه أحد.

هذه هي الصورة المثالية لما لا يفعله تقريبًا أحد قبل إعداد الملفات الشخصية أو تشغيل المتصفح: لا يقرأ مجموعة الكشف في الموقع، بل يخمنها. أدناه — منهجية عملية لكيفية سحب خريطة الكشف لموقع معين بنفسك، في غضون ساعة، دون عكس التشويش ودون خدمات مدفوعة.

لماذا سحب خريطة الكشف

تبدو الدورة النموذجية هكذا: يتم حظر الحسابات — نقوم بتدوير إعدادات المتصفح المضاد للكشف بشكل عشوائي — نغير البروكسي — يتم حظرنا مرة أخرى. بين "يتم الحظر" و"الإعدادات" لا توجد بيانات: من غير الواضح ما الذي يقرأه الموقع بالضبط وعلى أي طبقة يتم القبض عليه.

تغلق خريطة الكشف هذه الفجوة. إنها قائمة: ما هو بائع الحماية الموجود، وما هي السكريبتات التي تنفذها، وما هي واجهات API التي تتعامل معها وأين تذهب النتيجة. بعد ذلك يصبح من الواضح أين هو المكان الضيق حقًا — في IP، في بصمة الشبكة أو في طبقة الأجهزة للمتصفح. هذا مفيد بنفس القدر لثلاث جماهير:

  • تعدد الحسابات — لفهم الإشارة التي يتم من خلالها دمج الملفات الشخصية. لديهم IPs مختلفة، لكن مجموعة الصوت، وWebGL-renderer وhardwareConcurrency غالبًا ما تكون متشابهة عبر المزرعة بأكملها.
  • التجريف — لفهم ما إذا كان من الضروري رفع المتصفح على الإطلاق أو إذا كانت المهمة تحل بواسطة عميل HTTP مع بصمة TLS صحيحة.
  • الخصوصية — لرؤية ما يجمعه المتجر أو الخدمة عن جهازك بخلاف الكوكيز.

الخطوة 1. تحديد بائع الحماية عبر الشبكة

أول شيء تفعله هو فتح DevTools على علامة التبويب Network، تحميل الصفحة ومشاهدة الرؤوس والكوكيز في الوثيقة الأولى. العلامات التعريفية معروفة وثابتة:

  • CF-RAY في رؤوس الاستجابة وcookie cf_clearance — Cloudflare.
  • كوكي _abck وسكريبت مع وظيفة bmak — Akamai Bot Manager.
  • المتغيرات والكوكيز مع بادئة _px — PerimeterX (HUMAN).
  • كوكي datadome وJS منفصل من نطاق البائع — DataDome.
  • خالي 429 بدون جسم استجابة — توقيع مميز لـ Kasada.

إذا كنت كسولًا للقيام بذلك يدويًا، هناك كاشفات مفتوحة مثل microlinkhq/is-antibot (30+ مزودين) وامتدادات المتصفح للكشف عن 26+ بائعين. إنها تعطي إجابة سريعة أولية، لكنها لا تجيب على السؤال الرئيسي — ما الذي يتم قياسه بالضبط في متصفحك. يجب الذهاب أبعد من ذلك.

الخطوة 2. استخراج قائمة السكريبتات المشبوهة

قم بتصفية Network حسب نوع JS واكتب كل ما يتم تحميله ليس من النطاق الرئيسي أو موجود في الأدلة الخدمية. في حالة AliExpress، كانت هناك ملفان مع مسارات خدمية واضحة:

  • assets.aliexpress-media.com/g/AWSC/uab/1.140.0/collina.js
  • assets.aliexpress-media.com/g/AWSC/fireyejs/1.231.67/fireyejs.js

علامات سكريبت مكافحة الاحتيال: كود مشوش، إصدار في المسار، نطاق فرعي منفصل للستاتيكا، عدم وجود أي صلة بالجزء المرئي من الصفحة. لا تحتاج لفتح وقراءة التشويش — في الخطوة التالية، سيخبرك السكريبت بنفسه عن نفسه.

الخطوة 3. أدوات API بصمة الصوت

هذه هي جوهر الطريقة بالضبط وما فعله كالاگان: لقد غلف مُنشئ AudioContext وAudioNode.prototype.connect()، وبعد ذلك رأى سياقين صوتيين حيين على الصفحة، حيث لا يوجد أي عنصر وسائط ولا أي استدعاء لـ play().

المنطق بسيط: تقوم بتبديل الطريقة التي تهمك بلفافتها الخاصة، التي تسجل الاستدعاء مع المكدس وتقوم بتمرير التحكم إلى الأصل. يُظهر مكدس الاستدعاءات أي سكريبت قام باستدعاء API. من الأسهل إدخال مثل هذه الشيفرة عبر DevTools Sources → Snippets أو عبر امتداد ينفذ الشيفرة عند document-start — من المهم أن تصل قبل تحميل سكريبت مكافحة الاحتيال.

مجموعة الحد الأدنى من الفخاخ التي تغلق معظم الإشارات:

  1. HTMLCanvasElement.prototype.toDataURL وgetImageData — بصمة الكانفاس.
  2. WebGLRenderingContext.prototype.getParameter — نموذج بطاقة الرسوميات والسائق، دقة الشيدرات.
  3. AudioContext / OfflineAudioContext وAudioNode.prototype.connect — بصمة الصوت.
  4. المستخلصات navigator.hardwareConcurrency، navigator.deviceMemory، navigator.plugins، navigator.webdriver.
  5. RTCPeerConnection — WebRTC والعناوين المحلية.
  6. screen.width/height، devicePixelRatio، Intl.DateTimeFormat().resolvedOptions() — الشاشة والمنطقة الزمنية.
  7. navigator.mediaDevices.enumerateDevices — قائمة أجهزة الصوت والفيديو.

بعد الانتهاء من التشغيل، ستحصل على قائمة: أي من هذه API تم استدعاؤها، كم مرة ومن قام بذلك. في الحالة المفككة، كانت سكريبتات Alibaba تتعامل مع الكانفاس وtoDataURL، وWebGL-renderer ودقة الشيدرات، والصوت عبر المذبذب والمحلل، وأحجام الشاشة وdevicePixelRatio، وhardwareConcurrency وdeviceMemory، والإضافات، ودعم الترميزات، وWebRTC، وأوقات الأداء، وأنماط حركة الماوس واللمسات، وأجهزة استشعار حركة الجهاز وخصائص مؤشرات الأتمتة.

ماذا كانت تفعل الرسوم البيانية الصوتية

من المفيد فهم كيف يبدو القياس، لتتمكن من التعرف عليه في أماكن أخرى. كان الرسم البياني هكذا: مذبذب مسنن → AnalyserNodeScriptProcessorNode، الذي يقرأ نتيجة التحليل → GainNode مع تعزيز صفري → destination. لا يوجد صوت، ولا علاقة للصوت — ببساطة لا يوجد. لكن الاتصال بـ destination، حسب صياغة المؤلف، يجبر المتصفح على معالجة الرسم البياني بنشاط، على الرغم من أن مستوى الصوت النهائي يساوي صفرًا. كانت مسار الصوت الحي هو الذي أبقى مسار البلوتوث مفتوحًا، مما كسر تبديل multipoint للسماعات.

تختلف معالجة هذه الإشارة حسب المعالج، والأجهزة الصوتية، ونظام التشغيل، والمتصفح، والسائقين — ومن هنا يأتي المعرف المستقر، الذي يتحمل تغيير IP وتنظيف الكوكيز. التحليل المفصل لهذه الطبقة بالذات وإعداد الملفات الشخصية لها — في المقالة حول حماية من بصمة سياق الصوت.

الخطوة 4. التقاط إرسال النتيجة

جمع البيانات بدون إرسال غير مجدي، لذا فإن الخطوة التالية هي العثور على المكان الذي تذهب إليه البصمة المجمعة. قم بتصفية Network حسب XHR/Fetch وانظر بشكل منفصل إلى الطلبات من نوع ping — التي يولدها navigator.sendBeacon، الذي يحب السكريبتات التليمترية استخدامه، لأنه يتحمل الخروج من الصفحة.

من المفيد دائمًا لف لف fetch، XMLHttpRequest.prototype.send وnavigator.sendBeacon — حينها سترى جسم الطلب قبل أن يغادر. كن مستعدًا لأن المحتوى سيكون مُسلسلًا ومُشفرًا: في حالة AliExpress، كانت البيانات مشفرة قبل إرسالها إلى تليمترية Alibaba. لكن حتى بهذه الطريقة، تحصل على حقيقتين: عنوان المستلم ووقت الإرسال بالنسبة لأفعالك.

إذا كان الموقع يعمل ليس فقط في المتصفح، ولكن عبر تطبيق موبايل أو عميل منفصل، يتم حل نفس السؤال على مستوى الحركة، وليس DOM — تم وصف منهجية الاعتراض والتحليل في تحليل تدقيق الحركة عبر mitmproxy.

الخطوة 5. مطابقة الخريطة مع ملفك الشخصي

الآن لديك قائمة بالإشارات التي يقرأها الموقع بالفعل. يتبقى التحقق مما يقدمه ملفك الشخصي العامل بناءً على هذه الإشارات. الترتيب هو: قم بسحب القيم في متصفح عادي، ثم في كل ملف شخصي مضاد للكشف وقارن.

هناك شيئان مهمان في نفس الوقت: يجب أن تكون القيم مختلفة بين الملفات الشخصية وثابتة داخل ملف شخصي واحد بين الجلسات. يبدو أن الملف الشخصي الذي تتقافز بصمته عند كل تشغيل مشبوه بالنسبة لمكافحة الاحتيال، تمامًا مثل عشرة ملفات شخصية بنفس البصمة.

تحقق بشكل منفصل مما إذا كانت التبديلات موجودة بالفعل على الطبقة المطلوبة. هنا يُظهر التباين عبر المتصفحات: Firefox من الإصدار 118 يعطي مخرجات ثابتة لـ WebAudio، ووفقًا لبيانات التحليل، 99.24% من المستخدمين يتجمعون حول ثلاث قيم؛ Brave يضيف بيانات عشوائية ومنذ 22 أغسطس 2026، يحظر تحديدًا هذه السكريبتات من AliExpress، مذكرًا أن حماية من بصمة الصوت كانت موجودة لديه بشكل افتراضي لأكثر من ست سنوات؛ Safari يضيف أخطاء في المخازن الصوتية؛ بينما Chrome لا يحتوي على أي حماية عدوانية.

المزالق

  • السكريبت قد عمل بالفعل. حظر الملف لا يقتل سياق الصوت الذي تم إنشاؤه بالفعل — يشير المؤلف مباشرة إلى أنه يجب إغلاق علامات التبويب المفتوحة. ينطبق نفس الشيء على أدواتك: إذا تم وضع اللفافة بعد السكريبت، فلن ترى شيئًا.
  • الحظر يكسر الوظائف. غالبًا ما تستجيب مجموعة مكافحة الاحتيال أيضًا لأشياء شرعية — التوثيق، الدفع، حماية ضد الروبوتات من إساءة الاستخدام الحقيقية. سحب خريطة الكشف وإزالة السكريبتات هما مهمتان مختلفتان؛ الثانية تكسر الموقع.
  • ليس هناك نسخة واحدة من الكشف. قد تختلف المجموعة حسب الجغرافيا، ونوع الجهاز ومجموعة A/B. من المنطقي سحب الخريطة من نفس IP ونفس الجهاز الذي تعمل عليه فعليًا، وإلا فإنك تصف تكوين شخص آخر.
  • تكتشف أدوات القياس نفسها. تفقد الطرق الأصلية المعاد تعريفها toString الصحيح، بينما يترك المصحح المتصل آثارًا. بالنسبة للاستخبارات، هذا ليس حرجًا، لكن لا تخلط بين الملف الشخصي الاستكشافي والملف القتالي — تم تحليل تقنيات تمويه الأتمتة في الدليل حول تمويه المتصفح بدون رأس.

ما هو البروكسي المطلوب للنتيجة

الاستنتاج العملي الرئيسي من هذه الخريطة يكاد يكون دائمًا واحدًا: IP هو فقط الطبقة الأولى، ويتم التحقق منها قبل جميع الطبقات الأخرى. إذا كانت مجموعة مكافحة الاحتيال ترى عنوان الاستضافة بالفعل في مرحلة الطلب، فلن تصل الأمور إلى الرسم البياني الصوتي والكانفاس — ستحصل على تحدٍ أو نتيجة فارغة وستقوم بإصلاح شيء خاطئ.

لذا فإن منطق الاختيار هو كالتالي. بالنسبة للمواقع ذات المجموعة الجادة (Akamai، DataDome، PerimeterX، تطويرات خاصة بمستوى Alibaba)، تعتبر البروكسيات السكنية هي القاعدة — عناوين مزودين حقيقيين لا يتم استبعادها في أول فلتر. بالنسبة للتطبيقات المحمولة والمواقع التي يجلس فيها الجمهور الرئيسي على الهواتف الذكية، تكون البروكسيات المحمولة أقرب إلى الملف الشخصي الطبيعي: تجعل CGNAT من العنوان مشتركًا بشكل واضح بين العديد من المستخدمين الحقيقيين.

والعكس صحيح أيضًا: إذا أظهرت الخريطة أن الموقع يقتصر على الرؤوس والكوكيز، وليس هناك بصمة JS ثقيلة، فإن مزرعة المتصفح تكون زائدة، وتُحل المهمة بواسطة عميل HTTP عادي وعناوين مركز البيانات.

الاستنتاج

تعتبر حالة السماعات قيمة ليس بسبب حقيقة بصمة الصوت نفسها — فقد تم معرفة ذلك لسنوات. بل القيمة تكمن في الطريقة: لم يصدق الشخص التخمينات، بل غلف طريقتين من API المتصفح وفي مساء واحد حصل على قائمة كاملة بما يتم سحبه منه، والعنوان الذي تذهب إليه. نفس الأسلوب يستغرق ساعة على أي موقع تعمل عليه، ويستبدل شهور من التجريب العشوائي للإعدادات. قم بسحب خريطة الكشف قبل إصلاح الحظر — وإلا هناك خطر إنفاق الميزانية على البروكسيات حيث كانت المشكلة في WebGL-renderer المتشابه على جميع الملفات الشخصية.