Skip to main content

SnikrFlow logo

SnikrFlow

Native binary security triage and reachability platform.
Stop wondering where to start reversing a binary. Let SnikrFlow tell you.

PyPI License: MIT Python

Built by John Ebinyi Odey at Stodachon


The problem

You've got a large ELF binary or an Android .so library. Thousands of functions. No idea where the interesting stuff is. You could spend two hours blindly following callers, references, and branches in Ghidra... or you could ask:

"Before I spend two hours reversing this binary, tell me where I should spend those two hours."

That's what SnikrFlow answers.

SnikrFlow is not a replacement for Ghidra, IDA, Binary Ninja, or GDB. It's the step before those tools: automated triage, reachability analysis, and symbolic execution that narrows "here are thousands of functions" down to "here are the paths you should investigate first."

Large ELF / Android .so
        │
        ▼
    SnikrFlow
        │
        ├── ELF analysis          ├── Call graph analysis
        ├── Function discovery    ├── Reachability
        ├── JNI discovery         ├── Data-flow analysis
        ├── Security sink detect  └── Symbolic execution
        ├── CFG analysis
        │
        ▼
  Prioritized findings
        │
        ▼
      Ghidra
        │
        ▼
  Deep manual RE

Install

pip install snikrflow

(Or, for development: clone the repo and pip install -e .)

Requires Python 3.11+. Built on angr + Claripy for the underlying static/symbolic analysis engine.

Quick start

# The whole pipeline, orchestrated -- this is the one you actually want
snikrflow audit libfoo.so

# Or drill in stage by stage:
snikrflow info libfoo.so                 # ELF metadata
snikrflow functions libfoo.so            # discovered functions (angr CFGFast + symbols)
snikrflow jni libfoo.so                  # statically-exported JNI entry points
snikrflow sinks libfoo.so                # security-sensitive function calls
snikrflow cfg libfoo.so                  # control-flow graph summary
snikrflow callers libfoo.so 0x400d80     # who calls this address
snikrflow callees libfoo.so 0x400d80     # what this address calls
snikrflow reach libfoo.so --source 0x403a00 --sink 0x400d80     # static reachability
snikrflow solve libfoo.so --source 0x403a00 --target 0x400d80   # symbolic candidate input
snikrflow dataflow libfoo.so --source 0x403a00 --sink 0x400d80  # does tainted data reach the sink?

Every command supports --json for scripting/piping into other tools.

Demo

Here's SnikrFlow in action — from installation to native binary analysis.

Installation

SnikrFlow installation

Interactive terminal demo

Explore SnikrFlow's analysis workflow, including reachability, CFG analysis, callers, callees, and other security triage commands.

▶ Watch the full interactive Asciinema demo

What audit actually does

audit is the flagship command -- it runs the full pipeline automatically:

  1. Discovers all functions, JNI entry points, and security-sensitive sinks.
  2. Checks static (call-graph) reachability across every JNI-to-sink pair -- cheap, so it covers everything.
  3. Ranks the statically-reachable pairs by call-chain directness and picks the most promising few for deep analysis.
  4. Runs data-flow (symbolic) analysis on that shortlist -- expensive, so it's spent only where it matters.
  5. Scores risk transparently and prints ranked findings.
SnikrFlow Security Audit
═══════════════════════════
Binary
  Architecture: x86_64
  Type:         Shared Object
Functions
  294 discovered
  3 JNI candidates
Security-sensitive operations
  2 identified
Interesting paths
  1 statically reachable
  1 selected for data-flow analysis
Findings
  [MEDIUM] JNI -> memory
    Source: Java_..._MainActivity_init @ 0x403a00
    Sink:   strncpy @ 0x400d80  (memory)
    Status: statically_reachable

Risk levels are a prioritization aid, not a vulnerability verdict. Manual verification is still required -- SnikrFlow narrows the search space, it doesn't replace the researcher.

Architecture

SnikrFlow is built in layers, deliberately kept independent from its analysis backend:

CLI ──┐
      ├──> Core Engine ──> SnikrFlow Models ──> Analysis Interfaces ──> Backends
Future GUI ──┘                                                          (angr today;
                                                                     Unicorn/Pin/Dyninst
                                                                          possible later)
  • SnikrFlow owns the concepts (Function, SecuritySink, AnalysisPath, SymbolicResult, AnalysisFinding, ...). The CLI never touches angr objects directly.
  • analysis/interfaces/ define what SnikrFlow can do. analysis/backends/angr/ define how angr does it today. Adding a future backend means writing a new backend module, not rewriting the CLI.
  • The sink signature database (sinks/signatures.py) is a plain, editable Python dict -- add your own categories/functions freely.

Terminology (read this before trusting a finding)

SnikrFlow is deliberately precise about what different results mean -- these are never used interchangeably:

Term Meaning
statically_reachable A direct call-graph path exists. Doesn't see indirect calls (function pointers, vtables).
SAT (solve) A concrete candidate input exists that walks this exact path. Not a confirmed exploit.
POSSIBLE (dataflow) Symbolic input appears to reach the sink's argument. Heuristic, not sound taint analysis.
Risk level (audit) A prioritization signal. Never a confirmed vulnerability.

Responsible use

SnikrFlow is for authorized security research only -- use it against binaries you own or have explicit permission to analyze.

Credits

Built on angr and Claripy. CLI powered by Typer and Rich.

License

SnikrFlow is licensed under the GNU General Public License v3.0 — see LICENSE for the full text.

Metadata

Release files for snikrflow 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for snikrflow 0.1.3
File Size Uploaded Provenance Actions
snikrflow-0.1.3.tar.gz 51.7 kB Without provenance Details for snikrflow-0.1.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for snikrflow 0.1.3
File Interpreter ABI Platform Actions
snikrflow-0.1.3-py3-none-any.whl Python 3 none any Details for snikrflow-0.1.3-py3-none-any.whl

Total release size: 102.4 kB

Release files / snikrflow-0.1.3.tar.gz

Download URL snikrflow-0.1.3.tar.gz
Size 51.7 kB
Tags Source
SHA-256 checksum
How to use checksums
4db2e6d21f5c898b41b38755a145261f429b6ee02be20381a4a87709288ed993
BLAKE2b-256 checksum
How to use checksums
3b235f7dcdf40a4e1a5b9c61d1b9bcc5f23d52c49cd6be998e7c83258a32651d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / snikrflow-0.1.3-py3-none-any.whl

Download URL snikrflow-0.1.3-py3-none-any.whl
Size 50.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3a280d1b3ae6846b0be00f938e37b9565001786d689652ef1388fa823c2796d0
BLAKE2b-256 checksum
How to use checksums
9cbe0bea947ecfb19832ec32ed7a2cf33057d490aff81f51dff72a7788ee2e68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for snikrflow 0.1.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page