هذا المقال تفسيري وتشخيصي للفرق التي تريد فهم سبب اختلاف سلوك reCAPTCHA بين المتصفحات والجلسات وبيئات التشغيل. الهدف ليس تعليم إخفاء الإشارات، بل معرفة ما الذي يراقبه reCAPTCHA حتى تتمكن من فصل مشاكل الجلسة والتهيئة عن مشاكل الحل نفسها.
عندما تفهم طبقات الكشف، يصبح من الأسهل تحديد ما إذا كانت المشكلة في حالة المتصفح أو تسلسل الطلبات أو طريقة حقن الرمز أو سياسات الموقع. استخدم هذه المعرفة في بيئات اختبار مصرح بها ومسارات عمل يملكها فريقك.
طبقة الكشف 1: فحص بيئة JavaScript
يقوم reCAPTCHA بتنفيذ تحقيقات JavaScript للكشف عن المتصفحات مقطوعة الرأس وأطر التشغيل الآلي.
الكشف عن navigator.webdriver
مؤشر الأتمتة الأساسي:
// Selenium/Puppeteer set this automatically
navigator.webdriver === true // → Automation detected
// Real browser
navigator.webdriver === undefined // or false → Normal browser
عندما يكون navigator.webdriver هو true، يضع reCAPTCHA على الفور علامة على الجلسة على أنها آلية، مما يؤدي عادةً إلى الحصول على درجة 0.1 أو أقل.
واجهات برمجة تطبيقات المتصفح مفقودة
يبحث reCAPTCHA عن واجهات برمجة التطبيقات (APIs) التي تتجاهلها المتصفحات مقطوعة الرأس أو تنفذها بشكل مختلف:
// Probes reCAPTCHA performs (simplified)
const checks = {
// Chrome-specific object
hasChrome: !!window.chrome,
hasChromeRuntime: !!(window.chrome && window.chrome.runtime),
// Plugin and MIME type arrays
pluginCount: navigator.plugins.length,
mimeTypeCount: navigator.mimeTypes.length,
// Notification permission
notificationPermission: Notification.permission,
// Speech synthesis voices
speechVoices: window.speechSynthesis.getVoices().length,
// Performance observer
hasPerformanceObserver: typeof PerformanceObserver !== "undefined",
};
| دقق | المتوقع (متصفح Chrome الحقيقي) | كروم مقطوعة الرأس | الكشف |
|---|---|---|---|
window.chrome |
كائن | غير محدد أو الحد الأدنى | الأتمتة |
navigator.plugins |
2-5 ملحقات | مصفوفة فارغة | الأتمتة |
navigator.permissions |
كائن مع الاستعلام () | قد يرمي أو يكون في عداد المفقودين | الأتمتة |
Notification.permission |
"افتراضي" | قد يرمي | الأتمتة |
window.speechSynthesis |
كائن مع الأصوات | فارغة أو مفقودة | الأتمتة |
العبث بسلسلة النموذج الأولي
تتجاوز أدوات الأتمتة المتطورة واجهات برمجة تطبيقات المتصفح لإخفاء وجودها. اختبارات reCAPTCHA للتلاعب:
// reCAPTCHA may check if native functions were modified
const nativeToString = Function.prototype.toString;
const pluginsToString = navigator.plugins.toString();
// Overridden functions have different toString output:
// Native: "function get plugins() { [native code] }"
// Overridden: "function () { return [...fakePlugins] }"
طبقة الكشف 2: بصمات القماش وWebGL
بصمة قماش
يعرض reCAPTCHA العناصر المخفية على اللوحة ويقرأ بيانات البكسل. تختلف النتيجة حسب نظام التشغيل ووحدة معالجة الرسومات ومحرك عرض الخطوط وإعدادات الصقل:
// Simplified canvas fingerprint
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
ctx.textBaseline = "alphabetic";
ctx.font = "14px Arial";
ctx.fillStyle = "#f60";
ctx.fillRect(125, 1, 62, 20);
ctx.fillStyle = "#069";
ctx.fillText("CaptchaTest,!", 2, 15);
const fingerprint = canvas.toDataURL();
// Unique per browser/OS/GPU combination
إشارات الكشف:
- تم اكتشاف نفس بصمة الإصبع عبر مختلف أجهزة OS/browsers → التي تم الإبلاغ عنها
- تُرجع عمليات اللوحة القماشية بيانات /blank الموحدة → في بيئة مقطوعة الرأس
- تتطابق بصمة الإصبع مع نمط Chrome بدون رأس المعروف الذي تم وضع علامة عليه بواسطة →
بصمة WebGL
const gl = document.createElement("canvas").getContext("webgl");
const debugInfo = gl.getExtension("WEBGL_debug_renderer_info");
const vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
// Real browser: "ANGLE (NVIDIA GeForce RTX 3060 Direct3D11 vs_5_0 ps_5_0)"
// Headless Chrome: "Google Inc. (Google SwiftShader)" ← Strong bot signal
SwiftShader هو عارض GPU الخاص ببرامج Google والذي يتم استخدامه في حالة عدم توفر GPU للأجهزة - وهو مؤشر واضح للبيئة بدون رأس.
طبقة الكشف 3: التحليل السلوكي
هذه هي أقوى طبقة كشف في reCAPTCHA. يراقب سلوك المستخدم بدءًا من تحميل الصفحة وحتى إرسال النموذج.
تحليل حركة الماوس
reCAPTCHA records:
├─ Mouse coordinates at ~60fps intervals
├─ Velocity and acceleration at each point
├─ Trajectories between clickable elements
├─ Hover patterns over links and buttons
├─ Micro-movements while "stationary"
└─ Natural overshoot when targeting elements
Human pattern:
- Curved paths with variable speed
- Natural acceleration/deceleration (Fitts's Law)
- Random micro-jitter during hovering
- Occasional overshoot and correction
Bot pattern:
- Zero mouse events (no mouse simulation)
- Straight lines at constant speed
- Perfect targeting (no overshoot)
- Identical patterns across sessions
تحليل لوحة المفاتيح
reCAPTCHA records:
├─ Inter-key interval for each key pair
├─ Key hold duration (keydown to keyup)
├─ Error rate (backspace frequency)
├─ Typing rhythm consistency
└─ Input method (keyboard vs paste vs JavaScript)
Human pattern:
- Variable intervals (80-300ms typical)
- Faster for common character pairs
- Occasional errors and corrections
- keydown → keypress → keyup sequence
Bot pattern:
- Constant intervals or instant input
- No keypress events (value set via JS)
- Zero errors
- All characters appear simultaneously
التوقيت وتسلسل التفاعل
reCAPTCHA records:
├─ Time from page load to first interaction
├─ Time from CAPTCHA rendering to click
├─ Scroll events and depths
├─ Focus/blur events on form fields
└─ Tab between fields vs click between fields
Suspicious patterns:
- First interaction < 1 second after page load
- CAPTCHA clicked immediately after rendering
- No scroll events before interacting with below-fold content
- All form fields filled in <500ms
طبقة الكشف 4: تحليل الشبكة وIP
قاعدة بيانات سمعة عنوان IP
تحتفظ Google باستخبارات IP واسعة النطاق:
- نطاقات مراكز البيانات المعروفة: AWS (52.x.x.x, 54.x.x.x)، وGCP، وAzure، وDigitalOcean، وما إلى ذلك.
- موفرو خدمة proxy/VPN المعروفون: NordVPN، ExpressVPN، خدمات الوكيل التجارية
- عقد خروج Tor: قائمة عامة، يتم تحديثها بانتظام
- سجل إساءة الاستخدام: عناوين IP المتورطة في البريد العشوائي أو التجريد أو زراعة اختبار CAPTCHA
- الأنماط الجغرافية: تشير التغييرات السريعة في الموقع إلى أنماط قفزات VPN
بصمات الأصابع TLS
يُنتج كل عميل HTTP بصمة مصافحة TLS فريدة (JA3/JA4):
Chrome 120: JA3 = 771,4865-4866-4867-49195-49199-49196..
Python/requests: JA3 = 771,4866-4867-4865-49196-49200..
curl/libcurl: JA3 = 771,49196-49200-159-52393-52392..
يتحقق reCAPTCHA من تطابق بصمة TLS مع وكيل المستخدم المعلن. يتم وضع علامة على وكيل مستخدم Chrome الذي يحتوي على بصمة Python TLS على أنه تلقائي.
تحليل رأس HTTP
Real Chrome headers:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,...
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br
Sec-CH-UA: "Not_A Brand";v="8", "Chromium";v="120"
Sec-CH-UA-Platform: "Windows"
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Automation headers (missing or different):
- Missing Sec-CH-UA headers
- Missing Accept-Language
- Non-standard Accept header
- Missing Sec-Fetch-* headers
طبقة الكشف 5: الذكاء عبر الجلسات
يتتبع reCAPTCHA الأنماط عبر جلسات ومواقع متعددة:
- ارتباط بصمة الجلسة: نفس بصمة المتصفح تقدم طلبات سريعة عبر العديد من المواقع
- تحليل نمط الحل: الإجابات الصحيحة خلال نوافذ زمنية متسقة (تختلف أوقات الحل البشرية)
- ارتباط الاستجابة للتحدي: جلسات متعددة تحل تحديات متطابقة في ثوانٍ
- المخطط الزمني لملفات تعريف الارتباط: جلسات جديدة متعددة من نفس عنوان IP دون استمرار ملفات تعريف الارتباط
كيف تتعامل الحلول المستندة إلى واجهة برمجة التطبيقات (API) مع الاكتشاف
تتجاوز الحلول المستندة إلى واجهة برمجة التطبيقات (API) مثل CaptchaAI نظام الكشف الخاص بـ reCAPTCHA من خلال العمل في بيئة منفصلة تمامًا:
Your automation:
Extracts sitekey + pageurl from target page
↓
Sends to CaptchaAI API (HTTPS request to ocr.captchaai.com)
↓
CaptchaAI's solver environment:
├─ Real browser with genuine fingerprint (not headless)
├─ Human-like behavioral patterns
├─ Clean residential IP
├─ Valid cookies and session history
├─ Matching TLS/header fingerprints
└─ Solves the challenge with human-like behavior
↓
Returns valid g-recaptcha-response token
↓
Your automation:
Submits token to target website
↓
Target website validates token with Google
→ Google sees a legitimate solve from a trusted environment
→ Token validated: success = true
الرؤية الأساسية: لا تتفاعل الأتمتة لديك مطلقًا مع reCAPTCHA بشكل مباشر. يتعامل الحل مع جميع بصمات الأصابع والتحليل السلوكي وإكمال التحدي في بيئة مُحسّنة لاجتياز كل طبقة اكتشاف. يحتاج الرمز الخاص بك فقط إلى إرسال الرمز المميز الناتج.
مثال بايثون
import requests
import time
API_KEY = "YOUR_API_KEY"
# Your automation only needs sitekey and pageurl
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6LcR_RsTAAAAAN_r0GEkGBfq3L7KmU5JbPHJtwNp",
"pageurl": "https://example.com/login",
"json": 1,
})
task_id = submit.json()["request"]
# Poll for token
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
}).json()
if result.get("status") == 1:
token = result["request"]
# Submit this token to the target site's form
print("Token received — submit to target form")
break
مثال Node.js
const axios = require("axios");
async function solveRecaptcha(sitekey, pageurl) {
const API_KEY = "YOUR_API_KEY";
const { data: submit } = await axios.post(
"https://ocr.captchaai.com/in.php",
new URLSearchParams({
key: API_KEY,
method: "userrecaptcha",
googlekey: sitekey,
pageurl: pageurl,
json: 1,
})
);
const taskId = submit.request;
for (let i = 0; i < 60; i++) {
await new Promise(r => setTimeout(r, 5000));
const { data: result } = await axios.get(
"https://ocr.captchaai.com/res.php",
{ params: { key: API_KEY, action: "get", id: taskId, json: 1 } }
);
if (result.status === 1) return result.request;
}
throw new Error("Timeout");
}
الأسئلة المتداولة
هل يمكن لـ reCAPTCHA اكتشاف أنه تم استخدام محلل واجهة برمجة التطبيقات (API)؟
يقوم reCAPTCHA بالتحقق من صحة الرمز المميز مقابل سجلاته الخاصة. إذا أنتجت بيئة الحل حلاً مشروعًا بسلوك يشبه الإنسان، فإن الرمز المميز يكون صالحًا. ترى Google حلاً بشريًا عاديًا، وليس خدمة تابعة لجهة خارجية. الرمز المميز نفسه لا يحمل معلومات حول كيفية إنشائه.
هل يؤدي استخدام السيلينيوم دائمًا إلى اكتشاف reCAPTCHA؟
تم اكتشاف السيلينيوم الافتراضي مع ChromeDriver الافتراضي على الفور بسبب navigator.webdriver = true، وواجهات برمجة تطبيقات Chrome المفقودة، ورؤوس ChromeDriver HTTP. يمكن للسيلينيوم الذي تم تكوينه بشكل خفي (برنامج تشغيل الكروم الذي لم يتم اكتشافه، والمكونات الإضافية الخفية) أن يقلل من الاكتشاف ولكنه لا يزيله. يعمل الحل المعتمد على واجهة برمجة التطبيقات (API) على تجنب المشكلة تمامًا من خلال عدم التفاعل مع reCAPTCHA في متصفحك.
ما مدى سرعة تحديث reCAPTCHA لطرق الكشف الخاصة به؟
تقوم Google بتحديث استدلالات اكتشاف reCAPTCHA بشكل مستمر. التحديثات الرئيسية تحدث كل بضعة أشهر. عادةً ما يتم نشر أساليب الكشف عن المتصفح بدون رأس في غضون أسابيع من إصدار أداة التشغيل الآلي الجديدة. تتكيف خدمات حل API مثل CaptchaAI مع هذه التغييرات على الفور لأنها تحافظ على بيئات الحل المُحسّنة الخاصة بها.
هل يقوم reCAPTCHA بمشاركة بيانات الكشف عبر مواقع الويب؟
نعم. يشتمل تحليل المخاطر الخاص بـ reCAPTCHA على إشارات عبر المواقع من خلال ملف تعريف الارتباط _GRECAPTCHA والذكاء من جانب خادم Google. يمكن أن يؤدي السلوك السيئ على أحد المواقع المحمية بواسطة reCAPTCHA إلى خفض النتائج على المواقع الأخرى التي تستخدم نفس ملف تعريف المتصفح.
ملخص
يكتشف reCAPTCHA الأتمتة من خلال خمس طبقات: فحص بيئة JavaScript (الكشف بدون رأس)، وبصمات الأصابع على قماش /WebGL، والتحليل السلوكي (الماوس، ولوحة المفاتيح، والتمرير)، وسمعة الشبكة/IP، والذكاء عبر الجلسات. الحلول المستندة إلى API مثلCaptchaAIالتعامل مع جميع الطبقات الخمس من خلال حل التحديات في بيئة منفصلة ومحسنة وإرجاع رمز مميز صالح. لا يتفاعل رمز الأتمتة الخاص بك أبدًا بشكل مباشر مع reCAPTCHA، مما يجعله غير مرئي لنظام الكشف.
مقالات ذات صلة
- كيفية حل رد اتصال Recaptcha V2 باستخدام Api
- التعامل مع reCAPTCHA v2 وTurnstile في الموقع نفسه
- Recaptcha Enterprise Assessment Api نظرة عميقة