Skip to content
Malnox
Technology

One pipeline, 16 engines, one verdict you can re-read

Malnox has no opaque machine-learning model at its centre. It has a deterministic pipeline: same input, same engines, same score. Here is the architecture, with the measured numbers.

Measured, not estimated

prefilter on
3.1 sfor 32 MB
21,6 swithout prefilter
7×faster
2.770automated tests

The gap is verified with soundness tests: the prefilter loses no detection.

Pipeline

From bytes to verdict, in four stages

Nothing here is heuristic in the sense of “guessing”. Each stage has an input, an output and a test covering it.

  1. 01

    Unified input

    On-demand scanning, real-time protection and the API feed the same pipeline. A file is read once into a buffer, then every engine receives the same bytes — no separate reads that could disagree.

  2. 02

    Independent engines

    Each engine returns a 0–100 score and a list of detections with severity. No engine sees another's result before writing, so there is no anchoring effect between them.

  3. 03

    Deterministic combination

    The maximum plus 15% of the sum of the rest, capped at 100. The same input always produces the same verdict — no weights that “tune themselves” over time.

  4. 04

    Verifiable report

    The result keeps every engine's score and every individual detection, so the report can be re-read and disputed. The PDF is generated locally with PDFKit.

YARA prefilter

7× faster, same detections

A set of mandatory literals (“needles”) is derived automatically from each rule's AST. If none appears in the buffer the rule is skipped without evaluation — a file without the required string cannot match the rule.

needles = literals(rule.ast) if none(needles) in buffer: skip(rule) // no evaluation cost 32 MB → 3.1 s // was 21.6 s

The risk of a prefilter is discarding a rule that would have matched. That is why soundness tests exist: every rule is checked against samples it must catch, with the prefilter enabled.

Scoring

How scores combine

No engine has veto power and none can hide a verdict. The formula is simple and public.

final score = max(engines) + 15% × the sum of the rest

  • Maliciousscore ≥ 70 or any critical detection
  • Suspiciousscore ≥ 25 or any medium detection
  • Cleanbelow both thresholds, with every engine reported

The cap is 100. The report lists every engine, its score and its detections, so you can verify for yourself why a verdict came out the way it did.

Stack

One language, zero mandatory services

TypeScript for backend and frontend, native SQLite through node:sqlite and vendored binaries. Nothing to compile, no external service to contact.

Node.js 22+runs on 24
TypeScript 5.8backend + frontend
Fastify 5API on 127.0.0.1:4711
React 19 + Vite 6dashboard
SQLite (node:sqlite)no native binary
chokidar 4real-time protection
PDFKitlocal reports
MalNOX Core Enginebundled
YARA-Xvendor/yr.exe

63,239 lines of code across 175 source files, plus 30,362 lines of tests and 1,324 lines of YARA rules.

The core guarantee

No network request in the detection path. Verifiable, not just promised.

Detection without a network

The product's core guarantee: no engine in the detection path makes a network request. Verifiable, not just promised.

  • Rules, lists and signatures in versioned local files
  • No DNS lookup during scanning
  • Works identically on an air-gapped workstation

Explainable verdicts

Every report shows which engine contributed what. There is no “trust us, we know better”.

  • Per-engine score alongside individual detections
  • Locally generated PDF report for every scan
  • YARA rules can be read, enabled or disabled

Response, not just alerts

When it finds something, Malnox acts: it stops the process, removes the file, freezes encryption and restores the backups. It does not just tell you and walk away.

  • The process holding an infected file is stopped before quarantine
  • An encryption attack is frozen, then the files are restored
  • AES-256-GCM quarantine with tag verification on restore
  • Essential Windows processes are never touched

Enterprise without SaaS

RBAC, append-only audit log, SIEM export and a hardening score — all on your own infrastructure.

  • scrypt + salt passwords, SHA-256 hashed sessions
  • admin / analyst / viewer roles enforced per route
  • Bounded SIEM queue: events drop, memory does not balloon

Privacy by default

The AI analyst is optional and advisory. By default it sends metadata only, and its answer never enters the verdict.

  • advisoryOnly = true, without exceptions
  • File content is sent only with aiSendContent
  • The API key is redacted in every response

Declared limits

The Malnox kernel driver compiles and signs, but it does not yet have the official Microsoft signature. We say so on the front page, not in a footnote.

  • A hardening score that treats “unknown” as unknown
  • Measured, not estimated, performance comparisons
  • Readable rules, not signatures hidden in a backend
Comparison

Local versus cloud

The same criteria, two different architectures. Where the cloud wins, we say so there too.

What makes a local antivirus different
CriterionClassic cloud antivirusMalnox
Where the verdict is computedOn the vendor's serversEntirely on your machine
Works without internetPartially, with stale signaturesIdentically, including air-gapped
What the vendor learnsNames and hashes of scanned filesInstallation health, not your files
You can read the rulesNo, proprietary and hiddenYes, 67 rules across 10 .yar files
You can add your own logicRarely, through a portalCustom YARA rules, enabled per file
Independent auditImpossible without backend accessSniff the network and verify
What happens on a detectionThe file is quarantined, the process keeps runningThe process is stopped first, then the file goes to encrypted quarantine
During an encryption attackAlerts after the files are already encryptedFreezes the suspect processes, then restores the backups
Essential system processesInternal list, not visiblePublic list: a protected process is refused and written to the log
Technical questions

What people ask most

Try it on a file you already have.

The installer is 177 MB and asks for no account. Not convinced? Check a link above — the web engine is already running on this page.