Originally developed as an internal tool for a CTF team,3 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.4 The latter one is now open-sourced under the GPLv2 license.5
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.6
Binary Ninja offers an API that can be accessed via Python, C++, or Rust.7 The API is open-sourced under the MIT License.8 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,
Plugins9 can be developed using the API to enhance Binary Ninja. Vector35 maintains a collection of official plugins,10 while the community has created numerous additional plugins.11
Some notable plugins include the debugger,12 and the signature kit.13
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.16
Community-authored plugins add support for various other architectures.17
Binary Ninja supports the following executable file formats officially:
"Vector 35 > home". vector35.com. Retrieved 2020-07-26. https://vector35.com/ ↩
"Try Binary Ninja". binary.ninja. Retrieved 2024-03-02. https://binary.ninja/free/ ↩
"Binary Ninja > Frequently Asked Questions". faq.binary.ninja. Retrieved 2020-07-26. https://faq.binary.ninja/en/wasnt-this-an-open-source-project-at-first-6r43DzhbkvAzXSM6S ↩
Vector35/deprecated-binaryninja-python, VECTOR 35, 2020-07-12, retrieved 2020-07-26 https://github.com/Vector35/deprecated-binaryninja-python ↩
Vector35/community-themes, VECTOR 35, 2020-07-09, retrieved 2020-07-26 https://github.com/Vector35/community-themes ↩
"Using the Binary Ninja API - Binary Ninja User Documentation". docs.binary.ninja. Retrieved 2023-03-17. https://docs.binary.ninja/dev/index.html#language-specific-bindings ↩
Vector35/binaryninja-api, VECTOR 35, 2020-07-22, retrieved 2020-07-26 https://github.com/Vector35/binaryninja-api ↩
"Using and Writing Plugins - Binary Ninja User Documentation". docs.binary.ninja. Retrieved 2020-07-26. https://docs.binary.ninja/guide/plugins.html ↩
Vector35/official-plugins, VECTOR 35, 2020-07-16, retrieved 2020-07-26 https://github.com/Vector35/official-plugins ↩
Vector35/debugger, VECTOR 35, 2020-07-25, retrieved 2020-07-26 https://github.com/Vector35/debugger ↩
Vector35/sigkit, VECTOR 35, 2020-07-14, retrieved 2020-07-26 https://github.com/Vector35/sigkit ↩
"BNIL Guide: LLIL - Binary Ninja User Documentation". docs.binary.ninja. Retrieved 2020-07-26. https://docs.binary.ninja/dev/bnil-llil.html ↩
"BNIL Guide: MLIL - Binary Ninja User Documentation". docs.binary.ninja. Retrieved 2020-07-26. https://docs.binary.ninja/dev/bnil-mlil.html ↩
"Binary Ninja > Frequently Asked Questions". binary.ninja. Retrieved 2024-07-25. https://binary.ninja/faq/#supported-architectures ↩
Vector35/community-plugins, VECTOR 35, 2020-07-22, retrieved 2020-07-26 https://github.com/Vector35/community-plugins ↩