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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Ponce — الفائز في مسابقة إضافات IDA 2016! Symbolic Execution بنقرة واحدة فقط! | Kitploit
أدوات/GitHubGitHub/illera88/ponce
الهندسة العكسيةمصممي الأخطاءتحليل البرمجيات الخبيثةCTFتحليل الملفات الثنائية
GitHubillera88/ponce

Ponce

الفائز في مسابقة إضافات IDA 2016! Symbolic Execution بنقرة واحدة فقط!

عرض المستودع
1.6k85منذ سنة واحدةتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

Build for Windows Build for OSX Build for Linux

Ponce

Ponce (تُنطق [ 'poN θe ] بون-ثي) هو إضافة لـ IDA Pro تتيح للمستخدمين إمكانية إجراء تحليل التلوث والتنفيذ الرمزي على الثنائيات بطريقة سهلة وبديهية. مع Ponce أنت على بُعد نقرة واحدة من الحصول على كل قوة التنفيذ الرمزي المتطور. كُتب بالكامل بلغة C/C++.

لماذا؟

التنفيذ الرمزي ليس مفهومًا جديدًا في مجتمع الأمن السيبراني. لقد كان موجودًا لسنوات عديدة، ولكن لم يتم إنشاء مشاريع مفتوحة المصدر مثل [Triton] (https://github.com/JonathanSalwan/Triton) و [Angr] (http://angr.io/) لمعالجة هذه الحاجة إلا حوالي عام 2015. على الرغم من توفر هذه المشاريع، غالبًا ما يُترك المستخدمون النهائيون لتنفيذ حالات استخدام محددة بأنفسهم.

لقد عالجنا هذه الاحتياجات بإنشاء Ponce، وهي إضافة لـ IDA تنفذ التنفيذ الرمزي وتحليل التلوث داخل أقوى مفكك/مصحح أخطاء لمهندسي الهندسة العكسية.

التثبيت

يعمل Ponce مع الثنائيات x86 و x64 في أي إصدار IDA >= 7.0. تثبيت الإضافة بسيط مثل نسخ الملفات المناسبة من [أحدث الإصدارات] (https://github.com/illera88/Ponce/releases/latest) إلى مجلد plugins\ في دليل تثبيت IDA الخاص بك.

تأكد من استخدام ثنائي Ponce المُجمَّع لإصدار IDA الخاص بك لتجنب أي تعارضات.

دعم أنظمة التشغيل

يعمل Ponce على ويندوز ولينكس و macOS بشكل أصلي!

حالات الاستخدام

  • تطوير الاستغلال: يمكن أن يساعدك Ponce في إنشاء استغلال بطريقة أكثر كفاءة، حيث يمكن لمطور الاستغلال رؤية أجزاء الذاكرة والسجلات التي يتحكم فيها بسهولة، بالإضافة إلى العناوين المحتملة التي يمكن استغلالها كأدوات ROP.
  • تحليل البرمجيات الخبيثة: استخدام آخر لـ Ponce يتعلق بتحليل كود البرمجيات الخبيثة. يمكن بسهولة تحديد الأوامر التي تدعمها عائلة معينة من البرمجيات الخبيثة عن طريق ترميز أمر معروف ونفي جميع الشروط التي يتم فيها التحقق من الأمر.
  • هندسة عكسية للبروتوكولات: من أكثر استخدامات Ponce إثارة للاهتمام إمكانية التعرف على الأرقام السحرية المطلوبة، الرؤوس، أو حتى البروتوكولات الكاملة لإدخال المستخدم المتحكم فيه. على سبيل المثال، يمكن أن يساعدك Ponce في سرد جميع الوسائط المقبولة لأداة سطر أوامر معينة أو استخراج تنسيق الملف المطلوب لمحلل ملفات معين.
  • مسابقات CTF: يسرّع Ponce عملية هندسة الثنائيات العكسية خلال مسابقات CTF. نظرًا لأن Ponce مدمج بالكامل في IDA، فلا داعي للقلق بشأن وقت الإعداد. إنه جاهز للاستخدام!

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

أوضاع الاستخدام

  • محرك التلوث: يُستخدم هذا المحرك لتحديد في كل خطوة من تنفيذ الثنائي أي أجزاء من الذاكرة والسجلات يمكن التحكم بها بواسطة إدخال المستخدم.
  • المحرك الرمزي: يحافظ هذا المحرك على حالة رمزية للسجلات وجزء من الذاكرة في كل خطوة في مسار تنفيذ الثنائي.

أمثلة

النفي والحقن لشرط

في الصورة المتحركة التالية نرى استخدام التلوث التلقائي وكيف يمكننا نفي شرط وحقنه في الذاكرة أثناء التصحيح:

  • نختار المحرك الرمزي ونضبط الخيار على ترميز argv.
  • نحدد الشرط الذي يجب تحقيقه للفوز في crackMe.
  • ننفي ونحقن الحل في كل مرة يتم فيها التحقق من بايت من إدخالنا مقابل المفتاح.
  • أخيرًا نحصل على المفتاح elite الذي تم حقنه في الذاكرة وبالتالي نصل إلى كود Win.

يمكن العثور على الكود المصدري للـ crackme [هنا] (https://github.com/illera88/Ponce/blob/master/examples/crackme_xor.cpp)

![crackmexor_negate_and_inject] (https://cloud.githubusercontent.com/assets/5193128/18558282/5dd1cbca-7b27-11e6-81d7-13044bfc0b59.gif)

استخدام محرك التلوث لتتبع الإدخال المتحكم به من المستخدم

في هذا المثال نرى استخدام محرك التلوث مع cmake. نقوم بما يلي:

  • تمرير ملف كوسيطة إلى cmake لتجعله يحلله.
  • نختار استخدام محرك التلوث.
  • نلوث المخزن المؤقت الذي يقرأ منه fread() من الملف.
  • نستأنف التنفيذ تحت سيطرة مصحح الأخطاء لرؤية أين يتم نقل الإدخال الملوث.
  • سيقوم Ponce بإعادة تسمية الدوال الملوثة. هذه هي الدوال التي للمستخدم تأثير عليها بطريقة ما، وليس الدوال التي تم تنفيذها ببساطة.

![cmake_tainting_fread] (https://cloud.githubusercontent.com/assets/5193128/18558313/7aaa6d88-7b27-11e6-9c63-9870720d14e3.gif)

استخدام النفي والحقن والاستعادة

في المثال التالي نستخدم محرك اللقطات:

  • تمرير ملف كوسيطة.
  • نختار استخدام المحرك الرمزي.
  • نلوث المخزن المؤقت الذي يقرأ منه fread() من الملف.
  • ننشئ لقطة في الدالة التي تحلل المخزن المؤقت المقروء من الملف.
  • عند تقييم شرط، ننفيه، ونحقن الحل في الذاكرة، ونستعيد اللقطة به.
  • سيكون الحل "صالحًا" وبالتالي سنفي بالشروط الموجودة.

![fread_test_negate_restore_inject] (https://github.com/illera88/Ponce/tree/780e1992a935d310f5a956e6ece6b8f630a853a7/media/x64_fread_test_negate_restore_inject.gif?raw=true) يمكن العثور على الكود المصدري للمثال [هنا] (https://github.com/illera88/Ponce/blob/master/examples/fread_SAGE.cpp)

الاستخدام

في هذا القسم سنقوم بإدراج خيارات Ponce المختلفة بالإضافة إلى اختصارات لوحة المفاتيح:

  • الوصول إلى نافذة التكوين والتلوث/الرمزية: Edit > Ponce > Show Config (Ctl+Shift+P و Ctl+Alt+T)

![2016-09-15 11_39_08-configuracion] (https://cloud.githubusercontent.com/assets/5193128/18563366/44a8c698-7b3c-11e6-8802-efb3fe4a5a2d.png)

  • تمكين/تعطيل تتبع Ponce (Ctl+Shift+E)

![2016-09-15 11_31_34-] (https://cloud.githubusercontent.com/assets/5193128/18563294/fd2cf992-7b3b-11e6-911f-c91c76804b5a.png)

  • ترميز/تلويث سجل (Ctl+Shift+R)

![2016-09-15 11_32_32-] (https://cloud.githubusercontent.com/assets/5193128/18563447/7e4db840-7b3c-11e6-813b-868bdae515bc.png)

  • ترميز/تلويث الذاكرة. يمكن القيام بذلك من IDA View أو Hex View (Ctl+Shift+M)

![2016-09-15 11_32_52-ida - testproject idb testproject exe c__users_default default-pc_documents_vi] (https://cloud.githubusercontent.com/assets/5193128/18563458/88c5bb7e-7b3c-11e6-8b4e-f4a694cad5a8.png) ![2016-09-15 11_33_10-taint _ symbolize memory range] (https://cloud.githubusercontent.com/assets/5193128/18563460/8adbb8f0-7b3c-11e6-886f-02441bff63a4.png)

![2016-09-15 12_09_11-inicio] (https://cloud.githubusercontent.com/assets/5193128/18563642/45860a7a-7b3d-11e6-9f95-e7aed529cc85.png)

  • حل الصيغة (Ctl+Shift+S)

![2016-09-15 11_35_11-] (https://cloud.githubusercontent.com/assets/5193128/18563556/e093f0c8-7b3c-11e6-9b37-b3b2c7111d57.png)

  • النفي والحقن (Ctl+Shift+N)

![2016-09-15 11_34_44-] (https://cloud.githubusercontent.com/assets/5193128/18563423/6db81160-7b3c-11e6-94a2-698ff334c024.png)

  • النفي والحقن واستعادة اللقطة (Ctl+Shift+I)

![2016-09-15 11_47_19-] (https://cloud.githubusercontent.com/assets/5193128/18563350/34e0fd20-7b3c-11e6-8040-7e5899fc200f.png)

  • إنشاء لقطة تنفيذ (Ctl+Shift+C)

![2016-09-15 11_37_40-] (https://cloud.githubusercontent.com/assets/5193128/18563529/cfc599c2-7b3c-11e6-84e1-5dd5c7b27537.png)

  • استعادة لقطة تنفيذ (Ctl+Shift+S)

![2016-09-15 11_38_10-] (https://cloud.githubusercontent.com/assets/5193128/18563411/63cfeb50-7b3c-11e6-8f56-255bb27bc8f2.png)

  • حذف لقطة تنفيذ (Ctl+Shift+D)

![2016-09-15 11_38_23-] (https://cloud.githubusercontent.com/assets/5193128/18563385/53df1d42-7b3c-11e6-8c2f-f1bd16369f79.png)

  • التنفيذ الأصلي (Ctl+Shift+F9)

![2016-09-15 12_07_10-] (https://cloud.githubusercontent.com/assets/5193128/18563579/fc95339a-7b3c-11e6-9947-971e0510eba4.png)

Triton

يعتمد Ponce على [إطار عمل Triton] (https://github.com/JonathanSalwan/Triton) لتوفير الدلالات وتحليل التلوث والتنفيذ الرمزي. Triton هو مشروع مفتوح المصدر رائع برعاية Quarkslab ويتم صيانته بشكل أساسي بواسطة [Jonathan Salwan] (http://shell-storm.org/) بمكتبة غنية. نود أن نشكر ونثني على عمل Jonathan مع Triton. أنت رائع! :)

البناء

منذ Ponce الإصدار v0.3، قمنا بنقل عملية بناء التجميع لاستخدام CMake. من خلال القيام بذلك، نقوم بتوحيد طريقة حدوث التكوين والبناء لأنظمة لينكس وويندوز و macOS. نحن ندعم الآن تقديم ملاحظات حول الكود الزائف حول تعليمات الرمزية أو التلوث. لكي تعمل هذه الميزة، تحتاج إلى إضافة hexrays.hpp إلى مجلد include الخاص بـ IDA SDK الخاص بك. يمكن العثور على hexrays.hpp في plugins/hexrays_sdk/ في مسار تثبيت IDA الخاص بك. إذا لم تكن قد اشتريت مفكك hex-rays، فلا يزال بإمكانك بناء Ponce باستخدام -DBUILD_HEXRAYS_SUPPORT=OFF. نحن نستخدم Github actions كبيئة CI الخاصة بنا. تحقق من [ملفات الإجراءات] (https://github.com/illera88/Ponce/tree/master/.github/workflows) إذا كنت تريد فهم كيفية حدوث عملية البناء.

الأسئلة الشائعة

لماذا اسم Ponce؟

كان خوان بونس دي ليون (1474 – يوليو 1521) مستكشفًا وكونكيستادور إسبانيًا. اكتشف فلوريدا في الولايات المتحدة. ستساعدك إضافة IDA على اكتشاف واستكشاف، ونأمل، التغلب على المسارات المختلفة في الثنائي.

هل يمكن استخدام Ponce لتحليل ثنائيات ويندوز و macOS ولينكس؟

نعم، يمكنك استخدام Ponce بشكل أصلي في IDA لويندوز أو الاتصال عن بُعد بجهاز لينكس أو macOS واستخدامه. في إصدار Ponce التالي، سندعم Ponce بشكل أصلي لإصدارات IDA الخاصة بلينكس و macOS.

كم عدد التعليمات في الثانية التي يمكن لـ Ponce معالجتها؟

في اختباراتنا وصلنا إلى معالجة 3000 تعليمة في الثانية. نخطط لاستخدام متتبع PIN الذي توفره IDA لزيادة السرعة.

شيء لا يعمل!

افتح [مشكلة] (https://github.com/illera88/Ponce/issues)، سنقوم بحلها في أقرب وقت ممكن ;)

أحب مشروعك! هل يمكنني المساهمة؟

بالتأكيد! يرجى عمل طلبات سحب والعمل على المشكلات المفتوحة. سندفع لك بالبيرة مقابل المساعدة ;)

القيود

التنفيذ التزامني (concolic) و Ponce لديهما بعض المشاكل:

  • تحميل/كتابة ذاكرة رمزية: عندما يكون الفهرس المستخدم لقراءة قيمة ذاكرة رمزيًا مثل x = aray[symbolic_index]، تنشأ بعض المشاكل التي قد تؤدي إلى فقدان تتبع الإدخال المتحكم به من المستخدم الملوث/المرمز.

  • Triton لا يعمل بشكل جيد مع [تعليمات الفاصلة العائمة] (https://github.com/illera88/Ponce/issues/59).

  • التنفيذ التزامني يحلل فقط التعليمات المنفذة. وهذا يعني أن التتبع الرمزي يُفقد في حالات مثل التالية:

    root@kitploit:~
    int check(char myinput)  // Input is symbolic/tainted
    {
    int flag = 0;
    if (myinput == 'A')  //This condition is symbolic/tainted
      flag = 1
    else
      flag =- 1;
    return flag; // flag is not symbolic/tainted!
    }
    

المؤلفون

  • Alberto Garcia Illera [(@algillera)] (https://twitter.com/algillera) [email protected]
  • Francisco Oca [(@francisco_oca)] (https://twitter.com/francisco_oca) [email protected]
تنزيل الأداة