B2R2 عبارة عن مجموعة من الخوارزميات والوظائف والأدوات المفيدة للتحليل الثنائي ، مكتوبة بحتة في F# (في .NET LINGO ، يتم إدارتها بحتة). تم تسمية B2R2 على اسم R2-D2 ، ظهر روبوت خيالي مشهور في حرب النجوم. في الواقع ، كان الاسم الأصلي لـ B2R2 B2-R2 ، لكننا قررنا استخدام الاسم B2R2 بدلاً من ذلك ، لأن .NET لا يسمح بأحرف DASH (-) في المعرفات (أو مساحات الأسماء). يمثل الاسم أساسًا "ثنائي" أو "اثنان": "الثنائي" نفسه يعني "حالتين" على أي حال. يشير "B" و "2" يعني "ثنائي" ، و "R" إلى الانعكاس .
B2R2 صديق للتحليل : إنه مكتوب في F#، والذي يوفر جميع الأشياء الجيدة النحوية لكتابة تحليلات البرامج ، مثل مطابقة الأنماط وأنواع البيانات الجبرية وما إلى ذلك.
B2R2 سريع : إنه يحتوي على محرك أمامي سريع وفعال للتحليل الثنائي ، وهو مكتوب بطريقة وظيفية. لذلك ، فإنه يدعم بشكل طبيعي التوازي الخالص لفصل الثنائي والرفع وتحسين الأشعة تحت الحمراء.
B2R2 من السهل اللعب مع: لا يوجد على الإطلاق الجحيم التبعية لـ B2R2 لأنه مكتبة تديرها بالكامل. كل ما عليك فعله هو تثبيت .NET SDK ، وأنت مستعد للذهاب! دعم Intellisense الأصلي هو زائد آخر!
B2R2 مستقل عن OS : إنه يعمل على Linux و MAC و Windows و ETC.
B2R2 قابل للتشغيل : لا يرتبط بلغة معينة. من الناحية النظرية ، يمكنك استخدام واجهات برمجة تطبيقات B2R2 مع أي لغات مدعومة CLI.
يدعم B2R2 تحليل التعليمات ، والتفكيك الثنائي ، والتجميع ، واستعادة تدفق التحكم ، وغيرها الكثير. يأتي B2R2 أيضًا مع العديد من أدوات سطر الأوامر على مستوى المستخدم والتي تشبه Readelf و OBJDump ، على الرغم من أن أدواتنا هي منصة. يدعم B2R2 حاليًا أربعة تنسيقات للملفات الثنائية: ELF و PE و Mach-O و Webassembly.
فيما يلي قائمة بالميزات التي ندعمها حاليًا. بعضهم يعملون في التقدم ، لكننا نتطلع إلى مساهماتك! لا تتردد في كتابة العلاقات العامة (طلب السحب) أثناء التأكد من أنك قد قرأت إرشادات المساهمة الخاصة بنا.
| ميزة | x86 | x86-64 | ARMV7 | ARMV8 | MIPS32 | MIPS64 | EVM | TMS320C600 | AVR | PPC | سبارك | SH4 | RISC-V. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| تحليل التعليمات | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ |
| التفكيك | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ |
| رفع | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ |
| استرداد CFG | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ |
| تدفق البيانات | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ |
| مضاهاة التعليمات | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ |
| حَشد | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ |
| استبدال | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ |
| مجموعة ROP | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ | ؟ |
يعتمد B2R2 على مجموعة صغيرة من مكتبات .NET خارجية ، ومبدأ التصميم الخاص بنا هو استخدام الحد الأدنى من المكتبات. فيما يلي قائمة بالمكتبات التي نستفيد منها.
نستخدم حاليًا FSDOCs لإنشاء وثائقنا: https://b2r2.org/apidoc/.
دعنا نحاول استخدام واجهات برمجة التطبيقات B2R2.
أولاً ، ننشئ DIRNAME فارغًا:
mkdir DIRNAME
cd DIRNAME
ثم نقوم بإنشاء مشروع وحدة تحكم فارغة مع سطر أوامر dotnet :
$ dotnet new console -lang F#
أضف حزمة nuget b2r2.frontend إلى المشروع:
$ dotnet add package B2R2.FrontEnd.BinInterface
قم بتعديل ملف Program.fs مع المحرر المفضل لديك على النحو التالي:
open B2R2
open B2R2. FrontEnd . BinInterface
[<EntryPoint>]
let main argv =
let isa = ISA.OfString " amd64 "
let bytes = [| 0x65 uy ; 0xff uy ; 0x15 uy ; 0x10 uy ; 0x00 uy ; 0x00 uy ; 0x00 uy |]
let hdl = BinHandle.Init ( isa , bytes )
let ins = BinHandle.ParseInstr ( hdl , 0 UL )
ins.Translate hdl.TranslationContext |> printfn " %A "
0 ثم نقوم بتشغيله فقط عن طريق الكتابة: dotnet run . ستتمكن من رؤية عبارات IR المرفوعة من وحدة التحكم الخاصة بك. هذا كل شيء! لقد قمت فقط برفع تعليمات Intel مع أسطر قليلة فقط من رمز F#!
بناء B2R2 ممتع وسهل. كل ما عليك فعله هو تثبيت .NET 8 SDK أو أعلى. نعم ، هذا كل شيء!
لإنشاء B2R2 في وضع الإصدار ، اكتب make release أو dotnet build -c Release في جذر المصدر.
لبناء B2R2 في وضع التصحيح ، اكتب make ، أو dotnet build في جذر المصدر.
للحصول على معلوماتك ، يرجى زيارة موقع الويب الرسمي لـ F# للحصول على المزيد من النصائح حول تثبيت بيئة التطوير لـ F#: http://fsharp.org/.
أعضاء في مختبر Softsec. @ Kaist طور B2R2 بالتعاون مع مركز أبحاث الأمن السيبراني (CSRC) في Kaist. انظر المؤلفين للحصول على القائمة الكاملة.
إذا كنت تخطط لاستخدام 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
}فيما يلي أوراق تستخدم عملنا. يرجى إنشاء العلاقات العامة إذا كنت تريد إضافة لك.