devirt.re
Create account
Menu

Loki VM devirtualization.

Loki-based protections are difficult to analyze. Every binary, including Obfuscator X and Griffin builds, starts with a free assessment and a written offer before paid work.

Loki · context changes meaningOne handler. Different visits.H(context, x, y)Visit A · state AVisit B · state Bx + yx ^ yEach operation keeps its own context.A handler address is not a semantic identity.Loki · context changes meaningOne handler. Different visits.H(context, x, y)Visit A · state AVisit B · state Bx + yx ^ yEach operation keeps its own context.A handler address is not a semantic identity.
Protection changes the representation. The question is still what the program does.

What is Loki VM devirtualization?

Loki VM devirtualization is the recovery of readable program logic from code protected by Loki-based virtual machine obfuscation. Loki is an academic obfuscator presented at USENIX Security 2022 and designed to resist automated deobfuscation such as symbolic execution, taint analysis and program synthesis. Loki-derived binaries, including Obfuscator X and Griffin, are difficult cases and are not automated services at Devirt. Every binary requires its own free assessment before a scope, price and delivery window can be offered. Any accepted analysis reports its protected functions as proven, runtime-dependent, unresolved or permanently bounded.

The protection is the obstacle.
Understanding is the outcome.

What we support

  • Obfuscator X and Griffin
  • Known Loki derivatives
  • Free assessment for every binary, including known variants

Family recognition is an intake decision, not a guarantee for every build. Custom behavior and multiple protection layers can require a separate assessment.

What changes in your workflow

Virtualization replaces ordinary instructions with a custom interpreter. Devirt recovers meaningful operations and program structure so you can investigate behavior in your own tools.

The delivery pairs readable output with a full ledger for the agreed scope. Proven, runtime-dependent, unresolved, and permanently bounded units remain distinguishable, including units that were never virtualized.

See how the checks work

What the Loki obfuscator is

Loki is a code obfuscator from academic research: "Loki: Hardening Code Obfuscation Against Automated Attacks" by Schloegel, Blazytko, Contag, Aschermann, Basler, Holz and Abbasi, presented at USENIX Security 2022. Its public repository describes it as an academic prototype built to show new techniques for hardening virtual machine handlers.

Loki protects code the way other virtualizing protectors do, by translating it into instructions for its own virtual machine, and then hardens its handlers with formally verified expressions of arbitrary complexity. The authors report that recent research on simplifying mixed boolean-arithmetic expressions fails to simplify them, and that Loki cuts the success rate of program synthesis attacks to 19 percent in their evaluation.

A Loki-protected function runs on a virtual machine whose handlers hide simple operations inside formally verified expressions, hardened against symbolic execution, taint analysis and program synthesis.
Illustration after Schloegel et al., USENIX Security 2022. Loki hardens its handlers against automated attacks.

Who uses Loki VM devirtualization

Loki VM devirtualization is for teams that need to read Loki-protected code they are allowed to analyze: malware analysts and incident responders, security researchers working within an authorized scope, software owners checking the logic of their own protected builds, and interoperability engineers verifying compatibility.

Supported Loki-based families

Loki, Obfuscator X and Griffin are assessed individually. Every Loki-derived binary requires a separate feasibility review, including known variants and new builds of a previously assessed program. Family recognition or a previous successful engagement does not make another binary eligible for automated processing.

How Devirt handles a Loki-protected file

Create an account, upload the authorized binary for a free assessment and describe the question you need answered. We review that exact file and email a feasibility report, estimated coverage, proposed deliverables, price and timeline. You accept the written offer before any paid analysis begins. If recovery is feasible, the agreed work reconstructs the virtual machine and handler semantics and checks eligible operations before anything is called proven.

Loki was designed to resist the known automated deobfuscation attacks, so a Loki result states plainly which functions were proven and which were not, rather than presenting readable output as recovered logic.

A Loki-derived binary requires its own assessment: upload the authorized file, review feasibility and the written offer, accept the scope, then receive the agreed analysis with its coverage ledger.
Every Loki-derived binary, including Obfuscator X and Griffin, requires a separate assessment and an accepted offer before paid work.

What you receive

The free assessment returns a feasibility report and a written offer. Any paid deliverables depend on what that binary supports and what you agree in the offer. Available formats can include the following, each with the coverage ledger and a proof summary; IDA output is checked after it is saved and reopened.

  • IDA database (.i64): proven functions, named imports, typed API calls and the coverage ledger
  • Annotated pseudocode (.c): readable C with semantic naming and function-level commentary
  • LLVM IR (.ll): the lifted intermediate representation for your own toolchain
  • API JSON: structured findings and coverage for automated workflows
  • Full RE report (.pdf): architecture, behavior and an executive summary

How the evidence is reported

Devirt counts the protected functions in scope before recovery starts and reports every one of them in one of four proof states, so a function that was not proven cannot drop out of the result. A counterexample or a timeout never counts as proof.

  • Proven: verification evidence within a declared scope
  • Runtime-dependent: a real input or environment state is needed to finish the conclusion
  • Unresolved: inspected, but the available evidence did not settle it
  • Permanently bounded: outside an explicit analysis limit
A bar of all protected functions counted before recovery, split into proven, runtime-dependent, unresolved and permanently bounded, with a definition of each state.
Illustration: segment sizes are not a result. The four states always add up to the counted total.

Authorization and confidentiality

Devirt accepts only files you own or are authorized to analyze, and a supported VM family does not by itself establish permission to analyze a particular binary. The acceptable use policy prohibits unlawful circumvention and redistribution without rights.

Each file is analyzed in isolation, is never shared between customers and is not used for training. Confidentiality, EU requirements and exclusivity can be agreed before transfer.

See what lands on your desk.

One recovered program. Different ways to work with it. Inspect a teaching example, switch formats, and follow the link back to its evidence.

Example deliverableSynthetic data · not a customer file
Same logic. A different view.
VirtualizedInstructions through a VM
Protected logicTeaching VM / instruction listing
; Authored teaching VM, not vendor bytecode
00  LOAD32  r0, input.size
01  PUSH    r0
02  PUSH    0x10
03  UGE
04  STORE   p0
05  LOAD32  r1, input.magic
06  PUSH    r1
07  PUSH    0x44565254
08  EQ
09  LOAD    p0
10  AND
11  RET
DevirtualizedThe deliverable you can inspect
validate_recordC / sample function
#include <stdbool.h>
#include <stdint.h>
 
bool validate_record(uint32_t size, uint32_t magic) {
  const uint32_t header_size = 16u;
  const uint32_t expected_magic = 0x44565254u;
 
  if (size < header_size) {
    return false;
  }
 
  return magic == expected_magic;
}

Drag the divider to reveal the difference. Or choose a view above. Keyboard: arrow keys, Home and End.

In ordinary language

Check the declared size. Check the type marker. Accept only when both checks pass.

The evidence travels with the file.

Readable code explains the behavior. The ledger explains how far you can rely on it.

Download teaching source

Original teaching material, not customer output. The IDA view illustrates a database's contents; it is not a downloadable .i64. No measured proof or service benchmark is claimed by these examples.

Your build determines
the final scope.

Loki, Obfuscator X and Griffin require a free assessment for every binary. We email a file-specific scope, price and timeline before you decide. These are not automated profiles, and a previous assessment does not cover a different binary.

Start a free assessment

Loki VM devirtualization: questions and answers

Which Loki derivatives does Devirt support?

Devirt accepts Loki-derived binaries, including Obfuscator X and Griffin, for a free assessment. None is offered as an automated profile. Every binary needs its own review, including known derivatives, novel variants and new builds of a previously assessed program. Recovery is offered only where that assessment supports it.

Loki resists automated deobfuscation. What happens if a function cannot be proven?

The function stays in the result. Every protected function counted before recovery ends up proven, runtime-dependent, unresolved or permanently bounded, so you can see what the evidence covers and what it does not.

How is Loki VM devirtualization sold?

Every Loki-derived binary starts with a free assessment. We email a written offer with the scope, price, deliverables and timeline for that file. Paid work begins only after you accept; automated per-result pricing and subscription allowances do not qualify these binaries.

How long does Loki VM devirtualization take?

The assessment sets a delivery window for that exact binary. Loki-derived protections are difficult cases, so the standard automated and express delivery targets do not apply. The accepted offer states the timeline and review requirements before paid work begins.

Your binary stays your business.

Isolated analysis. No sharing between customers. No training on your upload. Your file is used only for the work you requested.

Read the data-handling policy
Input

Your uploaded file

Isolated processing

In scope
Output

Your result files

Not yet released

In scope
Audit

Processing record

Recording the work

In scope
Different data. Different clocks.

Input deletion follows delivery. This timeline shows the default 72-hour output window. Team outputs are kept for 30 days. Audit records have a separate 90-day window.

Policy illustration, not a live deletion certificate. Deletion is confirmed from provider receipts. Assessment inputs, unpaid jobs, and account/billing records have their own rules in the policy.

What do you need to understand?

Start in your account. If your upload needs manual work, we review it and email you a written scope and quote before paid work begins.

Create your workspace

Create an account, verify your email and upload your file. We review custom work and email your scope and quote.

Start a free assessment

Find the right plan