Overview

bnida consists of (2) IDA Pro scripts and (2) Binary Ninja (BN) plugins that use IDAPython and BN Python API’s to do “one-shot” transfers of analysis data across IDA and BN databases. These scripts/plugins include:

binja_export.py - Exports analysis data from a BN database to a bnida JSON file.

- Exports analysis data from a BN database to a bnida JSON file. binja_import.py - Imports analysis data from a bnida JSON file into a BN database.

- Imports analysis data from a bnida JSON file into a BN database. ida_export.py - Exports analysis data from an IDA database to a bnida JSON file.

- Exports analysis data from an IDA database to a bnida JSON file. ida_import.py - Imports analysis data from a bnida JSON file into a IDA database.

All four scripts are designed to support a single, common JSON file format. This not only allows for transfers between BN and IDA platorms, but also BN<->BN and IDA<->IDA too. This is especially useful if there is a desire to share analysis data with someone using an older version of IDA who can’t open your newer IDA database. The JSON file itself is also easy to digest with custom tooling, since almost every programming language contains a JSON library. Currently, bnida supports transferring the following analysis data:

Functions

Function comments

Address comments

Symbols

Structures (beta)

Section information is also exported to the JSON file and used for adjusting offsets during imports.

Installation

This section describes how to install bnida scripts on a Windows operating system. The process is similar on Linux.

Clone the repository to your BN plugins folder (or install using the plugin manager) Copy the IDA scripts to C:\Program Files\IDA {version}\plugins and configure a hotkey. (or keep them where they are if you prefer to run them as scripts with Alt+F7 ).

Transferring Analysis Data

bnida can be used to transfer analysis data from BN to BN, IDA to IDA, BN to IDA, or IDA to BN. The following sections describe how to use bnida plugins in IDA Pro and Binary Ninja.

IDA Pro

ida_export.py and ida_import.py are used to export/import analysis data into/from IDA databases. To export from an IDA database, press ALT+F7 and open ida_export.py . When prompted, enter the file path for the bnida JSON file to be generated and click “save”. The script should create the file and populate it with data from your IDA database. Similarly, to import data into an IDA database, run ida_import.py . When prompted, select the bnida JSON file and click “save”. Both IDA scripts print debug output to the output window.

Binary Ninja

binja_export.py and binja_import.py are used to export/import analysis data into/from Binary Ninja databases. To export from a BN database, click Tools->bnida: Export data . When prompted, enter the file path for the bnida JSON file that will be generated and click “OK”. The plugin should run in the background and create the bnida JSON file. Likewise, to import data click Tools->bnida: Import data . When prompted, open the bnida JSON file. The plugin should run in the background and apply the analysis data in the bnida JSON file to the open BN database.

Raw Binaries

During imports, bnida adjusts offsets based on the symbol’s/comment’s/function’s section base address. This is done to allow data imports to succeed even if the binary has been rebased. This design works excellent with PE and ELF binaries where section info is in headers and sections are applied by the loaders. In the case of raw binaries (i.e. flat firmware images), sections must be applied manually. It is important to ensure that sections have been applied at the same offsets across databases prior to attempting to transfer analysis data.