
B2R2 एक पूरी तरह से प्रबंधित बाइनरी विश्लेषण ढांचा है जो F# में लिखा गया है। यह रिवर्स इंजीनियरिंग, प्रोग्राम विश्लेषण और बाइनरी-स्तरीय निरीक्षण के लिए एल्गोरिदम, फ़ंक्शन और उपकरणों का एक समृद्ध सेट प्रदान करता है।

B2R2 एक पूरी तरह से प्रबंधित बाइनरी विश्लेषण ढांचा है जो F# में लिखा गया है। यह रिवर्स इंजीनियरिंग, प्रोग्राम विश्लेषण और बाइनरी-स्तरीय निरीक्षण के लिए एल्गोरिदम, फ़ंक्शन और टूल का एक समृद्ध सेट प्रदान करता है।
B2R2 नाम R2-D2 से प्रेरित है, जो स्टार वार्स का प्रतिष्ठित रोबोट है। मूल रूप से B2-R2 नामित, इस परियोजना ने बाद में डैश-मुक्त रूप B2R2 को अपनाया क्योंकि .NET पहचानकर्ता और नामस्थान हाइफ़न की अनुमति नहीं देते हैं। यह नाम परियोजना के उद्देश्य को दर्शाता है: "B" और "2" बाइनरी और दो-अवस्था गणना का सुझाव देते हैं, जबकि "R" रिवर्सिंग के लिए खड़ा है। संक्षेप में, B2R2 बाइनरी रिवर्सिंग के लिए बनाया गया है।
B2R2 विश्लेषण-अनुकूल है: यह F# में लिखा गया है, एक ऐसी भाषा जो पैटर्न मैचिंग, बीजगणितीय डेटा प्रकार और अभिव्यंजक कार्यात्मक अमूर्तता जैसी सुविधाओं के कारण प्रोग्राम विश्लेषक बनाने के लिए उपयुक्त है।
B2R2 तेज़ है: इसका मुख्य बाइनरी विश्लेषण इंजन दक्षता के लिए डिज़ाइन किया गया है और कार्यात्मक-प्रथम शैली में लिखा गया है। यह इसे सामान्य विश्लेषण कार्यों जैसे निर्देश लिफ्टिंग और CFG पुनर्प्राप्ति में शुद्ध समानता के लिए एक स्वाभाविक विकल्प बनाता है।
B2R2 उपयोग करने में आसान है: पूरी तरह से प्रबंधित लाइब्रेरी के रूप में, यह जटिल मूल निर्भरता सेटअप से बचाता है। .NET SDK स्थापित करें, और आप जाने के लिए तैयार हैं। मूल IntelliSense समर्थन भी API को एक्सप्लोर करना आसान बनाता है।
B2R2 OS-स्वतंत्र है: यह Linux, macOS और Windows के साथ-साथ .NET द्वारा समर्थित किसी भी अन्य प्लेटफ़ॉर्म पर काम करता है।
B2R2 अंतर्संचालनीय है: यह एक ही प्रोग्रामिंग भाषा से बंधा नहीं है। सिद्धांत रूप में, B2R2 API का उपयोग किसी भी CLI-समर्थित भाषा से किया जा सकता है।
B2R2 निर्देश पार्सिंग, बाइनरी डिसअसेंबली, असेंबली, नियंत्रण-प्रवाह पुनर्प्राप्ति और बाइनरी विश्लेषण के लिए अन्य मुख्य निर्माण खंडों का समर्थन करता है। इसमें readelf और objdump के समान कई उपयोगकर्ता-मुख्य कमांड-लाइन टूल भी शामिल हैं, जबकि यह प्लेटफ़ॉर्म-अज्ञेय बना हुआ है। B2R2 वर्तमान में चार बाइनरी फ़ाइल स्वरूपों का समर्थन करता है: ELF, PE, Mach-O और WebAssembly।
नीचे दी गई तालिका B2R2 द्वारा वर्तमान में समर्थित सुविधाओं का सारांश प्रस्तुत करती है। कुछ क्षेत्र अभी भी प्रगति पर हैं, और योगदान का स्वागत है। पुल अनुरोध खोलने से पहले, कृपया हमारी योगदान दिशानिर्देश पढ़ना सुनिश्चित करें।
B2R2 जानबूझकर अपने निर्भरता पदचिह्न को छोटा रखता है ताकि बिल्ड सरल रहे और कोर बाइनरी विश्लेषण के लिए कुशल एल्गोरिदम और डेटा संरचनाओं पर केंद्रित रहे। कोर लाइब्रेरी की कोई बाहरी निर्भरता नहीं है, और अधिकांश बाहरी लाइब्रेरी वैकल्पिक हैं और केवल विशिष्ट घटकों या टूल द्वारा उपयोग की जाती हैं। नीचे परियोजना द्वारा उपयोग की जाने वाली बाहरी लाइब्रेरी की सूची दी गई है।
हमारा दस्तावेज़ीकरण fsdocs के साथ उत्पन्न होता है और https://b2r2.org/B2R2/ पर उपलब्ध है।
आइए B2R2 API का उपयोग करने का प्रयास करें।
पहले, 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 स्टेटमेंट दिखाई देने चाहिए। बस इतना ही! आपने F# कोड की कुछ पंक्तियों के साथ एक Intel निर्देश को लिफ्ट कर लिया है।
B2R2 बनाना सीधा है। .NET 10 SDK या उसके बाद के संस्करण को स्थापित करें, और आप स्रोत रूट से बिल्ड करने के लिए तैयार हैं।
रिलीज़ मोड में B2R2 बनाने के लिए, dotnet build -c Release चलाएं।
डीबग मोड में B2R2 बनाने के लिए, dotnet build चलाएं।
F# विकास वातावरण स्थापित करने के बारे में अधिक जानकारी के लिए, आधिकारिक F# वेबसाइट पर जाएं: http://fsharp.org/।
B2R2 को KAIST में SoftSec Lab के सदस्यों द्वारा KAIST में साइबर सुरक्षा अनुसंधान केंद्र (CSRC) के सहयोग से विकसित किया गया था। योगदानकर्ताओं की पूरी सूची के लिए 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 | दस्तावेज़ | निर्देश पार्सिंग | डिसअसेंबली | लिफ्टिंग | CFG रिकवरी | असेंबली |
|---|---|---|---|---|---|---|
| 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: |