B2R2 v0.6 releases: useful algorithms, functions, and tools for binary analysis
B2R2
B2R2 is a collection of useful algorithms, functions, and tools for binary analysis, written purely in F# (in .NET lingo, it is purely managed code). B2R2 has been named after R2-D2, a famous fictional robot appeared in the Star Wars. In fact, B2R2’s original name was B2-R2, but we decided to use the name B2R2 instead because .NET does not allow dash (-) characters in identifiers (or namespaces). The name essentially represents “binary” or “two”: “binary” itself means “two” states anyway. “B” and “2” mean “binary”, and “R” indicates reversing.
B2R2?
- B2R2 is analysis-friendly: it is written in F#, which provides all the syntactic goodies for writing program analyzers, such as pattern matching, algebraic data types, and etc.
- B2R2 is fast: it has a fast and efficient front-end engine for binary analysis, which is written purely in a functional way. Therefore, it naturally supports pure parallelism for binary disassembling, lifting and IR optimization.
- B2R2 is easy to play with: there is absolutely no dependency hell for B2R2 because it is a fully-managed library. All you need to do is to install .NET Core SDK, and you are ready to go! Native IntelliSense support is another plus!
- B2R2 is OS-Independent: it works on Linux, Mac, Windows, and etc. as long as .NET core supports it.
- B2R2 is interoperable: it is not bound to a specific language. Theoretically, you can use B2R2 APIs with any CLI supported languages.
Feature
- Functional First
Written purely in F#, providing all the syntactic goodies for writing program analyzers, such as pattern matching, algebraic data types, and etc. - Fast Frontend
B2R2 naturally supports pure parallelism, thanks to F#, and highly optimized for parsing and lifting optimized IR statements. - No Dependency
There is absolutely no dependency hell for B2R2. So it is easy to play with. All you need to do is to install .NET Core SDK, and you are ready to go! - OS Independent
B2R2 runs on any OS, such as Linux, macOS, and Windows, as long as .NET Core supports it. - Language Agnostic
Although B2R2 is written in F#, it can interoperate well with other languages, such as Python and C#. - Open Source
Since B2R2 is MIT licensed, you can even use it commercially!
Changelog v0.6
Added
- More instruction supports for MIPS
- More instruction supports for Intel
- Added support for WASM (thanks to @kimdora)
- Added several more classes in the Core module
Changed
- Now we use .NET 6 (and F# 6). Our framework is not compatible with .NET 5.
- Fixed MIPS exception frame parser
- Optimized ELF parser for loading callsite tables
- Fixed several bugs in Intel assembler
- Changed ConcEval’s interface
- We now avoid using non-standard register sizes, such as
2<rt>
and3<rt>
; we only use sizes multiple of 8 (e.g., 8, 16, 32, 64) or size 1. For those register variables whose size is non-standard, e.g.,FTOP
in Intel, we assign larger size for the variable. - Fixed several bugs in Intel and MIPS lifters
- Fixed several bugs in BinFile module (ELF and PE)
- Fixed several bugs in the middle-end (such as tail-call detection logic, etc.)
Download && Use
Copyright (c) SoftSec Lab. @ KAIST, since 2016