B2R2는 순전히 F#에 작성된 유용한 알고리즘, 기능 및 이진 분석 도구 모음입니다 (.NET Lingo에서는 순전히 관리되는 코드). B2R2는 R2-D2의 이름을 따서 명명되었으며, 스타 워즈에 유명한 가상 로봇이 나타났습니다. 실제로 B2R2의 원래 이름은 B2-R2 이지만, .NET은 식별자 (또는 네임 스페이스)에서 Dash (-) 문자를 허용하지 않기 때문에 B2R2 라는 이름을 사용하기로 결정했습니다. 이름은 본질적으로 "바이너리"또는 "2"를 나타냅니다. "바이너리"자체는 어쨌든 "두"상태를 의미합니다. "B"및 "2"평균 "바이너리"및 "R"은 역전을 나타냅니다.
B2R2는 분석 친화적 입니다. F#로 작성되었으며, 이는 패턴 매칭, 대수 데이터 유형 등과 같은 프로그램 분석기를 작성하기위한 모든 구문을 제공합니다.
B2R2는 빠릅니다 . 이진 분석을위한 빠르고 효율적인 프론트 엔드 엔진이 있으며 기능적 최초의 방식으로 작성됩니다. 따라서, 이진 분해, 리프팅 및 IR 최적화에 대한 순수한 병렬 처리를 자연스럽게 지원합니다.
B2R2는 함께 플레이하기 쉽습니다 . B2R2에 대한 의존성 지옥은 전혀 없기 때문에 완전히 관리되는 라이브러리이기 때문입니다. .NET SDK를 설치하기 만하면됩니다. 기본 Intellisense 지원은 또 다른 장점입니다!
B2R2는 OS 독립적 입니다. .NET Core가 지원하는 한 Linux, Mac, Windows 등에서 작동합니다.
B2R2는 상호 운용성이 있습니다. 특정 언어로 바인딩되지 않습니다. 이론적으로 CLI 지원 언어와 함께 B2R2 API를 사용할 수 있습니다.
B2R2는 교육 구문 분석, 이진 분해, 어셈블리, 제어 흐름 복구 등을 지원합니다. B2R2는 또한 도구가 플랫폼 비석이지만 Readelf 및 ObjDump와 유사한 몇 가지 사용자 수준의 명령 줄 도구와 함께 제공됩니다. B2R2는 현재 ELF, PE, Mach-O 및 WebAssembly의 4 가지 바이너리 파일 형식을 지원합니다.
아래는 현재 지원하는 기능 목록입니다. 그들 중 일부는 진행중인 작업이지만, 우리는 귀하의 기여를 기대합니다! 기여 가이드 라인을 읽었는지 확인하면서 PR (Pull Request)을 작성하십시오.
| 특징 | x86 | x86-64 | ARMV7 | ARMV8 | MIPS32 | MIPS64 | EVM | TMS320C600 | AVR | PPC | SPARC | Sh4 | RISC-V |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 교육 구문 분석 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 분해 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 리프팅 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| CFG 복구 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 데이터 흐름 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 교육 에뮬레이션 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 집회 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 대답 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| ROP 컴파일 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
B2R2는 작은 외부 .NET 라이브러리 세트에 의존하며 설계 원칙은 최소 수의 라이브러리를 사용하는 것입니다. 아래는 우리가 활용하는 라이브러리 목록입니다.
우리는 현재 FSDOC를 사용하여 문서를 생성합니다 : https://b2r2.org/apidoc/.
B2R2 API를 사용해 보겠습니다.
먼저 빈 디렉토리 DIRNAME 만듭니다.
mkdir DIRNAME
cd DIRNAME
그런 다음 dotnet 명령 줄을 사용하여 빈 콘솔 프로젝트를 만듭니다.
$ dotnet new console -lang F#
프로젝트에 Nuget 패키지 B2R2를 추가하십시오.
$ 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 문을 볼 수 있습니다. 그게 다야! 당신은 단지 몇 줄의 F# 코드로 인텔 명령을 들었습니다!
B2R2를 만드는 것은 재미 있고 쉽습니다. .NET 8 SDK 이상을 설치하기 만하면됩니다. 그래, 그게 다야!
릴리스 모드에서 B2R2를 빌드하려면 소스 루트에서 make release 또는 dotnet build -c Release 입력하십시오.
디버그 모드에서 B2R2를 빌드하려면 소스 루트에 make 또는 dotnet build 입력하십시오.
정보는 F#의 공식 웹 사이트를 방문하여 F# : http://fsharp.org/의 개발 환경 설치에 대한 자세한 정보를 얻으십시오.
Softsec Lab의 회원. @ Kaist는 Kaist의 CSRC (Cyber Security Research Center)와 공동으로 B2R2를 개발했습니다. 전체 목록은 저자를 참조하십시오.
자신의 연구에서 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을 만드십시오.