workflow module¶
|
|
The |
|
|
|
|
|
- class Activity(configuration: str = '', handle: LP_BNActivity | None = None, action: Callable[[Any], None] | None = None)[source]¶
Bases:
object
- Parameters:
- class AnalysisContext(handle: LP_BNAnalysisContext)[source]¶
Bases:
object
The
AnalysisContext
object is used to represent the current state of analysis for a given function. It allows direct modification of IL and other analysis information.- Parameters:
handle (LP_BNAnalysisContext) –
- property basic_blocks: BasicBlockList¶
function.BasicBlockList of BasicBlocks in the current function (writable)
- property hlil: HighLevelILFunction¶
HighLevelILFunction used to represent High Level IL (writable)
- property lifted_il: LowLevelILFunction¶
LowLevelILFunction used to represent lifted IL (writable)
- property llil: LowLevelILFunction¶
LowLevelILFunction used to represent Low Level IL (writable)
- property mlil: MediumLevelILFunction¶
MediumLevelILFunction used to represent Medium Level IL (writable)
- class Workflow(name: str = '', handle: LP_BNWorkflow | None = None, query_registry: bool = True, function_handle: LP_BNFunction | None = None)[source]¶
Bases:
object
Workflow
A Binary Ninja Workflow is an abstraction of a computational binary analysis pipeline and it provides the extensibility mechanism needed for tailored binary analysis and decompilation. More specifically, a Workflow is a repository of activities along with a unique strategy to execute them. Binary Ninja provides two Workflows namedcore.module.defaultAnalysis
andcore.function.defaultAnalysis
which expose the core analysis.A Workflow starts in the unregistered state from either creating a new empty Workflow, or cloning an existing Workflow. While unregistered it’s possible to add and remove activities, as well as change the execution strategy. In order to use the Workflow on a binary it must be registered. Once registered the Workflow is immutable and available for use.
Retrieve the default Workflow by creating a Workflow object:
>>> Workflow() <Workflow: core.module.defaultAnalysis>
Retrieve any registered Workflow by name:
>>> list(Workflow) [<Workflow: core.function.defaultAnalysis>, <Workflow: core.module.defaultAnalysis>] >>> Workflow('core.module.defaultAnalysis') <Workflow: core.module.defaultAnalysis> >>> Workflow('core.function.defaultAnalysis') <Workflow: core.function.defaultAnalysis>
Create a new Workflow, show it in the UI, modify and then register it. Try it via Open with Options and selecting the new Workflow:
>>> pwf = Workflow().clone("PythonLogWarnWorkflow") >>> pwf.show_topology() >>> pwf.register_activity(Activity("PythonLogWarn", action=lambda analysis_context: log_warn("PythonLogWarn Called!"))) >>> pwf.insert("core.function.basicBlockAnalysis", ["PythonLogWarn"]) >>> pwf.register()
Note
Binary Ninja Workflows is currently under development and available as an early feature preview. For additional documentation see Help / User Guide / Developer Guide / Workflows
- Parameters:
- activity_roots(activity: Activity | str = '') List[str] [source]¶
activity_roots
Retrieve the list of activity roots for the Workflow, or if specified just for the givenactivity
.
- assign_subactivities(activity: Activity, activities: List[str]) bool [source]¶
assign_subactivities
Assign the list ofactivities
as the new set of children for the specifiedactivity
.
- clear() bool [source]¶
clear
Remove all Activity nodes from this Workflow.- Returns:
True on success, False otherwise
- Return type:
- clone(name: str | None = None, activity: Activity | str = '') Workflow [source]¶
clone
Clone a new Workflow, copying all Activities and the execution strategy.
- configuration(activity: Activity | str = '') str [source]¶
configuration
Retrieve the configuration as an adjacency list in JSON for the Workflow, or if specified just for the givenactivity
.- Parameters:
activity (ActivityType) – if specified, return the configuration for the
activity
- Returns:
an adjacency list representation of the configuration in JSON
- Return type:
- contains(activity: Activity | str) bool [source]¶
contains
Determine if an Activity exists in this Workflow.- Parameters:
activity (ActivityType) – the Activity name
- Returns:
True if the Activity exists, False otherwise
- Return type:
- eligibility_settings() List[str] [source]¶
eligibility_settings
Retrieve the list of eligibility settings for the Workflow.
- get_activity(activity: Activity | str) Activity | None [source]¶
get_activity
Retrieve the Activity object for the specifiedactivity
.
- graph(activity: Activity | str = '', sequential: bool = False, show: bool = True) FlowGraph | None [source]¶
graph
Generate a FlowGraph object for the current Workflow and optionally show it in the UI.- Parameters:
- Returns:
FlowGraph object on success, None on failure
- Return type:
- insert(activity: Activity | str, activities: List[str]) bool [source]¶
insert
Insert the list ofactivities
before the specifiedactivity
and at the same level.
- register(configuration: str = '') bool [source]¶
register
Register this Workflow, making it immutable and available for use.
- register_activity(activity: Activity, subactivities: List[Activity | str] = []) Activity | None [source]¶
register_activity
Register an Activity with this Workflow.
- replace(activity: Activity | str, new_activity: List[str]) bool [source]¶
replace
Replace the specifiedactivity
.
- show_topology() None [source]¶
show_topology
Show the Workflow topology in the UI.- Return type:
None
- subactivities(activity: Activity | str = '', immediate: bool = True) List[str] [source]¶
subactivities
Retrieve the list of all activities, or optionally a filtered list.
- property machine¶
- class WorkflowMachine(handle: LP_BNFunction | None = None)[source]¶
Bases:
object
- Parameters:
handle (LP_BNFunction) –
- class WorkflowMachineCLI(machine: WorkflowMachine)[source]¶
Bases:
Cmd
- Parameters:
machine (WorkflowMachine) –
- do_run(line)[source]¶
Run the workflow machine and generate a default configuration if the workflow is not configured.
- precmd(line)[source]¶
Hook method executed just before the command line is interpreted, but after the input prompt is generated and issued.
- aliases = {'a': 'abort', 'b': 'breakpoint', 'c': 'resume', 'd': 'dump', 'h': 'halt', 'l': 'log', 'm': 'metrics', 'o': 'override', 'q': 'quit', 'r': 'run', 's': 'step'}¶
- intro = "Welcome to the Workflow Orchestrator. Type 'help' to list available commands."¶
- prompt = '(dechora) '¶