Software Analysis

A binary is not a black box.

It is a compact record of decisions and assumptions.

Software analysis is the work of turning that record back into something engineers can reason about.

What We Reconstruct

We recover the details that documentation, vendor information, and ordinary debugging do not provide:

  • Failure paths behind crashes and intermittent faults
  • Boundaries between native, managed, and virtualized components
  • Data structures, functions, and internal interfaces
  • File formats, protocols, and configuration parameters
  • Control flow, data flow, and runtime behavior

Where This Applies

The work is most useful around low-level or difficult-to-observe systems: Windows applications, services, internals, and drivers; Linux and Unix user-space components; embedded firmware, RTOS targets, bootloaders, hypervisors, and trusted execution environments.

Typical architectures include x86, x86-64, ARM, Thumb, and AArch64.

How The Work Proceeds

We start from the artefacts that still exist: the shipped binary and whatever supporting evidence is available.

From there, the work combines reverse engineering, debugging, tracing, instrumentation, and hypothesis testing. When standard tools are not enough, we build small purpose-built tooling around the problem.

The goal is not a pile of decompiler output. The goal is to establish what the software does, why it behaves that way, and what to do next.

Actionable Results

Depending on the problem, the result may be:

  • A concise technical report
  • A root-cause explanation
  • Reconstructed source code, data structures, and interfaces
  • A patch, reimplementation, or replacement

Get in Touch

If this sounds close to a problem you are facing, get in touch with whatever details are available.