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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
profanity-verifier — فحص قابل للإثبات لـ CVE-2022-40769: هل يقع المفتاح الخاص لحساب EOA ضمن فضاء المفاتيح الذي يمكن الوصول إليه عبر Profanity؟ | Kitploit
أدوات/GitHubGitHub/artsbykriss/profanity-verifier
كسر كلمات المرورماسحات الثغرات الأمنيةتحليل الثغرات الأمنيةالاستغلالالتشفيرالأوراق والأبحاث
GitHubartsbykriss/profanity-verifier

profanity-verifier

فحص قابل للإثبات لـ CVE-2022-40769: هل يقع المفتاح الخاص لحساب EOA ضمن فضاء المفاتيح الذي يمكن الوصول إليه عبر Profanity؟

عرض المستودع
1منذ 17س 14دلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

profanity-verifier

فحص قابل للإثبات لـ CVE-2022-40769: هل يقع المفتاح الخاص لعنوان EOA ضمن فضاء المفاتيح الذي يمكن الوصول إليه بواسطة مولّد العناوين الجمالية Profanity؟ إذا كان الجواب نعم، فإن المفتاح قابل للاسترداد والحساب (وكل ما يتحكم به) قابل للسحب من قبل أي شخص.

لا استدلالات تقريبية. النتيجة قيمة منطقية مدعومة ببحث كامل في فضاء المفاتيح الدقيق، قابلة لإعادة الإنتاج بإعادة تشغيل نفس الشريحة (shard).

العلّة، من المصدر الأصلي

Dispatcher.cpp، createSeed():

root@kitploit:~
std::random_device rd;
std::mt19937_64 eng(rd());                 // seeded with only 32 bits  <- CVE-2022-40769
std::uniform_int_distribution<cl_ulong> distr;
cl_ulong4 r;
r.s[0] = distr(eng); r.s[1] = distr(eng);  // 256-bit seed, used directly
r.s[2] = distr(eng); r.s[3] = distr(eng);  // as the private key

ثم تأخذ نواة OpenCL القيمة G^k لذلك المفتاح وتمضي قدمًا، بزيادة المفتاح بمقدار واحد في كل جولة حتى يطابق العنوان النمط المطلوب. لذا فإن فضاء المفاتيح الكامل القابل للوصول هو:

root@kitploit:~
key(x, i) = mt19937_64(x) as a 256-bit scalar + i
x ∈ [0, 2^32)    the 32-bit seed (four billion possibilities)
i ∈ [0, depth]   rounds the generator ran

ما الذي يفعله هذا البرنامج

  1. يمشي للخلف من المفتاح العام للمرشّح: P_j = P − j·G من أجل j ≤ depth. إذا كان Profanity قد أنشأ المفتاح، فإن إحدى هذه النقاط هي مفتاح عام لبذرة (seed).
  2. يفحص البذور في شريحته؛ لكل x يشتق mt19937_64(x) وعنوانه.
  3. التطابق يعني أن P_j هو المفتاح العام للبذرة، لذا فإن المفتاح الخاص للمرشّح هو seed(x) + j — قابل للاسترداد، وبالتالي قابل للسحب.

التطابق هو إثبات. عدم التطابق عبر نطاق البذور الكامل هو إثبات للعكس، حتى العمق المختار.

تم التحقق منه

  • MT19937-64 يطابق libstdc++ تمامًا. تمت مقارنة سحبات std::mt19937_64 الخام للبذور 0، 1، 12345 و4294967295 طرفًا بطرف مقابل برنامج g++ يستخدم std::mt19937_64 + std::uniform_int_distribution<unsigned long long>؛ متطابقة.
  • مكتبتا منحنيات مستقلتان تتفقان. تم إنتاج نفس متجهات الاختبار باستخدام k256 (Rust خالص) وsecp256k1 (ارتباطات libsecp256k1): البذرة 0 → 0xfef2583edde5637dad990bc5d05d52c8247019cf، البذرة 12345 → 0x7712c45360f5dfa3a622a815b6073f0351050f13.
  • --selftest يتحقق من الاشتقاق، والعنوان، والمشي على السلسلة، والاسترداد بالمشي للخلف، وفحص بذرة شامل من البداية إلى النهاية يعثر على بذرة معروفة.

شغّله بنفسك:

root@kitploit:~
cargo run --release -- --selftest

الاستخدام

root@kitploit:~
profanity-verifier --address 0x... [--pubkey 0x...] --shard i/n [--depth 16777216]
  • --pubkey — المفتاح العام غير المضغوط للمرشّح (64 بايت من x||y، مع أو بدون البادئة 0x04). استرجعه من أي معاملة وقّعها العنوان. بدونه، يمكن اختبار موضع السلسلة 0 فقط.
  • --shard i/n — الشريحة من فضاء البذور ذي 32 بت المراد فحصها، بحيث يتوازى العمل عبر الأجهزة.
  • --depth — إلى أي مدى على سلسلة المولّد يتم البحث. 2^24 يغطي عنوانًا جماليًا من ستة أحرف مع هامش إضافي؛ العمق الأكبر يكلّف ذاكرة ووقتًا.

المخرجات سطر JSON واحد، على سبيل المثال:

root@kitploit:~
{"address":"0x...","shard":"0/64","depth":16777216,"seeds_checked":67108864,"seconds":833.4,"match":true}

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

التشغيل على نطاق واسع

.github/workflows/verify.yml يوزّع البحث على مصفوفة من مهام (candidate, shard) على مشغّلات عامة.

الإنتاجية المقاسة: ~20,000 بذرة/ثانية على نواتين (libsecp256k1). فضاء البذور الكامل 2^32 هو ~59 ساعة-نواة، لذا 64 شريحة × 4 أنوية ≈ 14 دقيقة زمن حائط لكل مرشّح — مجانًا على مستودع عام.

أطلقه مع قائمة المرشّحين:

root@kitploit:~
gh workflow run profanity-verify -f candidates='[{"address":"0x...","pubkey":"0x..."}]' -f shards=64

القيود

  • يفترض أن المولّد استخدم std::mt19937_64 الخاص بـ libstdc++، وهو ما تغطيه المقارنة طرفًا بطرف. البناءات مقابل مكتبة قياسية مختلفة سيكون لها تعيين مختلف.
  • depth يحدّ البحث. المرشّح المُولَّد بعد بحث طويل بشكل غير معتاد (أنماط جمالية طويلة جدًا) قد يقع خارج هذا الحد.
  • التغطية الكاملة تتطلب مفتاحًا عامًا. بدون توقيع من العنوان، يمكن اختبار موضع السلسلة 0 فقط.
  • النتيجة السلبية تقول "ليس في فضاء Profanity" — ولا تقول شيئًا عن أي ضعف آخر.
تنزيل الأداة