State of the Ninja: Episode 14

The last time we did a State of the Ninja post was slightly over 2 years ago. Coronavirus was hitting record highs, the world was in lockdown, the episode number was 13… They were trying times to be sure. It was also right before our 2.0 release that included HLIL. Pretty crazy how far we’ve come in such a short span of time, right?

Today, we’re about 3 months past our release of Binary Ninja 3.0. That version came with a huge amount of new features for everyone to play with like:

…and a whole bunch of other cool stuff like various API improvements, native builds for the M1 chip, and offline updates for our Enterprise customers.

But, that was 3 months ago. Today, I want to talk about what we’ve been working on since. We’re releasing 3.1 in the next month or so, but some of these features are already done and shipped in our development builds for you to try today.

If you’d like to preview the features (and maybe help us squash any bugs we’ve missed in the process), making the switch is easy: Just change your update channel in Preferences -> Update Channel… within Binary Ninja. Set it to the “Binary Ninja development build” channel, select a version greater than or equal to 3.0.3306-dev, and click “Done”. Once Binary Ninja has downloaded the new version, click the green arrow in the bottom-left corner and Binary Ninja will restart and apply the new update.

Releases

First, a quick note about the release schedule. If you’ve been watching our milestone plans you know that we planned the releases following 3.0 to be “Windows”, “Embedded”, and “Mobile”. We’ve made some slight changes to that, with those original plans bumping to 3.2-3.4, and the new “Performance” release scheduled for 3.1. That said, don’t worry if you’re primarily interested in Windows binaries – there’s plenty of improvements landing on 3.1 you’ll get excited about as you’ll see below.

Performance

Our major focus for the upcoming 3.1 release is on general performance improvements. Over the years, Binary Ninja has added tons of extra analysis. First there was LLIL, then MLIL, then HLIL…and that doesn’t even cover all the extra work we’ve put into features like function detection. But, we’ve never gone back to specifically address the overall performance impact of our massive growth in features - until now.

We’ve already covered most of our performance increases in a separate blog post from Rusty about a month ago. That post covers the massive improvements we’ve had with respect to analysis time and memory usage during analysis.

Analysis Time for Linux Chrome with Full Symbols

What he’s been working on since has been database performance. Right now, on our development builds, should be a roughly 1.5x speed-up in average database load time. We’re expecting an equivalent performance increase for database save time shortly as well. These times will hopefully get even faster before release for multi-threaded clients, too.

Finally, we’ve also significantly improved update performance. This isn’t possible to see if you’re updating from stable to a development build (since stable still uses the old update code), but will be very apparent if you’re switching between recent dev builds and is a massive decrease in update time.

Keep an eye out for the official 3.1 release blog here as we’ll be detailing even more performance increases coming soon.

Types

One of the major focuses for 3.2 is improved support for Windows binaries. We’ve already started that work on the upcoming 3.1 release, however, specifically by focusing on types. There are some more general improvements for our type system still in the works, but vastly improved type libraries for Windows are here today in our development builds!

Better Windows Types

Native Debugger Beta

We’ve also been hard at work trying to replace our earlier debugger plugin, written in Python, with a better native solution. It’s been a long road, but we’re finally close to having something we think we can release.

This just hit recent development builds last Friday and is functional, but has a few bugs and the UI still needs a lot of work. For now, we’ve hidden it behind a setting (corePlugins.debugger). So, you’ll need to go enable that in Preferences -> Settings in order to access the preview.

Native Debugger Beta

This new debugger is also open source! So, please head on over to its repository if you’d like to contribute (or if you have any issues to report).

Other Features

In addition to the features above, we’ve also landed significant improvements in logging infrastructure, a whole ton of UI bug fixes, and Python 3.10 support in our development builds so far. There’s also some new features like Single Sign-On through LDAP that are available to our Enterprise customers. If you’re on an older system, though, be aware that we’ve now dropped support for some older platforms like Ubuntu 18.04 and Windows 8 in order to make some of these changes possible.

New and Improved Logging

We won’t have a full, exhaustive list of all the new features until the 3.1 release, but you can always check out our closed issues for more details. And, as always, if you have any questions, come visit us in our community Slack.

Happy reversing!

Article Link: Binary Ninja - State of the Ninja: Episode 14