History
Binary Ninja was originally an internal tool 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 underFeatures and usage
User interface
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.API and plugins
Binary Ninja offers an API that can be accessed via Python or C. The API is open-sourced underBinary Ninja intermediate languages (BNIL)
Binary Ninja offers three intermediate languages (ILs). * The low-level IL (LLIL) is a verbose lifting of the underlying instructions from various architectures to a unified representation. * The medium-level IL (MLIL) creates variables with types and removes the notion of the stack. * The high-level IL (HLIL, also called 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 resolutionBinary editing and patching, shellcode compiler (SCC)
Binary Ninja offers a convenient way to edit and patch a binary. It can assemble an instruction at the current line, flip a conditional jump, etc. Edits and updated analysis are immediately reflected in the UI. Besides, 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 * 6502 The support for these architectures vary and details can be found in the official FAQ. Besides, the community also made several architecture plugins that support various other architectures.Executable file formats
Binary Ninja supports the following executable file formats officially: * PE/COFF * ELF * Mach-O * .NES binary (via a plugin) * Raw binarySee also
*References
{{Reflist Disassemblers