Sark provides some basic utilities and wrappers for IDA’s UI.


A natural extension to creating and analyzing graphs, is plotting them. IDA provides a generic API via the idaapi.GraphViewer interface. As Sark mainly uses NetworkX digraphs, the sark.ui.NXGraph class has been created to provide an easy plotting solution.

>>> viewer = sark.ui.NXGraph(graph, title="My Graph", handler=sark.ui.AddressNodeHandler())
>>> viewer.Show()

The NXGraph constructor takes several arguments:

Argument Desctription
graph the graph to plot
title (opt.) title for the graph
handler (opt.) a default handler for nodes
padding (opt.) visual padding of nodes

After an NXGraph is created, use .Show() to display it.

Node Handlers

To allow different types of node data, NXGraph uses node handlers. Node handlers inherit from sark.ui.BasicNodeHandler and implement the callbacks required for them (all are optional).

Callback Usage
on_get_text returns the text to display for the node
on_click handles a click on the node. Return True to set the cursor on it.
on_double_click same as on_click
on_hint the hint to show
on_bg_color returns the background color for the node
on_frame_color returns the frame (border) color for the node

There are 2 existing handlers you can use.

Handler Info
BasicNodeHandler The most basic handler. Calls str to get node text, and nothing else. This is the default handler for NXGraph.
AddressNodeHandler Assumes all nodes are IDB addresses. For node text, it shows the address’ name if it exists, or a hex address otherwise. On double click, it jumps to the clicked address.