B2R2 เป็นชุดของอัลกอริทึมที่มีประโยชน์ฟังก์ชั่นและเครื่องมือสำหรับ การวิเคราะห์ไบนารี เขียนอย่างหมดจดใน F# (ใน. NET LINGO มันเป็นรหัสที่มีการจัดการอย่างหมดจด) B2R2 ได้รับการตั้งชื่อตาม R2-D2 หุ่นยนต์ที่มีชื่อเสียงปรากฏตัวใน Star Wars ในความเป็นจริงชื่อดั้งเดิมของ B2R2 คือ B2-R2 แต่เราตัดสินใจใช้ชื่อ B2R2 แทนเพราะ. NET ไม่อนุญาตให้มีอักขระ Dash (-) ในตัวระบุ (หรือ Namespaces) ชื่อเป็นหลักแสดงถึง "ไบนารี" หรือ "สอง": "ไบนารี" นั้นหมายถึง "สอง" กล่าว "B" และ "2" หมายถึง "ไบนารี" และ "R" หมายถึง การย้อนกลับ
B2R2 เป็น มิตรกับการวิเคราะห์ : เขียนไว้ใน F#ซึ่งให้สารพัดไวยากรณ์ทั้งหมดสำหรับการวิเคราะห์โปรแกรมเช่นการจับคู่รูปแบบชนิดข้อมูลพีชคณิตและอื่น ๆ
B2R2 นั้น รวดเร็ว : มีเครื่องยนต์ส่วนหน้าอย่างรวดเร็วและมีประสิทธิภาพสำหรับการวิเคราะห์แบบไบนารีซึ่งเขียนด้วยวิธีการทำงานครั้งแรก ดังนั้นจึงสนับสนุน การขนานที่บริสุทธิ์ สำหรับการถอดชิ้นส่วนไบนารีการยกและการเพิ่มประสิทธิภาพ IR
B2R2 นั้น ง่ายต่อ การเล่น: ไม่มีนรกพึ่งพา B2R2 อย่างแน่นอนเพราะเป็นห้องสมุดที่มีการจัดการอย่างเต็มที่ สิ่งที่คุณต้องทำคือติดตั้ง. NET SDK และคุณพร้อมที่จะไป! การสนับสนุน Intellisense พื้นเมืองเป็นอีกข้อดี!
B2R2 นั้น ไม่ขึ้นกับระบบปฏิบัติการ : ใช้งานได้กับ Linux, Mac, Windows และ ฯลฯ ตราบใดที่. NET Core รองรับ
B2R2 สามารถ ทำงานร่วมกันได้ : มันไม่ผูกพันกับภาษาที่เฉพาะเจาะจง ในทางทฤษฎีคุณสามารถใช้ B2R2 APIs กับภาษาที่รองรับ CLI ใด ๆ
B2R2 รองรับการแยกวิเคราะห์คำสั่งการถอดชิ้นส่วนไบนารีการประกอบการกู้คืนการควบคุมการไหลและอื่น ๆ อีกมากมาย B2R2 ยังมาพร้อมกับเครื่องมือบรรทัดคำสั่งระดับผู้ใช้หลายอย่างที่คล้ายกับ Readelf และ Objdump แม้ว่าเครื่องมือของเราจะเป็นแพลตฟอร์ม ปัจจุบัน B2R2 รองรับรูปแบบไฟล์ไบนารีสี่รูปแบบ: ELF, PE, Mach-O และ WebAssembly
ด้านล่างเป็นรายการคุณสมบัติที่เราสนับสนุนในปัจจุบัน บางคนกำลังดำเนินการอยู่ แต่เราหวังว่าจะมีส่วนร่วมของคุณ! อย่าลังเลที่จะเขียน PR (คำขอดึง) ในขณะที่ตรวจสอบให้แน่ใจว่าคุณได้อ่านแนวทางการบริจาคของเราแล้ว
| คุณสมบัติ | x86 | x86-64 | armv7 | armv8 | MIPS32 | MIPS64 | EVM | TMS320C600 | AVR | PPC | สปอร์ | SH4 | RISC-V |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| คำแนะนำการแยกวิเคราะห์ | - | - | - | - | - | - | - | - | - | - | - | - | - |
| ถอดชิ้นส่วน | - | - | - | - | - | - | - | - | - | - | - | - | - |
| การยก | - | - | - | - | - | - | - | - | - | - | - | - | - |
| การกู้คืน CFG | - | - | - | - | - | - | - | - | - | - | - | - | - |
| การไหลของข้อมูล | - | - | - | - | - | - | - | - | - | - | - | - | - |
| คำสั่งการเลียนแบบ | - | - | - | - | - | - | - | - | - | - | - | - | - |
| การประกอบ | - | - | - | - | - | - | - | - | - | - | - | - | - |
| เติม | - | - | - | - | - | - | - | - | - | - | - | - | - |
| การรวบรวม ROP | - | - | - | - | - | - | - | - | - | - | - | - | - |
B2R2 ขึ้นอยู่กับชุดเล็ก ๆ ของไลบรารี. NET ภายนอกและหลักการออกแบบของเราคือการใช้จำนวนห้องสมุดขั้นต่ำ ด้านล่างเป็นรายการของไลบรารีที่เราใช้ประโยชน์
ขณะนี้เราใช้ FSDOCs เพื่อสร้างเอกสารของเรา: https://b2r2.org/apidoc/
ลองใช้ B2R2 APIs
ก่อนอื่นเราสร้างไดเรกทอรีที่ว่างเปล่า 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 Lab @ Kaist พัฒนา B2R2 โดยร่วมมือกับ Cyber Security Research Center (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
}นี่คือเอกสารที่ใช้งานของเรา โปรดสร้าง PR หากคุณต้องการเพิ่มของคุณ