Quarkslab Dynamic Binary Binary (QBDI) عبارة عن إطار DBI متعدد المنصات والهندسة المعمارية. يهدف إلى دعم أنظمة تشغيل Linux و MacOS و Android و iOS و Windows التي تعمل على X86 و X86-64 و ARM و AARCH64. بالإضافة إلى C/C ++ API ، تتوفر روابط Python و JS/Frida للنص QBDI. يمكن العثور على معلومات حول ما هو إطار DBI وكيف يمكن العثور على عمل QBDI في مقدمة الوثائق.
تعني Modularity QBDI أنها لا تحتوي على طريقة حقن مفضلة وهي مصممة لاستخدامها بالاقتران مع أداة الحقن الخارجية. يشتمل QBDI على حاقن Linux و MacOS صغير ( LD_PRELOAD ) للمؤسسات التنفيذية الديناميكية (QBDipReload). تم دمج QBDI تمامًا مع Frida ، وهي مجموعة أدوات للأجهزة الديناميكية المرجعية ، مما يسمح لأي شخص باستخدام قوتهم المشتركة.
يتمثل القيد الحالي في أن QBDI لا يتعامل مع الإشارات ، MultiTreading (لا تتعامل مع إنشاء مؤشرات الترابط الجديدة) وآليات استثناء C ++. ومع ذلك ، من المحتمل ألا تكون هذه الميزات المعتمدة على النظام جزءًا من المكتبة الأساسية (KISS) ، ويجب دمجها كطبقة جديدة (ليتم تحديد كيفية).
| وحدة المعالجة المركزية | أنظمة التشغيل | تنفيذ | معلومات الوصول إلى الذاكرة |
|---|---|---|---|
| x86-64 | Android و Linux و MacOS و Windows | مدعوم | مدعوم |
| x86 | Android و Linux و MacOS و Windows | مدعوم | مدعوم |
| ذراع | Android ، Linux | مدعوم (*) | مدعوم (*) |
| AARCH64 | Android ، Linux ، Macos | مدعوم (*) | مدعوم (*) |
* يتم دعم مجموعات تعليمات ARM و AARCH64 ولكن في الدعم المبكر.
مستقر



ديف



يتم تجميع كل إصدار جديد من QBDI وإتاحته على صفحة إصدار GitHub.
PYQBDI متاح من خلال PYPI. يمكن تنزيل حزمة العجلات أو تثبيتها مع الأمر التالي:
PIP تثبيت PYQBDI
حزمة PYQBDI مستقلة تمامًا عن حزمة C/C ++.
لا يوجد جدول زمني صارم للتطوير أو خطة إصدار مجدولة لمشروع QBDI. يتم دمج جميع الميزات والإصلاحات الجديدة على فرع dev-next . يمكن تنزيل حزم التطوير في المصنوعات اليدوية من:
لبناء هذا المشروع ، هناك حاجة إلى التبعيات التالية على نظامك:
تم تصميم إصدار محلي من LLVM بشكل ثابت داخل QBDI لأن QBDI يستخدم واجهات برمجة التطبيقات الخاصة التي لا يتم تصديرها بواسطة تثبيتات LLVM العادية ولأن رمزنا متوافق فقط مع إصدار معين من واجهات برمجة التطبيقات هذه.
يعتمد نظام بناء QBDI على CMAKE ويتطلب تمرير أعلام التكوين. للمساعدة في هذه الخطوة ، نقدم البرامج النصية shell لتكوينات البناء الشائعة التي تتبع نمط التسمية config-OS-ARCH.sh . يعد تعديل هذه البرامج النصية أمرًا ضروريًا إذا كنت ترغب في تجميع في وضع التصحيح أو QBDI المتقاطع.
قم بإنشاء دليل جديد بجذر شجرة المصدر ، وقم بتنفيذ البرنامج النصي لتكوين Linux:
MKDIR بناء بناء القرص المضغوط ../cmake/config/config-linux-x86_64.sh النينجا
يمكنك اتباع نفس الإرشادات كما في X86-64 ولكن بدلاً من ذلك ، استخدم البرنامج النصي للتكوين config-linux-X86.sh .
يتطلب تجميع QBDI على MacOS بعض الأشياء:
xcode-select --install )port install cmake wget ninja )بمجرد الوفاء بالمتطلبات ، قم بإنشاء دليل جديد بجذر شجرة المصدر ، وتنفيذ البرنامج النصي لتكوين MacOS:
MKDIR بناء بناء القرص المضغوط ../cmake/config/config-macos-x86_64.sh النينجا
يتطلب البناء على Windows تثبيت Windows الخالص لـ Python 3 (من الحزم الرسمية ، وهذا أمر إلزامي) من أجل بناء تبعياتنا (نأمل حقًا تحسين هذا في المستقبل). كما أنه يتطلب محدثًا CMake و Ninja.
بادئ ذي بدء ، يجب إعداد بيئة Visual Studio. يمكن القيام بذلك بأمر مثل:
"C: Program Files (x86) Microsoft Visual Studio 2019 Community vc auxiliary build vcvarsall.bat" x64
ثم ، يجب تشغيل الأوامر التالية:
MKDIR بناء بناء القرص المضغوط Python ../cmake/config/config-wn-x86_64.py النينجا
يتطلب التوفيق بين Android أن يتم تثبيت NDK (أو SDK) على محطة العمل الخاصة بك. في الوقت الحالي ، تم اختباره فقط تحت Linux. إذا لم يتم تثبيتها بالفعل ، فيمكنك تنزيل أحدث حزمة Android NDK من خلال الموقع الرسمي واستخراجها. بعد ذلك ، يجب تخصيص برنامج config-android-*.sh
# تكوين وتجميع QBDI x86_64 مع NDK MKDIR Build && CD Build ndk_path = <your_ndk_path> ../cmake/config/config-android-x86_64.sh النينجا # تكوين وتجميع QBDI X86 مع SDK MKDIR Build && CD Build Android_SDK_ROOT = <YouR_SDK_PATH> ../cmake/config/config-android-x86.sh النينجا
يمكن بناء مكتبة PYQDBI (بصرف النظر عن حزمة العجلات) عن طريق تمرير "-DQBDI_TOOLS_PYQBDI = ON" إلى نظام بناء CMAKE.
ومع ذلك ، إذا كنت ترغب في إنشاء حزمة العجلات ، فيمكنك تشغيل هذه الأوامر:
تثبيت Python -M PIP -ترقية PIP Python -M Pip تثبيت Setuptools Wheel Build بيثون -M بناء -W
يعد إصدار 32 بت من Python إلزاميًا للهندسة المعمارية X86 ، في حين أن هناك 64 بت مطلوب للهندسة المعمارية x86-64.