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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
JOP_ROCKET — يتيح هذا الإطار للمستخدم اكتشاف أدوات JOP (gagdets) ويمكنه أتمتة بناء سلسلة JOP كاملة لتجاوز DEP. JOP ROCKET هو الحل الأمثل للبرمجة الموجّهة بالقفز في Windows. كما يكتشف JOP ROCKET الموجّه الجديد ثنائي الأدوات (two-gadget dispatcher)، وهو ما يوسّع بشكل كبير ما يمكن تحقيقه باستخدام JOP. | Kitploit
أدوات/GitHubGitHub/bw3ll/jop_rocket
الاستغلالالهندسة العكسيةالأوراق والأبحاثالتعلم والتعليمتطوير الحمولاتاستغلال الملفات الثنائيةمختبرات وتدريب عملي
GitHubbw3ll/jop_rocket

JOP_ROCKET

عرض المستودع
116201منذ 2 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

حول

يتيح هذا الإطار للمستخدم اكتشاف أدوات JOP (gagdets) ويمكنه أتمتة بناء سلسلة JOP كاملة لتجاوز DEP. JOP ROCKET هو الحل الأمثل للبرمجة الموجّهة بالقفز في Windows. كما يكتشف JOP ROCKET الموجّه الجديد ثنائي الأدوات (two-gadget dispatcher)، وهو ما يوسّع بشكل كبير ما يمكن تحقيقه باستخدام JOP.

مشاركة

alt text

JOP ROCKET

ملاحظة: مع الإصدار 2.15، نقدّم المُوزِّع ثنائي القطع (two-gadget dispatcher) — وهذا يوسّع الإمكانيات بشكل كبير مع أدوات المُوزِّع (dispatcher gadgets). تمت إضافة الكثير من التحسينات والميزات الجديدة الإضافية مع الإصدار 2.15 في 26 مايو 2021.

تحديث: 29 نوفمبر 2021: قمت برفع شرائح العرض الخاصة بمؤتمر @Hack في الرياض، بالإضافة إلى ورقة بحثية حول JOP بدون شِل كود (Shellcodeless JOP). فيديوهات العرض الصامت المستخدمة في المحاضرة قد تجدونها هنا: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV

تحديث: 1 ديسمبر 2022: أضفت قسم أسئلة وأجوبة في نهاية هذا المستودع على GitHub، ويتضمن روابط لموارد (محاضرات وأوراق بحثية).

الإصدار الحالي: 2.15

أداة JOP ROCKET، وهي اختصار لـ Jump-oriented Programming Reversing Open Cyber Knowledge Expert Tool، صُممت للمساعدة في تسهيل اكتشاف قطع JOP في بيئة x86 بنظام ويندوز. تم إصدار هذه الأداة في DEF CON 27، حيث كانت موضوع محاضرة ألقاها الدكتور برامويل بريزندين والدكتور جوش ستروشين. تم إصدار تحديث رئيسي قيد التطوير في سبتمبر 2020، مع تحديثات طفيفة مخطط لها في المستقبل القريب.

يرجى الانتقال إلى https://github.com/Bw3ll/JOP_ROCKET لتنزيل هذه الأداة.

حدث عدد من التحديثات الرئيسية. يُنصح بتحديث أي إصدار سابق للإصدار 2.15 للاستفادة من التحديثات العديدة. وتشمل هذه: التوليد التلقائي لسلاسل JOP، واكتشاف أنواع جديدة من القطع، وأنواع جديدة من أدوات المُوزِّع، والمُوزِّعات ثنائية القطع. كما خضعت JOP ROCKET للعديد من التغييرات المهمة الأخرى لتعزيز وتحسين أدائها وسرعتها.

JOP ROCKET هي برنامج بلغة بايثون يستخدم محرك التفكيك Capstone بالإضافة إلى تبعيات أخرى. هذه الأداة لاستغلال البرمجيات هي قطعة أثرية متكاملة الميزات مصممة لتسهيل البرمجة الموجهة بالقفز (Jump-oriented Programming). يُقصد تشغيلها على ويندوز.

معلومات الاستخدام غير متاحة في هذا الوقت بخلاف ما هو موجود في قائمة المساعدة. إن بناء استغلالات JOP ليس بالأمر المباشر وهو دقيق للغاية، مع بعض التوازي ولكن العديد من الاختلافات عن ROP. يُرجى الرجوع إلى محاضرة DEF CON لمشاهدة عرض توضيحي موجز.

https://www.youtube.com/watch?v=PMihX693mPE

تم تدريس هذه الأداة في جامعة داكوتا الحكومية ضمن البرنامج الدكتوراه، كجزء من مقرر CSC 848: استغلال البرمجيات المتقدم، وهو المقرر الأكثر تحديًا في البرنامج. أكمل الطلاب استغلالات تضمنت تجاوز DEP وASLR.

شكرًا لأوستن بابكوك لمساعدته في العديد من المشكلات المتعلقة بـ JOP ROCKET، بما في ذلك تعليمات التثبيت الخاصة به. إنه سيد في JOP.

لقد قمنا برفع أرشيف هنا، JOP ROCKET challenge - toy binaries.zip، للسماح للأطراف المهتمة باختبار وممارسة JOP على بعض الملفات الثنائية التجريبية، باستخدام JOP ROCKET. هل يمكنك تجاوز منع تنفيذ البيانات (DEP)؟ هذا مفيد إذا كنت تريد ممارسة JOP على ملف ثنائي تعرف أنه مضمون أن يكون ضعيفًا ويتوفر على القطع الصحيحة. توجد نسخة أسهل ونسخة أصعب من نفس الملف الثنائي. على الرغم من أن JOP قد يكون أصعب في المرة الأولى، حتى يعتاد الشخص عليه. بمجرد إتقان JOP مع هذه الملفات الثنائية، يمكنك تجربته على بعض القطع الواقعية، بافتراض أنها تحتوي على قطع كافية. إذا كنت تتبع نموذج أداة المُوزِّع، ضع في اعتبارك أنك تحتاج بالفعل إلى أداة مُوزِّع. JOP ممكن أيضًا خلطه مع ROP، باستخدام قطعة JOP للإشارة إلى RET، بحيث يمكن لـ JMP EDX أن يجعل EDX يشير إلى RET. هذا أكثر فائدة إذا كنت تحتاج فقط إلى قطعة أو قطعتين من JOP لجعل ROP يعمل. الملفات الثنائية الموجودة في الأرشيف يجب أن تسمح لك باستخدام نموذج أداة المُوزِّع بعدة طرق مختلفة!

مع نموذج أداة المُوزِّع في JOP، يمكنك القضاء على ROP بنسبة 100%، على الرغم من أنه من الأسهل البدء بقطعتين من ROP، لتحميل جدول التوزيع وأداة المُوزِّع. ستقوم سلسلة JOP المبنية مسبقًا بذلك تلقائيًا، بافتراض أنها موجودة. ومن هناك، يمكن أن يكون JOP نقيًا، باستخدام كل من القفزات غير المباشرة والاستدعاءات غير المباشرة (JMP EBX، CALL EDX، وما إلى ذلك).

تعليمات التثبيت الأساسية لـ JOP ROCKET

الخطوة 1:

قم بتثبيت Python 2.7. أسهل طريقة للقيام بذلك ستكون من الموقع: https://www.python.org/download/releases/2.7/

إذا كان لديك بالفعل Python 3، فستظل بحاجة إلى Python 2.7 حيث أن الأداة لن تعمل بشكل صحيح مع Python 3.

إذا كان لديك كلاهما، فستحتاج إلى إضافة التعليق الخاص:

#!python2

إلى أعلى ملف rocket.py. ثم قم بالتشغيل باستخدام "py rocket.py" بدلاً من "python rocket.py". سيضمن ذلك تشغيل البرنامج باستخدام Python 2.7. بدلاً من ذلك، يمكنك فقط تنفيذ py -2 rocket.py

alt text

الخطوة 2:

قم بتثبيت pip إذا لم يكن مضمّنًا بالفعل مع بايثون.

  • https://pip.pypa.io/en/stable/installing/

ستحتاج إلى حفظ البرنامج النصي المقدم وتشغيله، وفقًا للتعليمات الموجودة على الرابط. إذا واجهت خطأ، فجرّب استخدام البرنامج النصي "البديل".

إذا كان pip لا يزال لا يعمل، فجرّب إضافة "C:\python27\Scripts" (أو الدليل المقابل لديك) إلى متغير النظام Path لديك:

  • ابدأ
  • انقر بزر الماوس الأيمن على Computer
  • خصائص
  • إعدادات النظام المتقدمة
  • التبويب خيارات متقدمة
  • متغيرات البيئة

alt text

الخطوة 3:

ابدأ بتثبيت التبعيات باستخدام pip!

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

  • pip install capstone

  • pip install pefile2

    • من المحتمل أن يكون لديك بالفعل pefile مثبتًا مع Python 2.7، لكن هذا الإصدار قديم.

    • Pefile2 هو ما تحتاجه.

    • قد تحتاج إلى pip uninstall pefile لجعل البرنامج يستخدم pefile2.

  • إلخ... يمكن العثور على قائمة بالتبعيات في أسفل هذا المستند. يجب تثبيت كل منها، إذا لم تكن مثبتة بالفعل.

  • الاثنان المذكوران أعلاه هما على الأرجح الوحيدان اللذان ستحتاج إلى تثبيتهما بنفسك.

العديد من التبعيات تأتي بالفعل مع بايثون. لسرد الوحدات المتاحة، افتح موجه الأوامر:

alt text

تصفح القائمة وتحقق مما إذا كانت لديك جميع التبعيات. بالنسبة لتلك التي لا تملكها، قم بتثبيتها باستخدام pip أو من الكود المصدري.

التبعيات:

  • Capstone
  • pywin32
  • Pefile2
  • Ctypes

ملاحظة: pywin32 يُستخدم من أجل Win32file و Win32api

الملفات المطلوبة:

يجب أن يكون لديك في دليل واحد جميع الملفات الخمسة: rocket.py، lists.py، checkIt.py، ui.py، stackpivot.py. لبدء استخدام الأداة، قم بتشغيلها من سطر الأوامر: python rocket.py filename.exe — حيث filename.exe هو البرنامج الذي ترغب في الحصول على قطع JOP أو سلاسل JOP الخاصة به.

الأخطاء:

إذا كنت تواجه أخطاء مثل "SyntaxError: Missing parentheses in call to 'print'"، فمن المحتمل أن البرنامج يعمل مع Python 3. جرب إجراء الإصلاح الموضح في الخطوة 1 لجعل البرنامج يستخدم Python 2.

الأخطاء المتعلقة بـ "lists" أو "ui" غالبًا ما تكون ناجمة عن موقع الملفين lists.py و ui.py. تأكد من أن هذه الملفات موجودة في نفس دليل rocket.py.

خطوات تثبيت أكثر تقدمًا

لاستخدام هذه الأداة في بيئة Cygwin، من المحتمل أن تحتاج إلى تثبيت Capstone من الكود المصدري. هناك طرق متنوعة للقيام بذلك، وتوفر وثائق Capstone المساعدة. تم استخدام Cygwin في الأصل أثناء تطوير الأداة، على الرغم من أن هذا لم يعد هو الحال. JOP ROCKET الإصدار 2.0 غير مختبر على Cygwin، وموجه الأوامر هو الاستخدام الموصى به لـ JOP ROCKET. ملاحظة: استخدام Cygwin لم يعد مدعومًا صراحةً، ولم يعد يُنصح باستخدامه مع هذا البرنامج.

الاستخدام الأساسي

معلومات استخدام أكثر تفصيلًا قادمة. ارجع إلى محاضرة DEF CON 27 والقائمة الفرعية للمساعدة للحصول على المساعدة.

للبدء، ستحتاج إلى وجود ملفات بايثون الخمسة في نفس الدليل: rocket.py، ui.py، stackpivot.py، checkIt.py، lists.py. ثم قم بالتشغيل من سطر الأوامر. يمكنك تقديم ملف محلي في دليل التثبيت، لكنه لن يتمكن من العثور على الوحدات/مكتبات DLL. للعثور عليها، يجب تثبيت البرنامج، ويمكن توفير المسار المطلق للتطبيق كمدخل داخل ملف نصي يمكن تقديمه كوسيطة في سطر الأوامر، على سبيل المثال:

python rocket.py input.txt

داخل input.txt، سيكون لدينا المسار المطلق، على سبيل المثال C:\rocket2\sample_binary.exe. من خلال توفير المسار المطلق، ستتمكن أيضًا من استخراج الوحدات لفحصها، إذا رغبت في ذلك. إذا كنت تريد استخدام JOP ROCKET مع البرنامج فقط في الدليل المحلي، فسوف يجد فقط القطع الخاصة بالملف التنفيذي للصورة نفسه، أي بدون مكتبات DLL. لاستخدامه بهذه الطريقة، استخدم البنية التالية:

python rocket.py sample_binary.exe

إذا كان الملف التنفيذي في نفس الدليل، يمكنك استخدام JOP ROCKET بالطريقة الموصوفة أعلاه

التأكد من الحصول على جميع الوحدات/مكتبات DLL لملف ثنائي

عند تحميل ملف تنفيذي أو DLL لتحليله، هناك طريقتان. الأولى هي ببساطة وضع الملف التنفيذي في نفس الدليل وتشغيل البرنامج، باستخدام ذلك كوسيطة، على سبيل المثال python rocket.py binary.exe. سيمكن هذا المستخدم من تحديد واستخراج العديد من وحدات النظام. ومع ذلك، لن يجد بعض الملفات الثنائية غير التابعة للنظام. للتغطية الشاملة، يجب على المستخدم توفير المسار المطلق للتطبيق في ملف نصي واستخدامه كمدخل إلى ROCKET، على سبيل المثال python rocket.py input.txt. سيسمح هذا بعد ذلك لـ ROCKET بتحديد موقع واستخراج والبحث في مكتبات DLL غير التابعة للنظام المرتبطة بالتطبيق الهدف. وبالتالي، يُنصح عمومًا بتوفير الملف الثنائي كمدخل عبر ملف نصي، وإلا فقد يتم استبعاد بعض مكتبات DLL. على سبيل المثال، python rocket.py binaryToScan.txt. يجب أن يحتوي binaryToScan.txt على مسار الملف الثنائي: C:\Users\CoolPerson\Desktop\Instructions\targetBinary.exe

مشاكل الذاكرة مع الملفات الثنائية الكبيرة جدًا

سيختنق إصدار بايثون 32-بت مع الملفات الثنائية الكبيرة جدًا. لتتمكن من العمل مع هذه، يجب استخدام بايثون 64-بت.

فيما يلي بعض التعليمات من أوستن للانتقال من بايثون 32-بت إلى 64-بت: لتثبيت الإصدار 64-بت من python2.7، تأكد أولاً من إلغاء تثبيت التثبيت القديم. بعد تثبيت الإصدار 64-بت، قد تواجه بعض الأخطاء عند استيراد المكتبات مثل "DLL load failed: %1 is not a valid Win32 application". تحدث هذه لأن بايثون يحاول تحميل الإصدارات 32-بت المثبتة سابقًا. لإصلاح هذه المشكلة، استخدم pip لإلغاء تثبيت المكتبة. إذا كان كل من Python 2 و 3 مثبتين، تأكد من استخدام الإصدار الصحيح من pip باستخدامه كـ "py -2 -m pip ".

إصلاح المشكلة الخاصة بـ capstone هو أمر مباشر:

py -2 -m pip uninstall capstone

py -2 -m pip install capstone

الأخطاء المتعلقة باستيراد win32api مرتبطة بـ pywin32. إلغاء تثبيت هذا أصعب حيث أن pip قد لا يقوم بأتمتة العملية. قد يتعين إلغاء تثبيته يدويًا عن طريق حذف ملفات PyWin32 داخل ...\Python27\Lib\site-packages.

ثم، قم بتشغيل:

py -2 -m pip install pywin32

بعد ذلك، أنهِ التثبيت بتشغيل ...\Python27\Scripts\pywin32_postinstall.py -install

الأسئلة والأجوبة

س: ما المميز في JOP ROCKET؟

ج: تجد JOP ROCKET جميع القطع المطلوبة، بما في ذلك أداة المُوزِّع. لا أعلم عن أي أداة أخرى تبحث عن أدوات المُوزِّع. بالإضافة إلى ذلك، تقدم أنواعًا جديدة من القطع وابتكارات في JOP. كما يمكن لـ JOP ROCKET توليد سلسلة JOP كاملة لتجاوز DEP باستخدام تنويع جديد على نموذج أداة المُوزِّع يتضمن سلسلة من عمليات انزياح المكدس (stack pivots) المتعددة. realistically سيكون من الصعب جدًا تنفيذ استغلال JOP باستخدام نهج أداة المُوزِّع دون استخدام JOP ROCKET. توجد بعض أدوات ROP الأخرى التي قد توفر قطع JOP أكثر محدودية، لكنها في الغالب مجرد عناصر نائبة لأعمال مستقبلية، ولا يمكنك إكمال استغلال JOP دون بعض القطع التي تعثر عليها JOP ROCKET.

س: أعتقد أنني رأيت JOP ROCKET في محاضرة من قبل؟ أين كان ذلك؟

ج: لقد قدمنا في عدة مؤتمرات: DEF CON 27 (2019)، Wild West Hackin’ Fest (2020)، Hack in the Box Amsterdam (2021)، Black Hat Asia (2021)، و @Hack (2021) (الذي أُعيدت تسميته الآن إلى Black Hat Middle East and Africa). لكل منها عادة ورقة بحثية وفيديو (لا يوجد فيديو لـ @Hack). كانت هناك أيضًا مؤتمرات أكاديمية. كل محاضرة وورقة بحثية مختلفة، عادةً بمحتوى جديد بنسبة 60-70% على الأقل. وهي تتناول العديد من الموضوعات المختلفة حول JOP. لا توجد لدينا محاضرات جديدة مخططة ولن نقوم بأخرى إلا إذا كان لدينا شيء جديد لمشاركته، لأننا لا نحب تكرار أنفسنا.

فيما يلي قائمة محدودة لبعض مواد JOP. هذه ليست نفس المحاضرة أو الورقة، حيث إننا نطور باستمرار ونضيف ابتكارات جديدة. كل منها له مساهمات جديدة.

فيديو DEF CON 27 2019: https://www.youtube.com/watch?v=PMihX693mPE

فيديو Wild West Hackin’ Fest 2020: https://www.youtube.com/watch?v=ZQuxSSBfeHM

فيديو Black Hat Asia: https://www.youtube.com/watch?v=NYgTw-h6GT8

ورقة Black Hat Asia: https://i.blackhat.com/asia-21/Thursday-Handouts/as-21-Brizendine-Babcock-Prebuilt-Jop-Chains-With-The-Jop-Rocket-wp.pdf

فيديو Hack in the Box Amsterdam 2021: https://www.youtube.com/watch?v=MxIySXHvKyE

ورقة Hack in the Box Amsterdam 2021: http://magazine.hitb.org/wp-content/uploads/2021/06/HITBMag-Issue-12-June-2021-.pdf

بدقة عالية: http://magazine.hitb.org/wp-content/uploads/2021/06/HITBMag-Issue-12-June-2021-Hi-res.pdf

ورقة @Hack 2021 (التي أُعيدت تسميتها إلى Black Hat Middle East and Africa): https://blackhatmea.com/content-hub/advanced-code-reuse-attacks-jump-oriented-programming

إذا كنت باحثًا أكاديميًا، يرجى الاستشهاد ببعض هذه الأوراق أو أوراقنا الأكاديمية أيضًا. :-)

س: ما هو مثال على استغلال JOP في العالم الحقيقي؟

ج: نشر أوستن واحدًا في Exploit DB: https://www.exploit-db.com/exploits/49959

يمكنك مشاهدة فيديو عنه وعن حديثه في عرض HITB 2021 الذي قدمناه. قدم استغلال JOP الواقعي هذا بعض التحديات الخاصة، لذا من الجيد النظر إليه ودراسته. بينما كتب أوستن ذلك يدويًا، في الواقع كان التوليد التلقائي لسلسلة JOP في JOP ROCKET سيقوم بمعظم العمل. (ستظل هناك إعدادات خاصة إضافية للتعويض عن بعض التحديات.) هذا أيضًا مثال على تنويعنا الجديد لنهج أداة المُوزِّع، باستخدام سلسلة من عمليات انزياح المكدس المتعددة. استغرق هذا الاستغلال أقل من يوم لإكماله.

س: هل JOP صعب القيام به؟

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

س: أليس JOP مجرد ROP باسم آخر؟

ج: JOP مرن للغاية. يمكن أن يكون كذلك. يمكنك تحميل RET في قطعة JOP، وبالتالي كلما قمت بـ JMP EBX، على سبيل المثال، سيكون ذلك مكافئًا لـ RET. بهذا المعنى، يمكنك استخدام JOP فقط كوسيلة لتوسيع ROP، ولن تحتاج إلى أداة مُوزِّع. سيبدو الأمر مملًا لبناء استغلال كامل بهذه الطريقة، على الرغم من أنك تستطيع إذا أردت ذلك حقًا. نكتب أيضًا عن أنماط أخرى من JOP، على الرغم من أن معظم أعمالنا تركز على نهج أداة المُوزِّع.

س: ما هي أداة المُوزِّع؟ هل يسهل العثور عليها؟ ما هو المُوزِّع ثنائي القطع؟

ج: كانت تلك أداة نادرة نسبيًا وليس من السهل دائمًا العثور عليها؛ بعض الملفات الثنائية لن تحتوي على أدوات مُوزِّع قابلة للاستخدام. لاحظ أن صيغة الماضي مستخدمة هنا. لقد قدمنا أدوات مُوزِّع بديلة، والأهم من ذلك، مُوزِّعًا ثنائي القطع، والذي كتبنا عنه في ورقة HITB. يأخذ هذا قطعتين شائعتين ويربطهما معًا، لذا لم تعد أداة المُوزِّع نادرة. إحدى القطع المطلوبة شائعة جدًا بحيث توجد عادةً تنويعات منها لجميع السجلات تقريبًا؛ والأخرى شائعة جدًا أيضًا، لكن ليست بنفس القدر. قد تكون هناك قيود عملية أخرى، فإذا كنت تستخدم مُوزِّعًا ثنائي القطع، فسيؤدي ذلك إلى تقييد سجل آخر. (من الممكن تبديل أدوات المُوزِّع والسجلات المستخدمة أثناء الاستغلال، إذا كانت هناك حاجة إلى مرونة إضافية.)

س: هل نموذج القطعتين مدمج في توليد سلسلة JOP التلقائي في JOP ROCKET؟

ج: لا، ليس كذلك. كان توليد سلسلة JOP التلقائي مستهلكًا للوقت لإنشائه، وقد أنشأت مفهوم المُوزِّع ثنائي القطع بعد القيام بذلك. قد أحاول إضافته في وقت ما، لكن ليس في المستقبل القريب. على الأرجح لن يُضاف إلا إذا قمت بإعادة كتابة كاملة لـ JOP ROCKET. افتراضيًا، ستقوم JOP ROCKET بإنشاء تنويعات مختلفة من سلاسل JOP لجميع السجلات المتاحة، حتى إذا تعذر العثور على أداة مُوزِّع تقليدية. وبالتالي، لن يتطلب الأمر جهدًا كبيرًا من شخص ما للذهاب وإضافة المُوزِّع ثنائي القطع الخاص به. على الرغم من أنه يجب على المرء الانتباه إلى السجلات التي تحتاج إلى الحماية لصالح المُوزِّع ثنائي القطع، لأن الأداة لن تقوم بذلك تلقائيًا.

س: أريد أن أحاول إنشاء سلسلة JOP الخاصة بي؟ هل يمكنني ذلك؟

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

س: لماذا تستخدم JOP ROCKET نمطًا أقدم من بايثون؟ هل ستغيره إلى بايثون حديث؟

ج: تم إنشاؤها أولاً منذ عدة سنوات، ولم تكن لدي أي نية في ذلك الوقت لمشاركتها أبدًا. لم أقدمها إلى DEFCON إلا بالصدفة. لسوء الحظ، الاختلافات بين بايثون الحديث والقديم تجعل تغيير JOP ROCKET أمرًا غير تافه على الإطلاق، وهناك العديد من الوظائف المعقدة حيث ستظهر الاختلافات. JOP ROCKET كبيرة جدًا أيضًا، ولا أتذكر بالضرورة جميع الأماكن التي ستكون هناك حاجة إلى تغييرات فيها. على الأرجح، سأقوم بإعادة كتابة كاملة لـ JOP ROCKET، مع جعل أجزاء منها أكثر نمطية واقتصادية مما هي عليه حاليًا. هناك العديد من الميزات الجديدة التي أرغب في إضافتها إذا قمت بذلك، ويمكنني القيام بأشياء رائعة جدًا إذا قمت بذلك. ليست لدي خطط في المستقبل القريب، لكنها قد تكون في غضون سنة إلى ثلاث سنوات قادمة. ومع ذلك، لا تقل أبدًا أبدًا، فأحيانًا يمكنني إعادة كتابة الكود بسرعة كبيرة. قد أجري تحديثات أخرى على JOP ROCKET الحالية خلال ذلك الوقت، حيث أن التحديثات الأصغر أسهل من إعادة الكتابة الكاملة.

س: من هو "نحن"؟

ج: مبتكر JOP ROCKET هو الدكتور برامويل بريزندين. كان هذا في الأصل موضوع أطروحته للدكتوراه، لكنه نما وتغير كثيرًا منذ ذلك الوقت. أحد طلابه، أوستن بابكوك، انخرط في أبحاث JOP كطالب جامعي واستمر معها خلال درجة الماجستير في علوم الكمبيوتر. خلال ذلك الوقت كان أوستن مؤلفًا مشاركًا للعديد من الأوراق ومتحدثًا مشاركًا في عدة أحداث. قدم أوستن مساهمات مهمة في آليات كيفية عمل JOP. انضم لاحقًا كمساهم في JOP ROCKET، حيث قدم بشكل أساسي تحسينات وتطويرات للكود. قام أوستن بصنع العديد من استغلالات JOP. واحد منها على ExploitDB.

**س: ما هي أحدث الأشياء في JOP التي قمتم بها أنتم؟**ج: حسنًا، هناك الموزع ثنائي الأدوات، الذي يجعل JOP ممكنًا مع العديد من الملفات الثنائية، إذ لم يعد موزع الأدوات نادرًا. هذا أمر ضخم — لأنه في حالات كثيرة كان غياب أداة موزع صالحة يمثل قيدًا — ولم يعد هذا هو الحال ببساطة. لقد قدمنا أيضًا بعض أدوات الموزع المفردة البديلة، وإن كان معظمها لا يبدو شائعًا (يعود الفضل في بعضها إلى أندرو كريمر). كما قدمنا "JOP بدون شيل كود"، الذي يلغي الحاجة إلى تجاوز DEP ويدمج وظيفة الشيل كود مباشرة في JOP. وقد عرضنا جزءًا صغيرًا من ذلك في HITB والمزيد في @Hack 2021 (Black Hat MEA). لم يتم تصوير @Hack، لكن توجد ورقة بحثية مفصلة جدًا عنه. ويمكن مشاهدة مقطع له أثناء العمل في بعض مقاطع الفيديو التوضيحية الصامتة لـ @Hack 2021: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV . وقد قبل عدد من الطلاب تحدّي JOP بدون شيل كود — وهو ما يتطلب مهارة أعلى وإتقانًا أكبر لهجمات إعادة استخدام الكود.

س: هل يعمل JOP ROCKET مع الملفات الثنائية الخاصة بـ Linux؟

ج: لا، للأسف لا يعمل.

س: هل يعمل JOP ROCKET مع الملفات الثنائية ذات 64 بت؟

ج: لا، ليس في الوقت الحالي.

س: ما هو النهج العام لـ JOP؟

ج: اقرأ أوراقنا البحثية أو شاهد محاضراتنا. لقد قمنا بقدر هائل من العمل لتوسيع نطاق ما يمكن إنجازه باستخدام JOP. لم تكن هناك أي وثائق تقريبًا عن JOP قبل أبحاثنا، وقد ابتكرنا العديد من التقنيات العملية الجديدة لـ JOP.

س: أنا باحث أكاديمي وأريد إنجاز عمل يتعلق بـ JOP مثل ورقة بحثية أو عرض تقديمي. هل يمكنني التواصل معك؟

ج: بالتأكيد، يمكنك التواصل معنا إذا كنت تخطط لإعداد ورقة بحثية أو مشروع جديد. يمكنك الوصول إليّ عبر البريد: bramwell.brizendine AT gmail. وسأنقل ذلك إلى أوستن إذا كان مهتمًا. وقد نكون مهتمين أيضًا بالتعاون. يرجى الاستشهاد بأعمالنا إذا استخدمت أبحاثنا بأي شكل يتعلق بـ JOP. ولعل النهج الأكثر عملية للبحث المتعلق بـ JOP هو تقديم بعض الدفاعات أو إجراءات التخفيف منه. لقد تم التواصل معنا من قبل.

س: هل قام أشخاص آخرون بتنفيذ JOP؟

ج: إنه ليس أمرًا شائعًا، وقبل أول محاضرة لنا في DEFCON كان نادرًا للغاية. لقد عملنا بالتأكيد على زيادة الوعي به بشكل كبير. سبق أن درّسته في دورة الدكتوراه "استغلال البرمجيات المتقدم" لمدة ثلاث سنوات، لذا قام العشرات من الطلاب بإنشاء استغلالات JOP. لا أعرف كم عدد الأشخاص الذين يستخدمونه في العالم الواقعي — لكن يمكن للأشخاص الآن بالتأكيد القيام بذلك باستخدام JOP ROCKET. كما كان لديّ طلاب بكالوريوس مختلفون قاموا بإنشاء استغلالات JOP. لا يوجد سبب خاص يفرض أن يكون المنفذ طالب دكتوراه — فبإمكان أي شخص يتمتع بكفاءة قوية في الاستغلال وهجمات إعادة استخدام الكود فعل ذلك. ومع عدد المحاضرات التي قدمناها والأوراق التي كتبناها — إلى جانب الابتكارات مثل الموزع ثنائي الأدوات — فلا يوجد أي سبب يمنع أي شخص ماهر في ROP من إتقان الأمر.

س: لماذا كان JOP ROCKET ضروريًا؟

ج: بدون JOP ROCKET، ستكتشف فقط جزءًا صغيرًا من أدوات JOP، وستكون غير منظمة، لذا فإن العثور على شيء منها سيكون كالبحث عن إبرة في كومة قش. العديد من أدوات JOP في العالم الواقعي هي أدوات غير مقصودة ولا تظهر طبيعيًا، لذا ما لم تكن نوعًا من العباقرة المتفانين للغاية وتنشئ أدواتك أو نصوصك البرمجية الخاصة، فستفوّت الكثير إذا كنت تحاول تنفيذ استغلال JOP كامل خالٍ من أدوات ROP. هناك أيضًا أشياء مثل أدوات الموزع، التي سيتعين عليك إيجادها بطريقة سحرية بنفسك، حتى في أشكالها غير المقصودة. هناك سبب وجيه لكون JOP نادرًا جدًا ويُتحدث عنه قليلًا قبل عملنا. وهذا لا يعني أنه أصبح شائعًا الآن. قبل JOP ROCKET، واجهت عدة مشكلات كبيرة لتتغلب عليها لكتابة استغلال. الآن مع JOP ROCKET تم تجاوز هذه المشكلات، ويمكنك بناء استغلالك الخاص باستخدام أدوات JOP أو ربما تكييف سلسلة JOP تم إنشاؤها عبر التوليد التلقائي لسلاسل JOP.

س: هل يمكن أن يكون JOP أسهل من ROP؟

ج: في الواقع، سمعت من بعض الطلاب أن JOP أسهل من ROP — وقد يكون كذلك — مع الأداة الصحيحة واستخدام نهجنا الجديد في أداة الموزع مع تحويلات مكدس متعددة. لاحظ أن الكلمة الأساسية هنا هي "قد يكون". وهذا صحيح فقط في ظروف خاصة، مثل عدم وجود قيود على البايت الصفري، ووفرة أدوات تحويل المكدس، وبافتراض وجود أداة موزع صالحة.

س: لمن يُعد JOP؟

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

س: لقد قمت بالتوليد التلقائي لسلاسل JOP، وقام بإنشاء الكثير من السلاسل المختلفة لـ VirtualAlloc و VirtualAlloc. لماذا يوجد هذا العدد الكبير؟

ج: أنا أتعامل مع JOP من منظور أن بعض السجلات ستحتفظ بمؤشر إلى أداة الموزع ومؤشر إلى جدول التوزيع، لذا فإن هذه السجلات تكون مشغولة. الأدوات الوظيفية (الأكثر تشابهًا مع أدوات ROP العادية) ستستدعي أداة الموزع، التي تقدم الموضع في جدول التوزيع. وبالتالي يُنشئ JOP ROCKET سلاسل مختلفة باستخدام توليفات مختلفة من السجلات. وسيتم "حجز" بعض السجلات لأداة الموزع وجدول التوزيع، وإن أردت يمكنك التبديل بينها ذهابًا وإيابًا كما تشاء. بعض السجلات ستوفر سلاسل JOP أكثر ملاءمة — بمعنى أنها ربما تحتوي أدوات "أسهل" في الاستخدام. ولذلك نفضل توفير خيارات. افتراضيًا، سيولّد JOP ROCKET خمسة سلاسل لكل واحدة، فإذا كانت هناك مشكلة في واحدة، فربما يتوفر لديك أخرى للنظر فيها. بالإضافة إلى ذلك، سيقوم JOP ROCKET بتوليد هذه السلاسل حتى إذا لم يتم العثور على أداة موزع مرغوبة، إذ يمكن دائمًا وجود بدائل أو موزعات ثنائية الأدوات. (يكتشف JOP ROCKET الموزعات ثنائية الأدوات، لكنه لا يدمجها حاليًا في توليد سلاسل JOP.) وبالعودة إلى السؤال، سيحاول JOP ROCKET توفير الكثير من الخيارات، ويتحمل المستخدم مسؤولية تقييمها وتحديد الأكثر ملاءمة أو الأسهل في العمل بها.

س: JOP ROCKET لا يعطيني نتائج جيدة بالنسبة للتوليد التلقائي لسلاسل JOP. لماذا؟

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

س: هل توجد أي "ثغرات" تتعلق بـ JOP في المترجمات؟

ج: في الواقع، نعم، مع VisualStudio 2015، فإن كل ما وجدناه مترجمًا باستخدام Developer Prompt احتوى على مجموعة من أدوات الموزع المرغوبة للغاية التي كانت موجودة دائمًا! كنت أنوي تضمين معلومات مفصلة عن هذا في إحدى المحاضرات، لكن الوقت لم يسمح. قد أضمّن ذلك بشكل منفصل في وقت لاحق. الأخبار السيئة هي أننا قمنا بتقييم جميع الملفات الثنائية التي أُنشئت بواسطة إصدارات أخرى من Visual Studio لسنوات أخرى، حتى حوالي عام مضى، ولم نرَ هذا الأمر يتكرر. وفي حين أنه من الجيد توفر أدوات موزع ممتازة، إلا أنها ليست ضرورية، كما هو موضح في مواضع أخرى، وذلك بفضل الموزع ثنائي الأدوات الجديد الذي قدمناه. بالإضافة إلى ذلك، هذا ليس في الحقيقة ثغرة، بل مجرد وسيلة لضمان أن JOP متاح بسهولة، على افتراض وجود بعض الثغرات الحقيقية.

س: هل JOP ROCKET أداة مستقلة؟ وهل تعمل مع مصحح أخطاء؟

ج: نعم، إنها أداة مستقلة تعتمد على التحليل الساكن، ولا، لا يمكن دمجها مع مصحح أخطاء مثل Mona. يوجد خيار داخل JOP ROCKET للبحث في ملفات DLL التي يمكنه العثور عليها، ويمكنه البحث فيها، على الرغم من أنه من الواضح أن معظم ملفات DLL الخاصة بنظام Windows لن تكون قابلة للاستخدام بسبب إجراءات التخفيف. يمكنك جعل JOP ROCKET يستبعد أو يُدرج بناءً على إجراءات التخفيف. ولأنه تحليل ساكن، فبالرغم من أنه يمكنه اختياريًا البحث في ملفات DLL، قد يفوّت بعضها غير الموجودة في IAT أو التي لا يمكن لـ JOP ROCKET تحديد مواقعها بسهولة. وهذا قيد متأصل في التحليل الساكن. افتراضيًا، سيبحث JOP ROCKET فقط داخل الصورة نفسها، أي ملف .exe، وليس ملفات DLL، توفيرًا للوقت. إذا كنت تحاول تحليل ملف ثنائي والنظر في ملفات DLL غير النظامية، فيجب أن يكون هذا التطبيق مثبتًا، وعليك توفير مساره. وإذا لم تكن مهتمًا بملفات DLL، فلست بحاجة إلى تثبيت الملف الثنائي.

س: هل يمكنك التعليق على الاقتباس التالي: "JOP ROCKET هي أداة نُشرت في 2019 بواسطة [Bri19]، وتدّعي أنها تولّد سلاسل JOP كاملة بطريقة آلية بالكامل. عند الفحص الدقيق، نجد أن أي حالة استخدام واقعية لتقنيتها تتكون من سلسلة مختلطة من ROP و JOP، حيث لا يُكوَّن سوى جزء صغير من النتيجة من أدوات JMP النقية، بينما يتكون الباقي من أدوات تنتهي بتعليمة RET، وهي ضرورية لإعداد سلسلة JOP."

ج: للأسف، يعكس ما سبق فهمًا ضعيفًا لـ JOP. يعتمد JOP على نموذج أداة الموزع، الذي يتطلب جدول توزيع وأداة موزع. يجب تحميل عنوان أداة الموزع وجدول التوزيع في السجلات المخصصة لكل منهما لإعداد JOP. وعلى الرغم من أن هذا يمكن تحقيقه عبر JOP، فقد تم ذلك لأغراض التوافق باستخدام أداتَي ROP تعتمدان على تعليمة pop. وبالتالي، بعد هذا التهيئة التي تتكون من أداتَي ROP فقط، لا تُستخدم أي أدوات ROP إضافية. يتراوح عدد أدوات JOP المستخدمة من واحدة إلى العشرات، اعتمادًا على المدخلات المقدمة من المستخدم. المشكلة هنا ليست في الأداة، بل في سوء فهم الأداة و JOP. يقدم JOP ROCKET بالفعل استغلالات مناسبة للتطبيقات الواقعية إذا قدمت المدخلات المناسبة. بل إن هذا قد استُخدم في دورة "استغلال البرمجيات المتقدم" التي درّسها المؤلف سابقًا، حيث طُلب من الطلاب استخدام JOP ROCKET لإنشاء استغلالات JOP مختلفة. ومن المخيب للآمال أن هذه التعليقات صدرت ضمن بحث أكاديمي، حيث يتم استخدام حد أقصى من أداتَي ROP فقط لكل سلسلة JOP. إن الاستغلال الواقعي الوحيد لـ JOP الذي نعرفه على Exploit_DB هو من إعداد أحدنا، أوستن بابكوك، وكما شرح في Hack in the Box Amsterdam 2021، فإن استغلاله يحاكي بشكل وثيق ما وجده JOP ROCKET. في معظم الحالات العملية، لا يحدث فرقًا حقيقيًا إذا استخدمت أداتَي ROP للإعداد. وأحيانًا قد لا تتوفر أدوات JOP مناسبة لملف ثنائي معين، بطريقة تتوافق مع نموذج أداة الموزع، من أجل إعداد JOP. نحن نفضل أن يكون JOP ممكنًا على كل ملف ثنائي قدر الإمكان، بدلًا من تقييده برغبة في الحصول على JOP نقي 100٪. أحد أكبر القيود في JOP، بعد كل شيء، هو عدم كفاية أدوات JOP. وفي وقت كتابة هذه السطور في عام 2024، لا توجد تحديثات نشطة تُجرى على JOP ROCKET، وفي أي إصدار جديد محتمل، سيكون أكثر تقدمًا بكثير ومنسقًا على غرار ROP ROCKET الأحدث بكثير، ومن المرجح أن يتضمن خيارًا لـ JOP النقي.

تنزيل الأداة