Nexsiz is structured as four cooperating layers plus a plugin surface and an optional NXS post-event plane. Defaults keep the surface minimal: zero behaviour change until features are explicitly enabled.

┌─────────────────────────────────────────────────────────────────┐
│                  Monitoring · Oracle · NXS                        │
│  crash / hang detection · differential & sanitizer oracles       │
│  minimizer · structured logging · existence-script spawn         │
└───────────────────────────────┬─────────────────────────────────┘
                                │
┌───────────────────────────────┴─────────────────────────────────┐
│                 Execution & Efficiency Layer                     │
│  worker pool · intelligent connection reuse · TCP / UDP          │
│  process monitor · optional LibAFL Executor                      │
│  snapshot / desocket (ProcessRestart · CRIU · ProtocolReset)     │
└───────────────────────────────┬─────────────────────────────────┘
                                │
┌───────────────────────────────┴─────────────────────────────────┐
│             State Awareness + Coverage Feedback                  │
│  hybrid state tracker · adaptive transition predictor            │
│  CoverageProvider (null | map+shm | software)                    │
└───────────────────────────────┬─────────────────────────────────┘
                                │
┌───────────────────────────────┴─────────────────────────────────┐
│                      Input Construction                          │
│  semantic field model · hierarchical mutator                     │
│  protocol-aware integrity repair pipeline                        │
│  JSON field trees (feature json-model)                           │
│  offline grammar inference (--infer-model)                       │
└─────────────────────────────────────────────────────────────────┘

Layer responsibilities

LayerRoleKey modules
Input ConstructionBuild and mutate structurally valid protocol bytessrc/input/ — model, mutator, integrity, corpus
State + CoverageTrack response-derived state; optional grey-box edgessrc/state/, src/coverage/
ExecutionWorker pool, transport, reuse, snapshot/desocketsrc/execution/
Monitoring / NXSOracles, minimizer, logging, post-event actorssrc/monitor/, src/nxs/, nxs/

Plugin surface

Trait-based plugins register without core changes:

  • Protocol — ftp, smtp, http, dns, mqtt, smb, binary-lp, generic, JSON models
  • Integrity — length/checksum/framing repair (auto-selected from model when possible)
  • Oracle — crash, hang, coverage, differential, sanitizer, combined modes
  • Encryptor — null, xor, chacha20, tls-record, combinations
  • CoverageProvider — null (default), map (AFL-style 64 KiB SHM), software
  • SnapshotProvider — null, ProcessRestart, CRIU (feature-gated)

Data path (one execution)

  1. Select seed / queue entry
  2. Hierarchical mutation (field / message / sequence)
  3. Integrity repair (length, checksum, terminators)
  4. Optional encryptor framing
  5. Send over TCP/UDP (reuse connection when safe)
  6. Observe response → state tracker + oracle + coverage
  7. On crash/hang/interesting: minimise, log, optionally spawn NXS

Design constraints

  • Minimal default deps — libc only; LibAFL, JSON models, CRIU behind features
  • Zero behaviour change — snapshot, desocket, NXS, coverage map off by default
  • Precision over volume — semantic mutation + repair before send
  • Operator control — CLI + conf + env; NXS rate limits and cooldowns
Deeper dives
See Layers and Data Flow for per-layer detail.