
A PyQt5 frontend to the binjatron plugin for Binary Ninja that includes highlighting features aimed at making it easier for beginners to learn about reverse engineering
The ability to reverse engineer x86 binaries is an important skill even outside of the information security industry. However, even with the abundance of available training materials, it remains a difficult skill to learn. Many students have expressed frustration with the amount of background knowledge required to make even modest progress on simple binaries.
Binary Ninja is often marketed to students due to its relatively low cost, clean interface, and ease of use. The low-level and medium-level intermediate languages also provide an easy way to understand what instructions do. This project aims to make Binary Ninja an even better tool for beginners by making it easier to visualize the execution of a binary.
This project is a product of NCC Group's 2017 summer internship program. The visual debugging components can be thought of as a spiritual successor to Microcorruption, an embedded security CTF produced by Matasano Security. Further updates will be tracked at https://github.com/ehennenfent/binja_dynamics. NCC Group is not responsible for any further changes made to the repository after August 18th, 2017.
Inside your Binary Ninja plugins folder, run:
git clone https://github.com/ehennenfent/binja_dynamics.git
cd binja_dynamics
./install.sh
After loading a binary, click the Enable Dynamic Analysis Tools item in the tools menu. A debugger window will spawn, which you can control via the buttons on the toolbar. As you steps through execution, the UI will update in real time to reflect the program state. Thanks to Binjatron, the current instruction and any breakpoints are highlighted in the binary view. For each memory address and for the registers, the value is highlighted in orange whenever it has changed as a result of the previous instruction. In a similar vein, the top and bottom of the current stack frame (as well as the predicted location of the return address) are highlighted in order to make it easier for beginners to identify what portions of the memory are important for them to look at. The traceback viewer displays a backtrace of the current stack frames, and provides a button that will automatically jump the binary view to the location given by the memory address where the plugin expects to find the return address. In some functions, the stack frame is not torn down in the way the plugin expects, so this predicted return address may not always be correct.

(In the above screenshot, the base pointer is shown in olive green)
On occasion, it may be necessary to consult the source code to understand the exact behavior of the interfaces. In anticipation of this, many of the design decisions and implementation details are explained in inline comments.
The wiki is still relatively sparse, but content such as the list of stumbling blocks and the development log may be of use in troubleshooting.
Consider consulting the binja_sensei repo for examples that may aid you in getting started.
Excluding Binary Ninja, install.sh will handle these dependencies for you.