تحليل عميق لأكاماي بوت مانجر v2 في 2026: كيف يسجّل الأتمتة وكيف تمر الأتمتة المشروعة بنظافة

دليل تقني لمهندسي السكريبنغ والباحثين الأمنيين حول آلية عمل أكاماي بوت مانجر v2: كوكي _abck، محرك sensor.js، بصمات JA4 و HTTP/2 SETTINGS، وإشارة X25519MLKEM768 الكمومية الافتراضية في Chrome 131+، مع تطبيق عملي عبر ProxyHat.

Akamai Bot Manager v2 Deep-Dive: 2026 Signals & Clean Bypass

تنبيه قانوني وأخلاقي: هذا المقال موجه للبحث الأمني المرخّص، اختبار الاختراق المصرّح به كتابياً، وأتمتة المراقبة ضمن حدود شروط الخدمة. أي استخدام خارج نطاق التفويض الصريح من المالك قد يُشكّل انتهاكاً لقانون الاحتيال وإساءة استخدام الكمبيوتر (CFAA) في الولايات المتحدة، أو اللائحة العامة لحماية البيانات (GDPR) في الاتحاد الأوروبي، أو قوانين مماثلة. راجع نص CFAA ونص GDPR قبل أي تنفيذ.

أكاماي بوت مانجر v2 (Akamai Bot Manager v2) هو أحد أكثر أنظمة مكافحة البوتات تقدّماً في 2026، وفهم آلية عمله يفتح الباب أمام تجاوز أكاماي بوت مانجر في سياقات مشروعة حصراً: البحث الأمني المرخّص، أتمتة المراقبة المصرّح بها من المالك، واختبار الأداء الداخلي. النظام لا يعتمد على إشارة واحدة بل على مكدس متعدد الطبقات يجمع بين التتبّع السلوكي على العميل، بصمات بروتوكول الشبكة، وسمعة عنوان IP على الخادم. في هذا التحليل العميق نفكّك كل طبقة ونوضح كيف تتفاعل، ولماذا يكفي تعطّل حقل واحد في sensor_data لإبطال كوكي _abck بالكامل، ثم نقدّم تطبيقاً عملياً عبر بروكسي سكني من ProxyHat مع سياق متصفح خفي حقيقي.

تجاوز أكاماي بوت مانجر v2: مكدس الإشارات الكامل

يعمل بوت مانجر v2 على ثلاث طبقات متزامنة. الطبقة الأولى هي التتبّع على العميل: سكربت sensor.js (المعروف داخلياً بـ bmak) يُحقن في الصفحة ويجمع آلاف النقاط السلوكية والبيئية. الطبقة الثانية هي بصمة بروتوكول الشبكة: يفحص خادم أكاماي بصمة TLS (JA4/JA4S) وبصمة HTTP/2 (SETTINGS frames وpseudo-header order) ويقارنها مع User-Agent المُعلَن. الطبقة الثالثة هي سمعة IP على الخادم: يُسجّل كل عنوان IP درجة ثقة مستمرة تُحدّث بناءً على سجلّ تاريخي يشمل ASN، فئة الاستضافة، أنماط الطلبات، وبلاغات سابقة.

النقطة المحورية: الطبقات الثلاث يجب أن تتطابق. متصفح حقيقي بـ User-Agent يقول «Chrome 131 على Windows 11» سيُنتج بصمة TLS تتضمّن مجموعة شفرات محددة، وبصمة HTTP/2 تتوافق مع تنفيذ Chromium، وسلوك ماوس بشريّ. أي تعارض — مثلاً User-Agent يقول Chrome لكن بصمة TLS تشير إلى مكتبة Python requests — يُرفع درجة الخطر فوراً ويُولّد _abck بقيمة «?-8» التي تعني «مشكوك فيه، أعِد التحقّق».

كوكي _abck: العملة الرقمية للثقة

كوكي _abck هو الناتج النهائي لعملية التحقّق. يُضبط بعد أول طلب ويحمل توقيعاً مشفّراً يلخّص نتيجة تحليل sensor_data. القيم الممكنة تتدرّج من «?-4» (تمرير نظيف) إلى «?-8» (فشل، أعِد المحاولة) وصولاً إلى رفض كامل. ما يُربك معظم المهندسين هو أن _abck ليس نهائياً: أكاماي يعيد تقييمه باستمرار. إذا مرّرت الطلبات الأولى بنجاح ثم أرسلت طلباً سادساً بـ TLS fingerprint لا يتطابق مع سابقاته، يُبطَل الكوكي. اطّلع على وثائق أكاماي الرسمية لبوت مانجر للتأكيد على هذه الديناميكية.

كوكي ak_bmsc يسبق _abck ويُضبط من خادم أكاماي قبل تشغيل sensor.js. يعمل كمعرّف جلسة أولي يربط الطلبات اللاحقة ببصمة العميل. حذفه أو إعادة توليده بشكل غير متسق مع _abck يُربك نموذج التسجيل.

كيف يُجمَّع sensor_data: من أحداث الماوس إلى بصمة GPU

حمولة sensor_data (sensor_data أكاماي) هي سلسلة مشفّرة تُرسلها sensor.js إلى نقطة نهاية /_bm/_data عبر طلب POST. تُجمّع الحمولة من عشرات الحقول المُجمّعة في مجموعات:

  • أحداث الإدخال: إحداثيات الماوس الدقيقة، الطوابع الزمنية لكل حركة (بملي ثانية)، اتجاه التمرير، سرعة اللمس على الأجهزة المحمولة، وتسلسل الضغط/الرفع للمفاتيح.
  • خصائص الشاشة والرسوميات: أبعاد النافذة الداخلية (window.innerWidth)، عمق الألوان، نسبة بكسل الجهاز (devicePixelRatio)، سلسلة WebGL renderer وvendor من WEBGL_debug_renderer_info، وعدد نوى WebGL المتاحة.
  • التوقيت الدقيق: performance.now() عند كل نقطة تجميع، فرق التوقيت بين navigationStart وdomContentLoadedEventEnd، وزمن استجابة navigator.hardwareConcurrency.
  • خصائص اللغة والمنطقة: navigator.languages، Intl.DateTimeFormat().resolvedOptions().timeZone، وnavigator.platform.

لماذا يُعطّل حقل واحد الكوكي بالكامل؟ لأن أكاماي لا يفحص الحقول بشكل مستقل بل يبني نموذجاً احتمالياً مشتركاً. إذا أرسلت navigator.platform = "Win32" لكن سلسلة WebGL renderer تشير إلى بطاقة AMD Linux، يصبح التوزيع المشترك مستحيلاً إحصائياً. النتيجة: _abck بقيمة «?-8» وطلب إعادة إرسال sensor_data. هذا يفسر لماذا تفشل مكتبات «تزييف بصمة المتصفح» البسيطة: فهي تعدّل حقولاً مفردة دون الحفاظ على التوزيع المشترك الواقعي.

القاعدة الذهبية: لا «تزيّف» بصمة المتصفح — بل استخدم متصفحاً حقيقياً بسياق نظيف. محرك Chromium حقيقي يُنتج sensor_data صحيحاً تلقائياً لأنه يجمع الحقول من نفس المصدر.

إشارات 2026: X25519MLKEM768 و JA4 و HTTP/2 SETTINGS

في 2026، أصبحت طبقة الشبكة أكثر صرامة. ثلاث إشارات بروتوكولية يجب أن تتطابق مع User-Agent المُعلَن:

X25519MLKEM768: مشاركة المفتاح الكمومي الافتراضية

منذ Chrome 131 (أواخر 2024)، أصبحت مجموعة مشاركة المفتاح X25519MLKEM768 مفعّلة افتراضياً. هذه المجموعة تجمع بين تبادل مفتاح منحنى إهليلجي تقليدي (X25519) ومفتاح Kyber768 المقاوم للحواسيب الكمومية (ML-KEM، المعيار RFC قيد التطوير في IETF). في 2026، تُرسل متصفحات Chromium وFirefox الحديثة X25519MLKEM768 كأول خيار في امتداد supported_groups في ClientHello.

الأهمية العملية: إذا استخدمت مكتبة HTTP قديمة (مثل requests مع OpenSSL 1.1.1) لا تعرف ML-KEM، فلن تُرسل هذه المجموعة، وبصمة JA4 ستفقد القيمة ... المتوقعة من Chrome 131+. يكشف أكاماي هذا التعارض فوراً: User-Agent يقول Chrome 131 لكن ClientHello لا يحوي X25519MLKEM768 — هذا مستحيل على متصفح حقيقي. الحل: استخدم مكتبة HTTP مبنية على BoringSSL أو OpenSSL 3.4+ مع تفعيل ML-KEM، أو — وهو الأفضل — استخدم متصفحاً حقيقياً (Playwright/Puppeteer مع Chromium حديث) الذي يُنتج البصمة الصحيحة تلقائياً.

بصمة JA4: ترتيب الشفرات كتوقيع

JA4 هي بصمة TLS تُلخّص ترتيب مجموعات الشفرات في ClientHello بصيغة t13d1516h2_.... الجزء الأول (t13d) يشير إلى TLS 1.3 مع SNI وعدد مجموعات الشفرات. الجزء الأخير هو تجزئة (hash) لقائمة المجموعات. كل نسخة متصفح تُنتج JA4 ثابتة تقريباً، ما يجعلها معرّفاً فريداً لكل إصدار. أكاماي يحتفظ بجدول JA4 لكل إصدارات المتصفحات الشائعة ويقارنها مع User-Agent. تعارض واحد = انذار.

HTTP/2 SETTINGS وترتيب pseudo-headers

إشارة أكثر دقّة من JA4: بصمة HTTP/2. ترتيب إعدادات SETTINGS (مثل HEADER_TABLE_SIZE، ENABLE_PUSH، INITIAL_WINDOW_SIZE) وترتيب pseudo-headers (:method، :authority، :scheme، :path) يختلف بين تنفيذات Chromium وFirefox وSafari. أكاماي يفحص هذا الترتيب ويبني بصمة HTTP/2. مكتبة curl-impersonate أو متصفح حقيقي يحلّ هذه المشكلة؛ مكتبة httpx العادية لا تحلّها لأنها تستخدم تنفيذ hyper الافتراضي بترتيب مختلف.

الإشارةChrome 131+ حقيقيrequests/httpxالتطابق المطلوب
X25519MLKEM768 في supported_groupsنعم، أولاًلا (OpenSSL قديم)يجب أن يتطابق مع UA
JA4 fingerprintt13d1516h2_...مختلف تماماًنعم
HTTP/2 SETTINGS orderترتيب Chromiumترتيب hyperنعم
User-AgentChrome 131+ Win/Mac/Linuxغالباً افتراضي قديم

لماذا البروكسي السكني ضروري: سمعة IP و ASN

حتى لو نجحت في تمرير كل إشارات العميل والشبكة بشكل مثالي، تبقى طبقة سمعة IP. أكاماي يوزّن سمعة عنوان IP بثقل كبير في درجة الثقة النهائية. عناوين مراكز البيانات (datacenter ASNs) من مزوّدين مثل AWS، OVH، DigitalOcean، وHetzner مُسجّلة مسبقاً كـ «bot-likely» في قاعدة بيانات أكاماي. هذا التسجيل المسبق يعني أن الطلب الأول من عنوان IP في مركز بيانات يبدأ بدرجة سلبية قبل أي تحليل سلوكي.

البروكسي السكني (residential proxy) يحلّ هذه المشكلة لأنه يوجّه الطلبات عبر عناوين IP مخصّصة لمزوّدي خدمات الإنترنت المنزلية (ISP). عنوان IP من Comcast أو Deutsche Telekom أو Vodafone يبدأ بدرجة ثقة محايدة أو إيجابية لأنه ينتمي إلى ASN سكني حقيقي. هذا الفرق ليس هامشياً: في اختبارات داخلية، يمكن أن ترفع نسبة نجاح الطلبات من أقل من 15% مع بروكسي مركز بيانات إلى أكثر من 90% مع بروكسي سكني عالي الجودة، عند إبقاء باقي الإشارات ثابتة.

البروكسي المحمول (mobile proxy) يوفّر ميزة إضافية: عناوين IP من شبكات الجيل الرابع/الخامس تُعتبر موثوقة جداً لأنها تتبدّل بشكل طبيعي بين المستخدمين، ما يجعل التمييز بين البوت والمستخدم الحقيقي أصعب. اطّلع على مواقع ProxyHat المتاحة لاختيار البلد المناسب لهدفك.

تطبيق عملي مع ProxyHat: سياق متصفح خفي حقيقي

النهج الصحيح لا يكمن في «تزييف» إشارات أكاماي بل في تشغيل متصفح حقيقي بسياق نظيف عبر بروكسي سكني. إليك تطبيقاً عملياً باستخدام Playwright مع Chromium حديث عبر ProxyHat.

الخطوة 1: تكوين البروكسي السكني

بوابة ProxyHat تعمل على gate.proxyhat.com بمنفذ HTTP 8080. استهداف بلد محدّد يتم عبر حقل اسم المستخدم:

# HTTP proxy — استهداف الولايات المتحدة
curl -x http://user-country-US:pass@gate.proxyhat.com:8080 https://example.com

# SOCKS5 proxy — استهداف ألمانيا، مدينة برلين
curl -x socks5://user-country-DE-city-berlin:pass@gate.proxyhat.com:1080 https://example.com

# جلسة لاصقة (sticky) للحفاظ على نفس IP
http://user-session-abc123-country-US:pass@gate.proxyhat.com:8080

الجلسة اللاصقة مهمة مع أكاماي: _abck مرتبط بعنوان IP. إذا تبدّل IP في منتصف الجلسة، يُبطَل الكوكي ويُطلب إعادة التحقّق. استخدم علم session-XXXX للحفاظ على نفس IP طوال الجلسة.

الخطوة 2: إطلاق Chromium حقيقي عبر Playwright

from playwright.sync_api import sync_playwright

PROXY = {
    "server": "http://gate.proxyhat.com:8080",
    "username": "user-session-sess01-country-US",
    "password": "pass"
}

with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=True,
        proxy=PROXY,
        args=[
            "--disable-blink-features=AutomationControlled",
            "--disable-features=IsolateOrigins,site-per-process"
        ]
    )
    context = browser.new_context(
        user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                   "AppleWebKit/537.36 (KHTML, like Gecko) "
                   "Chrome/131.0.0.0 Safari/537.36",
        viewport={"width": 1920, "height": 1080},
        locale="en-US",
        timezone_id="America/New_York"
    )
    page = context.new_page()
    page.goto("https://target-site.com")
    # انتظر اكتمال sensor.js وتثبيت _abck
    page.wait_for_timeout(3500)
    cookies = context.cookies()
    abck = [c for c in cookies if c["name"] == "_abck"]
    print(f"_abck value: {abck[0]['value'] if abck else 'MISSING'}")
    browser.close()

نقاط حاسمة في هذا الكود:

  • Chromium حقيقي يُنتج بصمة TLS وHTTP/2 صحيحة تلقائياً بما فيها X25519MLKEM768 في Chrome 131+.
  • البروكسي السكني يضمن أن عنوان IP يبدأ بدرجة ثقة محايدة بدلاً من الدرجة السلبية لمركز البيانات.
  • الجلسة اللاصقة تحافظ على نفس IP طوال الجلسة، ما يمنع إبطال _abck بسبب تبدّل IP.
  • التأخير 3500 مللي ثانية يمنح sensor.js وقتاً كافياً لتنفيذ دورة التحقّق الأولى وتثبيت _abck بقيمة «?-4».

الخطوة 3: إعادة استخدام الكوكي في طلبات HTTP لاحقة

بعد تثبيت _abck وak_bmsc بنجاح، يمكنك استخراج الكوكيز وإعادة استخدامها في طلبات HTTP أسرع عبر curl-impersonate أو tls-client، بشرط أن تستخدم نفس عنوان IP (نفس الجلسة اللاصقة) ونفس بصمة TLS. هذا النمط مفيد لجمع البيانات بكفاءة بعد المرحلة الأولى البطيئة نسبياً (التحقّق السلوكي).

import requests

session = requests.Session()
proxies = {
    "http": "http://user-session-sess01-country-US:pass@gate.proxyhat.com:8080",
    "https": "http://user-session-sess01-country-US:pass@gate.proxyhat.com:8080"
}
# أعد استخدام الكوكيز المستخرجة من Playwright
session.cookies.set("_abck", abck_value, domain=".target-site.com")
session.cookies.set("ak_bmsc", ak_bmsc_value, domain=".target-site.com")
resp = session.get("https://target-site.com/api/data", proxies=proxies)
print(resp.status_code)

تحذير: هذا النمط يعمل فقط إذا كانت بصمة TLS لـ requests متطابقة مع بصمة Chromium. في الواقع، requests العادية لا تُنتج نفس البصمة. الحل العملي هو curl-impersonate أو البقاء على Playwright للطلبات الحساسة. راجع وثائق ProxyHat لتفاصيل التكوين المتقدّمة.

أخطاء شائعة وحالات حدية

الخطأ 1: الاعتماد على headless=False وحسب

تشغيل المتصفح في الوضع المرئي لا يكفي. أكاماي يفحص navigator.webdriver وغياب chrome.runtime ووجود window.cdc_adoQpoasnfa76pfcZLmcfl_Array (علامة Chrome DevTools). استخدم إضافة مثل playwright-stealth أو حقن سكربت يزيل هذه العلامات قبل تنفيذ sensor.js.

الخطأ 2: تبدّل IP أثناء الجلسة

البروكسي الدوّار لكل طلب (per-request rotation) ممتاز لتوزيع الحمل، لكنه كارثي مع أكاماي. _abck مرتبط بـ IP الأصلي. استخدم جلسة لاصقة طوال دورة حياة _abck (عادة 3-7 أيام)، ثم بدّل الجلسة فقط عند انتهاء صلاحية الكوكي.

الخطأ 3: تجاهل timezone و locale

إذا كان عنوان IP في الولايات المتحدة لكن Intl.DateTimeFormat().resolvedOptions().timeZone يعيد «Europe/Berlin»، يُسجّل أكاماي هذا التعارض. اضبط timezone_id وlocale في سياق Playwright لتتطابق مع البلد المُستهدف عبر البروكسي.

الخطأ 4: إرسال طلبات بسرعة كبيرة

معدّل 1500 طلب/ثانية من نفس IP يُفعّل أنماط الكشف السلوكية حتى مع _abck صالح. حافظ على معدّل واقعي (10-30 طلب/دقيقة لكل IP سكني) واستخدم التأخير العشوائي بين 200 مللي ثانية و1500 مللي ثانية.

الخطأ 5: استخدام User-Agent قديم

User-Agent يقول Chrome 120 في 2026 غير منطقي ويُرفع درجة الخطر. حدّث User-Agent وبصمة JA4 معاً لتتطابق مع أحدث إصدار Chromium مستقر. راجع أسعار ProxyHat لاختيار الباقة المناسبة لحجم الطلبات.

متى يكون هذا مناسباً: البحث الأمني والمراقبة المصرّح بها

التقنيات الموضّحة هنا مناسبة حصراً لـ:

  • اختبار الاختراق المصرّح به كتابياً على أصول تملكها أو لديك تفويض صريح باختبارها.
  • أتمتة المراقبة الداخلية لخدماتك الخاصة (تتبّع ترتيب SERP لعلامتك التجارية، مراقبة أسعار منتجاتك).
  • البحث الأمني الأكاديمي مع موافقة لجنة الأخلاقيات وبيان نطاق واضح.
  • تدقيق الامتثال للتحقّق من أن أنظمتك تلتزم بسياساتها المُعلَنة.

غير مناسبة لـ: تخطّي قوائم انتظار التذاكر، شراء كميات محدودة من الأحذية للبيع المُعاد، إنشاء حسابات وهمية، أو أي نشاط ينتهك شروط خدمة الطرف المستهدف. هذه الأنشطة قد تُعرّضك لمسؤولية مدنية وجنائية. اطّلع على حالة استخدام تتبّع SERP لفهم نمط استخدام مشروع.

النقاط الرئيسية

  • أكاماي بوت مانجر v2 يعتمد على ثلاث طبقات متزامنة: تتبّع العميل (sensor.js/bmak)، بصمة الشبكة (JA4 + HTTP/2 SETTINGS)، وسمعة IP على الخادم. الطبقات الثلاث يجب أن تتطابق.
  • كوكي _abck ليس نهائياً: يُعاد تقييمه باستمرار. تبدّل IP أو تعارض بصمة TLS يُبطله فوراً.
  • حمولة sensor_data تُجمّع من عشرات الحقول في نموذج احتمالي مشترك. تعديل حقل واحد دون الحفاظ على التوزيع المشترك يُفشل التحقّق.
  • في 2026، إشارة X25519MLKEM768 الافتراضية في Chrome 131+ يجب أن تظهر في ClientHello. غيابها مع User-Agent يقول Chrome 131+ كاشف فوري.
  • البروكسي السكني ضروري لأن عناوين مراكز البيانات مُسجّلة مسبقاً بدرجة سلبية. الجلسة اللاصقة تحافظ على _abck صالحاً.
  • النهج الصحيح: متصفح Chromium حقيقي عبر بروكسي سكني، لا «تزييف» إشارات منفصلة.

ابدأ بـ باقة ProxyHat السكنية وجرّب التكوين أعلاه على هدف مصرّح به. الفهم العميق لمكدس إشارات أكاماي هو ما يفصل بين الأتمتة النظيفة المستدامة والطلبات المرفوضة المتكرّرة.

¿Listo para empezar?

Accede a más de 50M de IPs residenciales en más de 148 países con filtrado impulsado por IA.

Ver preciosProxies residenciales
← Volver al Blog