
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 حاليًا. بعض المجالات لا تزال قيد التطوير، والمساهمات مرحب بها. قبل فتح طلب سحب، يرجى التأكد من قراءة إرشادات المساهمة الخاصة بنا.
يحافظ B2R2 على حجم التبعيات صغيرًا بشكل متعمد لتسهيل عملية البناء ولإبقاء النواة مركزة على الخوارزميات وهياكل البيانات الفعالة لتحليل البرامج الثنائية. لا تحتوي المكتبة الأساسية على أي تبعيات خارجية، ومعظم المكتبات الخارجية اختيارية وتستخدم فقط بواسطة مكونات أو أدوات معينة. فيما يلي قائمة بالمكتبات الخارجية المستخدمة في المشروع.
يتم إنشاء توثيقنا باستخدام fsdocs وهو متاح على https://b2r2.org/B2R2/.
لنجرب استخدام واجهات برمجة تطبيقات B2R2.
أولاً، أنشئ دليلاً فارغاً باسم DIRNAME:
mkdir DIRNAME
cd DIRNAME
ثم، أنشئ مشروع وحدة تحكم فارغاً باستخدام أداة سطر الأوامر dotnet:
$ dotnet new console -lang F#
أضف حزمة NuGet B2R2.FrontEnd.API إلى المشروع:
$ dotnet add package B2R2.FrontEnd.API
قم بتعديل ملف Program.fs باستخدام المحرر المفضل لديك كما يلي:
open B2R2
open B2R2.FrontEnd
[<EntryPoint>]
let main argv =
let isa = ISA "amd64"
let bytes = [| 0x65uy; 0xffuy; 0x15uy; 0x10uy; 0x00uy; 0x00uy; 0x00uy |]
let hdl = BinHandle(bytes, isa)
let lifter = hdl.NewLiftingUnit()
let ins = lifter.ParseInstruction 0UL // parse the instruction at offset 0
lifter.LiftInstruction ins |> printfn "%A"
0
قم بتشغيله بكتابة dotnet run. يجب أن ترى عبارات IR المرفوعة في وحدة التحكم الخاصة بك. هذا كل شيء! لقد قمت للتو برفع تعليمة Intel ببضعة أسطر فقط من كود F#.
بناء B2R2 أمر بسيط. قم بتثبيت .NET 10 SDK أو إصدار أحدث، وستكون جاهزًا للبناء من جذر المصدر.
لبناء B2R2 في وضع الإصدار، قم بتشغيل dotnet build -c Release.
لبناء B2R2 في وضع التصحيح، قم بتشغيل dotnet build.
لمزيد من المعلومات حول إعداد بيئة تطوير F#، قم بزيارة موقع F# الرسمي: http://fsharp.org/.
تم تطوير B2R2 بواسطة أعضاء مختبر SoftSec في KAIST بالتعاون مع مركز أبحاث أمن الفضاء الإلكتروني (CSRC) في KAIST. راجع AUTHORS.md للحصول على القائمة الكاملة للمساهمين.
إذا كنت تستخدم B2R2 في بحثك، فيرجى النظر في الاستشهاد بهذه الورقة البحثية:
@INPROCEEDINGS{jung:bar:2019,
author = {Minkyu Jung and Soomin Kim and HyungSeok Han and Jaeseung Choi and Sang Kil Cha},
title = {{B2R2}: Building an Efficient Front-End for Binary Analysis},
booktitle = {Proceedings of the NDSS Workshop on Binary Analysis Research},
year = 2019
}
يتوفر برنامج تعليمي عبر الإنترنت لـ B2R2، يغطي أساسيات استخدام B2R2 ويقدم أمثلة عملية. تحقق منه على الرابط التالي: https://b2r2.org/tutorial-icst2026/.
فيما يلي الأوراق البحثية التي تستخدم أو تبنى على 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: |