Binary Ninja | |
Binary Ninja | |
Author: | Jordan Wiens, Rusty Wagner, Peter LaFosse |
Developer: | Vector 35 Inc |
Released: | [1] |
Latest Release Version: | 4.1.5747 |
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.[2] It can disassemble a binary and display the disassembly in linear or graph views. It performs automated in-depth analysis of the code, generating information that helps to analyze a binary. It lifts the instructions into intermediate languages, and eventually generates the decompiled code.
Binary Ninja supports various CPU architectures and binary executable formats. It runs on Windows, macOS, and Linux. It also has a free-to-use cloud and native version.[3]
Binary Ninja was originally an internal tool[4] for a CTF team. The developers later decided to form Vector 35 Inc and develop Binary Ninja into a commercial product. The development started in 2015 and the first public version was released in July 2016.
The commercial product does not share code with the internal tool. The latter one is now open-sourced under GPLv2.
Binary Ninja's UI is built using Qt. Its main UI comprises a symbol list, a cross-reference window, a linear/graph view of the disassembly, a mini-graph, as well as a feature map. It can also show a hex editor, strings listing, and a triage view.
Binary Ninja generates extensive annotations in the UI to assist binary analysis.
Binary Ninja also supports user-defined themes.
Binary Ninja offers an API that can be accessed via Python, C++, or Rust.[5] The API is open-sourced under MIT License. It can interact with most of the Binary Ninja's functionality, e.g., user interface, analysis, IL (see below), etc. It can be used to add support for new architecture or automate tasks.
Plugins[6] can be made via the API to enhance Binary Ninja. Vector35 maintains a collection of official plugins, while the community has created numerous community plugins.[7]
Some notable plugins are the debugger, the signature kit, etc.
Binary Ninja offers three intermediate languages (ILs).
Binary Ninja automatically performs various analyses on the binary. Some examples are:
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.
Binary Ninja supports the following CPU architectures officially:
The support for these architectures vary and details can be found in the official FAQ.[10]
Community-authored plugins add support for various other architectures.
Binary Ninja supports the following executable file formats officially: