devirt.re
Create account
Menu

Binary analysis research

Binary analysis is the examination of compiled software without its source code. Devirt's research on it focuses on protected executables: what packing, obfuscation and virtualization hide from static and dynamic analysis, which methods find the code that matters, and what an analysis can prove.

3 research tracks · Updated

Research policyDated · Setup named · Limits stated

Permission-cleared samples only. No customer binaries are published.

What is binary analysis?

Binary analysis, also called binary code analysis, is the examination of compiled software, such as executables, libraries and firmware, without access to its source code. An analyst or a tool reads the machine code that actually runs, either statically, without running the program, or dynamically, while it runs. Binary analysis serves two different jobs: finding the third-party components and known vulnerabilities inside software, and working out what a program's own code does.

The work starts from what the file itself records: its format, such as PE on Windows or ELF on Linux, the processor it targets, the libraries and functions it imports, its readable strings and identifiable machine code. A binary carries no comments, and a stripped binary has lost most of its function and variable names too, so the analyst rebuilds meaning from what the code does.

Is binary analysis the same as software composition analysis?

Software composition analysis is one job binary analysis can do, not another name for it. Software composition analysis (SCA) identifies the open-source and third-party components and dependencies in software, including compiled binaries, can list them in a software bill of materials (SBOM) and checks them for risks such as known vulnerabilities. Security vendors often use “binary analysis” to mean this kind of supply-chain scan.

Reverse engineering uses binary analysis for the other job: working out what the program's own code does. That can be how a file format or protocol is parsed, what a legacy component computes, or what a malware sample does once it runs, which is what Devirt's malware analysis service reports for protected and ordinary samples. No component database answers that question, because the logic belongs to that one program.

Devirt Research covers the reverse engineering side, and protected executables in particular.

How does binary analysis work?

Binary analysis usually moves from identifying the file's format, architecture and any protector, to reading the code statically, to running it under observation where that is safe, and then to recovering and checking the logic that matters. Static and dynamic analysis are complementary ways to analyze a program, and most real analyses combine them.

Binary analysis tools fall into three groups. Disassemblers and decompilers such as IDA Pro, Ghidra and Binary Ninja turn machine code into assembly and C-like pseudocode; the NSA released Ghidra as open source in 2019. Debuggers, emulators such as QEMU and instrumentation frameworks such as Intel Pin and DynamoRIO run a program under observation. Frameworks such as the angr platform script both kinds of analysis, including symbolic execution, which treats inputs as unknowns and explores which inputs can reach different paths.

Static vs dynamic binary analysis

Static binary analysis examines a program without running it; dynamic binary analysis observes the program while it runs. Static analysis can cover the whole file, including paths a test run never takes, but it has to infer values that only exist at run time. Dynamic analysis sees real values, such as memory contents and the targets of indirect jumps, but only on the paths a given run takes.

Diagram: one control-flow graph read statically, with the whole graph visible and values unknown, and dynamically, with one executed path and real values.
Static binary analysis can cover the whole file on disk, including paths a test run never takes, but has to infer values that exist only at run time. Dynamic binary analysis sees real values, but only on the paths a given run takes, so each approach sees what the other misses.
Static and dynamic binary analysis compared
ApproachWhat it seesWhat it misses
StaticThe file on disk: headers, imports, strings and identifiable machine code, including code a test run never reachesValues that exist only at run time, code that stays packed until it runs, and logic hidden inside a protector's virtual machine
DynamicThe running process: memory, registers, system calls and network traffic, with real values, including code the program decrypts or unpacks in memoryPaths the run never takes, and programs that detect debuggers or virtual machines and change their behavior

Running unknown code is a risk in itself, so analysts run untrusted files in a controlled, isolated environment, such as a virtual machine with no access to production systems.

What changes when a binary is protected?

A protected binary is a program that a software protector has packed, obfuscated or virtualized to resist analysis. Packing compresses or encrypts the code until the program starts, so static tools see packed data and the small stub that unpacks it. Obfuscation rewrites code into equivalent but harder sequences. Virtualization, used by protectors such as VMProtect and Themida, translates selected code into bytecode for a private virtual machine built into the file.

Virtualization goes further than packing: the bytecode never turns back into native code. A decompiler shows the virtual machine's interpreter instead of the function, and a memory dump taken after unpacking still holds bytecode. Recovering that logic is called devirtualization, and Devirt's VMProtect research shows what it involves for one protector. For files you are authorized to analyze, Devirt's protected binary analysis service recovers that logic and reports every function in scope in a coverage ledger.

MITRE ATT&CK lists software packing, including virtual machine software protection, as technique T1027.002: malware authors use the same protectors that developers use to guard license checks. A protected file is not malicious by default; the protection only shows that someone wanted its code to be hard to read.

Binary analysis research tracks

Each track lists the articles in preparation. Articles publish when the evidence exists, so the list is direction, not a schedule.

Methods

Methods for finding the code that matters inside a protected binary. The first article covers taint analysis, which marks data from an input, such as a file or a network message, and follows it through the program to the code it affects.

In preparation

  • Taint analysis for protected binary research

Use cases

Measured case studies from authorized interoperability and legacy recovery work, published only with the owner's permission and with identifying details removed.

In preparation

  • Interoperability case study: a protected component's file format or protocol
  • Legacy recovery case study: a protected binary with no surviving source

Guides on the blog

Practical guides go on the Devirt blog, separate from research.

PublishedProtected binary analysis: a practical workflow

In preparation

  • Why pseudocode recovery is not original source recovery
  • Legacy binary recovery: when the source is missing
  • A security and confidentiality checklist for protected binaries
  • Supply-chain binary scanning vs protected binary analysis

Guides, news and the product roadmap:Read the blog

How we publish binary analysis research.

Every binary analysis article is dated and names its sample, its tools and the analysis setup it used. Research samples are permission-cleared. Customer files are never published, and a case study appears only with its owner's permission, with identifying details removed. Every result separates what was proven from what stayed runtime-dependent, unresolved or bounded. Failures get published too.

The same rules apply across Devirt Research.