Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
gaasedelen committed Jul 19, 2017
2 parents c168514 + fce5a09 commit 0a8e1cc
Show file tree
Hide file tree
Showing 23 changed files with 1,296 additions and 606 deletions.
47 changes: 33 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@ Special thanks to [@0vercl0k](https://twitter.com/0vercl0k) for the inspiration.

## Releases

* v0.5 -- Search, IDA 7 support, many improvements, stability.
* v0.4 -- Most compute is now asynchronous, bugfixes.
* v0.3 -- Coverage composition, interactive composing shell.
* v0.2 -- Multifile support, perfomance improvements, bugfixes.
* v0.2 -- Multifile support, performance improvements, bugfixes.
* v0.1 -- Initial release

## Installation
Expand All @@ -27,7 +28,7 @@ Install Lighthouse into the IDA plugins folder.
- On MacOS, the folder is at `/Applications/IDA\ Pro\ 6.8/idaq.app/Contents/MacOS/plugins`
- On Linux, the folder may be at `/opt/IDA/plugins/`

The plugin has only been tested on IDA Pro 6.8, 6.95 for Windows.
The plugin is platform agnostic, but has only been tested on Windows for IDA 6.8 --> 7.0

## Usage

Expand Down Expand Up @@ -58,50 +59,68 @@ The Coverage Overview is a dockable widget that provides a function level view o

This table can be sorted by column, and entries can be double clicked to jump to their corresponding disassembly.

## Composing Shell
## Coverage Composition

Building relationships between multiple sets of coverage data often distills deeper meaning than their individual parts. The composing shell is an interactive means of constructing these relationships.
Building relationships between multiple sets of coverage data often distills deeper meaning than their individual parts. The shell at the bottom of the [Coverage Overview](#coverage-overview) provides an interactive means of constructing these relationships.

<p align="center">
<img alt="Lighthouse Coverage Composition" src="screenshots/shell.gif"/>
</p>

Pressing `enter` on the shell will evaluate and save a user constructed composition.

## Composition Syntax
### Composition Syntax

Coverage composition, or _Composing_ as demonstrated above is achieved through a simple expression grammar and 'shorthand' coverage symbols (A to Z) on the composing shell.

### Grammar Tokens
#### Grammar Tokens
* Logical Operators: `|, &, ^, -`
* Coverage Symbol: `A, B, C, ..., Z`
* Coverage Range: `A,C`, `Q,Z`, ...
* Parenthesis: `(...)`

### Example Compositions
#### Example Compositions
* `A & B`
* `(A & B) | C`
* `(C & (A - B)) | (F,H & Q)`

The evaluation of the composition may occur right to left, parenthesis are suggested for potentially ambiguous expressions.

## Coverage ComboBox
## Hot Shell

Loaded coverage data and user constructed compositions can be selected or deleted through the coverage combobox.
Additionally, there is a prototype 'Hot Shell' mode that asynchronously evaluates and caches user compositions in real-time.

<p align="center">
<img alt="Lighthouse Coverage ComboBox" src="screenshots/combobox.gif"/>
<img alt="Lighthouse Hot Shell" src="screenshots/hot_shell.gif"/>
</p>

## Hot Shell (experimental)
The hot shell serves as a natural gateway into the unguided exploration of composed relationships.

## Search

Additionally, there is a prototype 'Hot Shell' mode that asynchronously evaluates and caches user compositions in real-time.
Using the shell, one can search and filter the functions listed in the coverage table by prefixing their query with `/`.

<p align="center">
<img alt="Lighthouse Hot Shell" src="screenshots/hot_shell.gif"/>
<img alt="Lighthouse Search" src="screenshots/search.gif"/>
</p>

The hot shell serves as a natural gateway to the unguided exploration of composed relationships.
The head of the shell will show an updated coverage % computed only from the remaining functions. This is useful when analyzing coverage for specific function families.

## Jump

Entering an address or function name into the shell can be used to jump to corresponding function entries in the table.

<p align="center">
<img alt="Lighthouse Jump" src="screenshots/jump.gif"/>
</p>

## Coverage ComboBox

Loaded coverage data and user constructed compositions can be selected or deleted through the coverage combobox.

<p align="center">
<img alt="Lighthouse Coverage ComboBox" src="screenshots/combobox.gif"/>
</p>

## Collecting Coverage

Expand Down
2 changes: 2 additions & 0 deletions dev_scripts/close_IDA.bat
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
REM - Clean up an existing or past 'test session'
taskkill /F /IM "ida.exe"
taskkill /F /IM "ida64.exe"
taskkill /F /IM "idaq.exe"
taskkill /F /IM "idaq64.exe"
timeout 1
Expand Down
8 changes: 8 additions & 0 deletions dev_scripts/flip_python.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

if exist C:\Python27_32 (
MOVE C:\Python27 C:\Python27_64
MOVE C:\Python27_32 C:\Python27
) else (
MOVE C:\Python27 C:\Python27_32
MOVE C:\Python27_64 C:\Python27
)
17 changes: 17 additions & 0 deletions dev_scripts/reload_IDA_7.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
REM - Close any running instances of IDA
call close_IDA.bat

REM - Purge old lighthouse log files
del /F /Q "C:\Users\user\AppData\Roaming\Hex-Rays\IDA Pro\lighthouse_logs\*"

REM - Delete the old plugin bits
del /F /Q "C:\tools\disassemblers\IDA 7.0\plugins\*lighthouse_plugin.py"
rmdir "C:\tools\disassemblers\IDA 7.0\plugins\lighthouse" /s /q

REM - Copy over the new plugin bits
xcopy /s/y "..\plugin\*" "C:\tools\disassemblers\IDA 7.0\plugins\"
del /F /Q "C:\tools\disassemblers\IDA 7.0\plugins\.#lighthouse_plugin.py"

REM - Relaunch two IDA sessions
start "" "C:\tools\disassemblers\IDA 7.0\ida64.exe" "..\..\testcase\boombox7.i64"

17 changes: 17 additions & 0 deletions dev_scripts/reload_IDA_7_ida.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
REM - Close any running instances of IDA
call close_IDA.bat

REM - Purge old lighthouse log files
del /F /Q "C:\Users\user\AppData\Roaming\Hex-Rays\IDA Pro\lighthouse_logs\*"

REM - Delete the old plugin bits
del /F /Q "C:\tools\disassemblers\IDA 7.0\plugins\*lighthouse_plugin.py"
rmdir "C:\tools\disassemblers\IDA 7.0\plugins\lighthouse" /s /q

REM - Copy over the new plugin bits
xcopy /s/y "..\plugin\*" "C:\tools\disassemblers\IDA 7.0\plugins\"
del /F /Q "C:\tools\disassemblers\IDA 7.0\plugins\.#lighthouse_plugin.py"

REM - Relaunch two IDA sessions
start "" "C:\tools\disassemblers\IDA 7.0\ida.exe" "..\..\testcase\idaq7.idb"

17 changes: 17 additions & 0 deletions dev_scripts/reload_IDA_8_ida.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
REM - Close any running instances of IDA
call close_IDA.bat

REM - Purge old lighthouse log files
del /F /Q "C:\Users\user\AppData\Roaming\Hex-Rays\IDA Pro\lighthouse_logs\*"

REM - Delete the old plugin bits
del /F /Q "C:\tools\disassemblers\IDA 6.8\plugins\*lighthouse_plugin.py"
rmdir "C:\tools\disassemblers\IDA 6.8\plugins\lighthouse" /s /q

REM - Copy over the new plugin bits
xcopy /s/y "..\plugin\*" "C:\tools\disassemblers\IDA 6.8\plugins\"
del /F /Q "C:\tools\disassemblers\IDA 6.8\plugins\.#lighthouse_plugin.py"

REM - Relaunch two IDA sessions
start "" "C:\tools\disassemblers\IDA 6.8\idaq.exe" "..\..\testcase\idaq.idb"

Loading

0 comments on commit 0a8e1cc

Please sign in to comment.