Skip to content
KitploitKITPLOIT
أدواتالمدونة
Log in
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
recaptcha — توثيق والهندسة العكسية لـ reCAPTCHA | Kitploit
أدوات/GitHubGitHub/elyelysiox/recaptcha
التحليل الثابتتحليل الشفرة الديناميكي (DAST)الهندسة العكسيةأمن الويبمكافحة الروبوتاتتجاوز كابتشا
GitHubelyelysiox/recaptcha

recaptcha

توثيق والهندسة العكسية لـ reCAPTCHA

عرض المستودع
2273834منذ 2 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

الوصف

يحتوي هذا المستودع على تحليل تقني لنظام مكافحة الروبوتات من جوجل (reCAPTCHA) مع التركيز على:

  • بنية الحمولة والقيم
  • تقنيات البصمة الرقمية (Fingerprinting)
  • تقنيات التعتيم (Obfuscation)
  • تقنيات مكافحة التنقيح/العبث
  • الآلات الافتراضية

التواصل

  • ديسكورد: @g_recaptcha
  • تيليجرام: @lyxlobyx

تقنيات التعتيم

يُعد reCAPTCHA أحد أنظمة مكافحة الروبوتات التي تمتلك أكثر تقنيات التعتيم تطورًا، حيث يستخدم سلسلة من التحويلات التي تجعل الكود أقل قابلية للقراءة وأكثر صعوبة في الهندسة العكسية. يمكن معالجة معظم عمليات التعتيم بسهولة باستخدام شجرة الصياغة المجردة (AST)، لكن بعضها يُنفَّذ في وقت التشغيل، مما يجعل AST عديم الفائدة في هذه الحالة. يتم أيضًا تطبيق تعدد الأشكال (Polymorphism) على الكود لتغيير بنيته في كل إصدار من البرنامج النصي. على سبيل المثال، لا ينفذ الكود الإجراء مباشرة، بل يستخدم كائنات أو دوال تغيّر شكلها

  • تعبيرات التسلسل (Sequence Expressions) يتم تسطيح الكود عن طريق تحويل كل عبارة كتلة إلى تعبير مستمر مفصول بفواصل، ويمكن أن يظهر في عبارات if، ووسائط الدوال، وحتى داخل الكائنات seq

  • الحساب المختلط بين العمليات الحسابية والبتية (Mixed Boolean Arithmetic) يدمج العمليات الحسابية (الجمع، الطرح، الضرب) مع العمليات البتية (AND، OR، XOR، NOT) لإخفاء المنطق الأصلي، على سبيل المثال -2 * ~(h & H) + -2 + (h ^ H)

  • جدول الدوال غير المباشر (Indirect Function Table) يتم بناء كل دالة داخل جدول، ويتم استدعاؤها باستخدام فهرسها، مثل functions[index](https://github.com/elyelysiox/recaptcha/blob/main/args)

  • مصفوفة الثوابت المضمنة (Inline Constant Array) يتم تعيين حرفية مصفوفة محلية بشكل مضمن، في منتصف التعبير، وتقوم المصفوفة بتجميع الثوابت (أرقام، نصوص) التي يُعاد استخدامها في جميع أنحاء جسم الدالة عبر الوصول بالفهرس

    // b = [14, 1, "call"] assigned inline inside a sequence expression
    function(Y, Q, c, l, G, X, W, J, b, P) {
        (Y & 94) == Y && (b = [14, 1, "call"], ...)
        W[b[2]](J, G)   // W.call(J, G)
        Y >> b[1] & b[0]  // Y >> 1 & 14
    }
    
  • إرسال الدوال المتعدد (Function Multiplexing) يتم دمج عدة دوال مختلفة منطقيًا في دالة واحدة، باستخدام معامل رقمي كمحدد للكتلة. يتم تحديد الكتلة النشطة من خلال تقييم المعامل مقابل شروط بتية. يمرر المتصلون قيمة رقمية حرفية كمحدد

    function(N, y, U, Y, h, H, m, C, u) {
        C = [26, 47, 6];
    
        // block 1
        if ((N - 2 ^ 14) < N && (N - C[2] | 28) >= N) {
            // convert value to string logic
        }
    
        // block 2
        if ((N + 4 & 40) >= N && (N + 5 & C[0]) < N) {
            Y = bB();
            throw Error(Y === void 0 ? "unexpected value " + U + y : Y);
        }
    
        return u;
    }
    
  • التفرع عبر المعاملات المنطقية (Logical Operator Branching) يستبدل عبارات if وكتل if/else بتقييم الاختصار للمعاملات المنطقية، محولًا تدفق التحكم إلى تعبيرات. وعند دمجه مع تعبيرات التسلسل، تظهر فروع متعددة كتعبير واحد مستمر مفصول بفواصل

    // if (a) { block }
    a && (block)
    
    // if (!a) { block }
    a || (block)
    
    // if (a) { x } else { y }
    a ? x : y
    
    // combined with CFF and sequence expressions:
    (Y | 1) & 14 || (c = Q.O, J = c.O.length + c.g.length),
    (Y ^ 59) >> 3 == 3 && (Q.classList
        ? Q.classList.add(c)
        : Z[31](31, Q, c) || (l = f[0](84, "string", "", Q), ...)),
    
  • ربط ثوابت الدوال الأصلية (Bind Native Methods Constants) يربط الدوال الأصلية للمتصفح بمستقبلاتها الأصلية، ويخزنها كثوابت لمنع العبث بها

    LO = (Tw = self) == null ? void 0 :
     (K9 = Tw.Math) == null ? void 0 :
     (v4 = K9.floor) == null ? void 0 :
     (mF = v4.bind) == null ? void 0 :
     mF.call(v4, Math)  // Math.floor.bind(Math)
    
    LO(x)           // Math.floor(x)
    U4()            // Math.random()
    Ge(obj, prop)   // Object.defineProperty(obj, prop)
    
  • الكود الميت (Dead Code) يتم حقن كتل برمجية يتعذر الوصول إليها أو غير مستخدمة في جميع أنحاء الملف، مما يزيد حجمه إلى أكثر من 60,000 سطر، وهذا يجعل التحليل الثابت والهندسة العكسية القائمة على نماذج اللغة الكبيرة (LLM) صعبة

  • تسطيح تدفق التحكم (Control Flow Flattening) يحول كل جزء من الكود (التعاريف والحلقات) إلى آلة حالة مسطحة. يخفي منطق التنفيذ الأصلي عن طريق تمرير جميع الكتل البرمجية عبر كتلة "موزع" مركزية

    يمكن أن تتغير أشكال الموزعات؛ بعضها يحتوي على 2-3 متغيرات حالة، ويتغير نوع الحلقة/الشرط. تبدو كما يلي

    cff1

    هذا CFF بمتغيرَي حالة، أحدهما يتعامل مع كتلة catch والآخر مع كتلة try.

  • تجمع السلاسل المشفرة (Encrypted String Pool) جميع القيم النصية الحرفية (واجهات برمجة تطبيقات DOM، خصائص المتصفح، قيم CSS، رسائل الخطأ، إلخ) مشفرة في تجمع نصي ضخم واحد. تستخدم دالة فك التشفير بذرة وشيفرة XOR قائمة على LCG لاستخراج كل سلسلة في وقت التشغيل

    يوجد أكثر من 1990 موقع استدعاء موزعة في الكود، وتستخدم دالة فك التشفير مفتاحًا متغيرًا يتراكم نقاط الرموز المفكوكة، مما يجعل كل حرف معتمدًا على جميع الأحرف السابقة

    X = function(J, b, P, F, U) {
        U = ["codePointAt", 127, "char encrypted pool"];
        for (F = (P = 0, b = "", l); P < Q; P++)
            J = (U[2][U[0]](c + P) ^ F) & U[1],  // XOR with running key
            b += String.fromCodePoint(J),
            F += J; // accumulate key
        return G = b;
    }
    
    // call sites pass a seed to locate and decrypt each string
    Z[23](64, 4, 54961, 103)()  // → "lang"
    Z[23](66, 4, 54961, 103)()  // → "addEventListener"
    Z[23](32, 12, 20287, 852)() // → "inline-block"
    

    decstrings

  • مكرر القيم ذو الحالة (Stateful Value Iterator) يستخدم reCAPTCHA دالة ذات حالة تُرجع سلسلة من الكائنات والقيم في وقت التشغيل (مثل window، document.body، ثوابت رقمية) بترتيب ثابت، كل استدعاء يقدم مؤشرًا داخليًا، واستدعاؤها خارج التسلسل أو عدد مرات أكثر من اللازم يفسد جميع القراءات اللاحقة. تعمل آلية مهلة على إبطال الحالة بعد فترة زمنية ثابتة، وتُرجع null لأي قراءات متأخرة

    // sequential calls return different values:
    c()  // → window
    c()  // → document.body
    c()  // → 123
    c()  // → null (timeout expired)
    
    l(c(), G[2], G[W[1]], G[1]) + l(c(), G[2], G[W[1]], 12)
    // ↑ window                     ↑ window
    
    10 * l(c(), G[2], G[W[1]], G[1]) + l(c(), G[2], G[W[1]], 12))
    
    c().querySelectorAll(a[X[2]](98, X[1], X[1]))
    // ↑ document.body  
    
    
  • جدول الدوال المحسوب (Computed Function Table) يشبه جدول الدوال غير المباشر، لكن هنا يتم حساب فهرس الدالة المطلوب استدعاؤها في وقت التشغيل باستخدام بذرة، عبر XOR ومعامل القسمة (Modulus)

    c = ((Q ^ no | U[1]) >> 5) + no
    A = mN[(c % U[2] + U[2]) % U[2]]  // mN is the function table (50+ functions)
    
    q[29](5, 6977)   // seed=6977  → index resolves to function at mN[X]
    q[29](53, 6187)  // seed=6187  → different index, different function
    

    computed

  • تشفير القيم في وقت التشغيل (Runtime Value Encryption) بعض القيم (معلمات إعدادات captcha، معلمات الإرساء، إلخ) لا تُخزن أبدًا كنص صريح؛ يتم تشفيرها فور جمعها ولا يتم فك تشفيرها إلا في وقت الاستخدام، ولها بادئة B في البداية

    hiddenv

  • تعتيم تدفق التحكم غير المتزامن (Async Control Flow Obfuscation) يتم تحويل المنطق المتزامن إلى آلات حالة قائمة على المولدات (generators) ملفوفة في سلاسل وعود (Promises) متكررة، أي تتبع قيمة عبر المُنقح (debugger) يجبرك على التنقل عبر معالجات غير متزامنة متعددة، مما يفقد سياق التنفيذ الأصلي عند كل حد .then()

حمولة الإرساء/الاستجابة

بنية الحمولة

تنزيل الأداة