Binary Ninja

{{short description|Reverse-engineering platform developed by Vector 35 Inc}}

{{Infobox software

| title = Binary Ninja

| name = Binary Ninja

| screenshot =

| author = Jordan Wiens, Rusty Wagner, Peter LaFosse

| developer = Vector 35 Inc

| released = {{Start date and age|2016|7|31}}{{Cite web |author=((Vector 35 Inc))|title=Binary Ninja > Binary Ninja > changelog|url=https://binary.ninja/changelog/|access-date=2020-07-26|website=binary.ninja|language=en}}

| latest release version = 5.0.7290

| latest release date = {{Start date and age|2025|04|23}}

| programming language = C++, C, Python, Rust

| operating system = Microsoft Windows, Mac OS X, and Linux

| language = English

| genre = Reverse Engineering, Disassembler, Decompiler

| license = Proprietary

| website = https://binary.ninja

}}

Binary Ninja is a reverse-engineering platform developed by Vector 35 Inc.{{Cite web|title=Vector 35 > home|url=https://vector35.com/|access-date=2020-07-26|website=vector35.com}} It allows users to disassemble a binary file and visualize the disassembly in both linear and graph-based views. The software performs automated, in-depth code analysis, generating information that helps to analyze a binary. It lifts assembly instructions into intermediate languages, generating decompiled code.

Binary Ninja supports various CPU architectures and binary executable formats, and runs on Windows, macOS, and Linux. It also offers a free-to-use cloud version and a native commercial version.{{Cite web|title=Try Binary Ninja|url=https://binary.ninja/free/|access-date=2024-03-02|website=binary.ninja|language=en}}

History

Originally developed as an internal tool for a CTF team,{{Cite web|url=https://faq.binary.ninja/en/wasnt-this-an-open-source-project-at-first-6r43DzhbkvAzXSM6S|access-date=2020-07-26|website=faq.binary.ninja|title=Binary Ninja > Frequently Asked Questions}} the developers later formed Vector 35 Inc. to turn Binary Ninja into a commercial product. Development began in 2015, and the first public version was released in July 2016.

The commercial version was developed from scratch and does not share code with the original internal tool. The latter one is now open-sourced under the GPLv2 license.{{Citation|title=Vector35/deprecated-binaryninja-python|date=2020-07-12|url=https://github.com/Vector35/deprecated-binaryninja-python|publisher=VECTOR 35|access-date=2020-07-26}}

Features and usage

= User interface =

Binary Ninja's user interface is built using Qt and comprises several components such as a symbol list, a cross-reference window, and disassembly views (both linear and graph-based), a mini-graph, and a feature map. It also includes tools like a hex editor, strings listing, and a triage view.

Binary Ninja generates extensive annotations in the UI to assist binary analysis and also supports user-defined themes for customization.{{Citation|title=Vector35/community-themes|date=2020-07-09|url=https://github.com/Vector35/community-themes|publisher=VECTOR 35|access-date=2020-07-26}}

= API and plugins =

Binary Ninja offers an API that can be accessed via Python, C++, or Rust.{{Cite web |title=Using the Binary Ninja API - Binary Ninja User Documentation |url=https://docs.binary.ninja/dev/index.html#language-specific-bindings |access-date=2023-03-17 |website=docs.binary.ninja}} The API is open-sourced under the MIT License.{{Citation|title=Vector35/binaryninja-api|date=2020-07-22|url=https://github.com/Vector35/binaryninja-api|publisher=VECTOR 35|access-date=2020-07-26}} It can interact with most of Binary Ninja's functionality, including the user interface, analysis tools, and intermediate languages (see below). It can be used to add support for new architectures or to automate tasks,

Plugins{{Cite web|title=Using and Writing Plugins - Binary Ninja User Documentation|url=https://docs.binary.ninja/guide/plugins.html|access-date=2020-07-26|website=docs.binary.ninja}} can be developed using the API to enhance Binary Ninja. Vector35 maintains a collection of official plugins,{{Citation|title=Vector35/official-plugins|date=2020-07-16|url=https://github.com/Vector35/official-plugins|publisher=VECTOR 35|access-date=2020-07-26}} while the community has created numerous additional plugins.{{Cite web|title=Using and Writing Plugins - Binary Ninja User Documentation|url=https://docs.binary.ninja/guide/plugins.html|access-date=2020-07-26|website=docs.binary.ninja}}

Some notable plugins include the debugger,{{Citation|title=Vector35/debugger|date=2020-07-25|url=https://github.com/Vector35/debugger|publisher=VECTOR 35|access-date=2020-07-26}} and the signature kit.{{Citation|title=Vector35/sigkit|date=2020-07-14|url=https://github.com/Vector35/sigkit|publisher=VECTOR 35|access-date=2020-07-26}}

= Binary Ninja Intermediate Languages (BNIL) =

Binary Ninja offers three intermediate languages (ILs).

  • The low-level IL (LLIL){{Cite web|title=BNIL Guide: LLIL - Binary Ninja User Documentation|url=https://docs.binary.ninja/dev/bnil-llil.html|access-date=2020-07-26|website=docs.binary.ninja}} provides a detailed lifting of the underlying instructions from various architectures to a unified representation.
  • The medium-level IL (MLIL){{Cite web|title=BNIL Guide: MLIL - Binary Ninja User Documentation|url=https://docs.binary.ninja/dev/bnil-mlil.html|access-date=2020-07-26|website=docs.binary.ninja}} creates variables with types and abstracts away the notion of the stack.
  • The high-level IL (HLIL, also known as the decompiler), offers a representation of the code that is similar to C source code.

= Core analysis =

Binary Ninja automatically performs various analyses on the binary. Some examples are:

  • function detection
  • cross-references for code and data
  • type inference
  • constant propagation
  • value-set analysis
  • jump table resolution

= Binary editing and patching, shellcode compiler (SCC) =

Binary Ninja offers binary patching and editing features. It can assemble an instruction at the current line, flip a conditional jump, etc. Edits and updated analysis are immediately reflected in the UI.

Binary Ninja can be used as a general binary editor. It supports several commonly-used transformations and encryption algorithms.

The shellcode compiler allows the user to compile and insert code via C syntax.

Supported architectures and executable file formats

= Architectures =

Binary Ninja supports the following CPU architectures officially:

  • x86 32-bit
  • x86 64-bit
  • ARMv7
  • Thumb2
  • ARMv8
  • PowerPC
  • MIPS
  • RISC-V
  • 6502
  • nanoMIPS
  • TriCore

The support for these architectures vary and details can be found in the official FAQ.{{Cite web|url=https://binary.ninja/faq/#supported-architectures|access-date=2024-07-25|website=binary.ninja|title=Binary Ninja > Frequently Asked Questions}}

Community-authored plugins add support for various other architectures.{{Citation|title=Vector35/community-plugins|date=2020-07-22|url=https://github.com/Vector35/community-plugins|publisher=VECTOR 35|access-date=2020-07-26}}

= Executable file formats =

Binary Ninja supports the following executable file formats officially:

  • PE/COFF
  • ELF
  • Mach-O
  • .NES binary (via a plugin)
  • Raw binary
  • md1rom

See also

References