
B2R2 هو إطار عمل تحليل ثنائي مُدار بالكامل مكتوب بلغة F#. يوفر مجموعة غنية من الخوارزميات والوظائف والأدوات للهندسة العكسية، وتحليل البرامج، وفحص المستوى الثنائي.

B2R2 هو إطار عمل لتحليل البرامج الثنائية مكتوب بالكامل بلغة F#. يوفر مجموعة غنية من الخوارزميات والوظائف والأدوات للهندسة العكسية وتحليل البرامج وفحص المستوى الثنائي.
اسم B2R2 مستوحى من R2-D2، الروبوت الأيقوني من حرب النجوم. سُمي المشروع في الأصل B2-R2، ثم اعتمد لاحقًا النموذج الخالي من الشرطة B2R2 لأن معرفات .NET ومساحات الأسماء لا تسمح بالواصلات. يعكس الاسم غرض المشروع: يشير "B" و"2" إلى الحساب الثنائي ثنائي الحالة، بينما يمثل "R" الهندسة العكسية. باختصار، B2R2 صُمم للهندسة العكسية الثنائية.
B2R2 سَهْل التحليل: مكتوب بلغة F#، وهي لغة مناسبة لبناء محللي البرامج بفضل مزايا مثل مطابقة الأنماط وأنواع البيانات الجبرية والتجريدات الوظيفية التعبيرية.
B2R2 سريع: تم تصميم محرك تحليل البرامج الثنائية الأساسي الخاص به لتحقيق الكفاءة ومكتوب بأسلوب وظيفي أولاً. وهذا يجعله مناسبًا بشكل طبيعي لـ التوازي النقي عبر مهام التحليل الشائعة مثل رفع التعليمات واستعادة تدفق التحكم.
B2R2 سَهْل الاستخدام: باعتباره مكتبة مُدارة بالكامل، فإنه يتجنب إعدادات التبعيات الأصلية المعقدة. قم بتثبيت .NET SDK، وستكون جاهزًا للبدء. كما أن دعم IntelliSense الأصلي يجعل استكشاف واجهات برمجة التطبيقات أسهل.
B2R2 مستقل عن نظام التشغيل: يعمل على Linux وmacOS وWindows، بالإضافة إلى أي منصة أخرى يدعمها .NET.
B2R2 قابل للتشغيل البيني: لا يرتبط بلغة برمجة واحدة. من حيث المبدأ، يمكن استخدام واجهات برمجة تطبيقات B2R2 من أي لغة مدعومة من CLI.
يدعم B2R2 تحليل التعليمات، وفك تجميع البرامج الثنائية، والتجميع، واستعادة تدفق التحكم، ولبنات البناء الأساسية الأخرى لتحليل البرامج الثنائية. كما يتضمن العديد من أدوات سطر الأوامر الموجهة للمستخدم والمماثلة لـ readelf وobjdump، مع بقائه غير محدد المنصة. يدعم B2R2 حاليًا أربعة تنسيقات ملفات ثنائية: ELF وPE وMach-O وWebAssembly.
يلخص الجدول أدناه الميزات التي يدعمها B2R2 حاليًا. بعض المجالات لا تزال قيد التطوير، والمساهمات مرحب بها. قبل فتح طلب سحب، يرجى التأكد من قراءة إرشادات المساهمة الخاصة بنا.
| CPU | Docs | Ins Parsing | Disasm | Lifting | CFG Recovery | Assembly |
|---|---|---|---|---|---|---|
| x86 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: |
| x86-64 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: |
| ARMv7 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| ARMv8 (AArch64) | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| MIPS32 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| MIPS64 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| EVM | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :new_moon: |
| TMS320C6000 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
| AVR | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| PA-RISC | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
| PPC32 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| SPARC | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| SH4 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
| RISC-V | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| S390 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
يحافظ B2R2 على حجم التبعيات صغيرًا بشكل متعمد لتسهيل عملية البناء ولإبقاء النواة مركزة على الخوارزميات وهياكل البيانات الفعالة لتحليل البرامج الثنائية. لا تحتوي المكتبة الأساسية على أي تبعيات خارجية، ومعظم المكتبات الخارجية اختيارية وتستخدم فقط بواسطة مكونات أو أدوات معينة. فيما يلي قائمة بالمكتبات الخارجية المستخدمة في المشروع.