Skip to content

Passes

Kagura is built on the LLVM New Pass Manager. Each transformation is a separate pass; you enable them individually via -kagura-<name> flags or through a JSON policy file.

Passes are grouped by purpose:

  • Control Flow — flatten the CFG, inject bogus branches, split / reorder basic blocks, redirect calls.
  • Data Obfuscation — encrypt strings, constants, globals, and alloca'd values.
  • Anti-Analysis — detect debuggers / hooking frameworks, verify integrity, hide symbols.
  • Platform-Specific — ObjC selector / class obfuscation and JNI dynamic registration, plus VM virtualization (which is not platform-specific; it is documented there for convenience and lives in lib/Transforms/VM/).
  • Infrastructure — DWARF control, config loader, symbol map, audit log.

See also: