Home

Awesome

What is BinAbsInspector?

BinAbsInspector (Binary Abstract Inspector) is a static analyzer for automated reverse engineering and scanning vulnerabilities in binaries, which is a long-term research project incubated at Keenlab. It is based on abstract interpretation with the support from Ghidra. It works on Ghidra's Pcode instead of assembly. Currently it supports binaries on x86,x64, armv7 and aarch64.

Installation

Building

Build the extension by yourself, if you want to develop a new feature, please refer to development guide.

Usage

You can run BinAbsInspector in headless mode, GUI mode, or with docker.

$GHIDRA_INSTALL_DIR/support/analyzeHeadless <projectPath> <projectName> -import <file> -postScript BinAbsInspector "@@<scriptParams>"

<projectPath> -- Ghidra project path.
<projectName> -- Ghidra project name.
<scriptParams> -- The argument for our analyzer, provides following options:

ParameterDescription
[-K <kElement>]KSet size limit K
[-callStringK <callStringMaxLen>]Call string maximum length K
[-Z3Timeout <timeout>]Z3 timeout
[-timeout <timeout>]Analysis timeout
[-entry <address>]Entry address
[-externalMap <file>]External function model config
[-json]Output in json format
[-disableZ3]Disable Z3
[-all]Enable all checkers
[-debug]Enable debugging log output
[-check "<cweNo1>[;<cweNo2>...]"]Enable specific checkers
git clone git@github.com:KeenSecurityLab/BinAbsInspector.git
cd BinAbsInspector
docker build . -t bai
docker run -v $(pwd):/data/workspace bai "@@<script parameters>" -import <file>

Implemented Checkers

So far BinAbsInspector supports following checkers:

Project Structure

The structure of this project is as follows, please refer to technical details or the Chinese version article for more details.

├── main
│   ├── java
│   │   └── com
│   │       └── bai
│   │           ├── checkers                       checker implementatiom
│   │           ├── env
│   │           │   ├── funcs                      function modeling
│   │           │   │   ├── externalfuncs          external function modeling
│   │           │   │   └── stdfuncs               cpp std modeling
│   │           │   └── region                     memory modeling
│   │           ├── solver                         analyze core and grpah module
│   │           └── util                           utilities
│   └── resources
└── test

You can also build the javadoc with gradle javadoc, the API documentation will be generated in ./build/docs/javadoc.

Acknowledgement

We employ Ghidra as our foundation and frequently leverage JImmutable Collections for better performance.
Here we would like to thank them for their great help!