Zum Inhalt springen

YARA-Spickzettel: Syntax, Modifikatoren, Bedingungen

YARA und YARA-X auf einer Seite: Regelgerüst, String-Typen und Modifikatoren, Hex-Syntax, Operatoren, Quantoren, Schleifen, Magic Bytes und Kommandozeile.

Veröffentlicht am 2 Min. Lesezeit

Eine kompakte Referenz; eigene Regeln im Editor testen.

Regelgerüst

import "pe"

rule PREFIX_Family_Detail : tag1 tag2
{
    meta:
        description = "Was die Regel erkennt"
        author = "Sie"
        date = "2026-09-29"
    strings:
        $x1 = "very specific string" ascii wide
        $s1 = { 8B 45 ?? 33 C9 [2-4] E8 }
        $s2 = /config_[a-f0-9]{8}/
    condition:
        uint16(0) == 0x5A4D and filesize < 5MB and
        (1 of ($x*) or all of ($s*)) and
        pe.number_of_sections > 2
}

Nur condition ist Pflicht; Reihenfolge meta, strings, condition. private rule wird nicht gemeldet, global rule filtert den Namespace.

Strings und Modifikatoren

TypSyntaxBeispiel
Text"…"$a = "cmd.exe /c"
Hex{ … }$h = { 4D 5A ?? 00 }
Regex/…/is$r = /evil[0-9]{2}\.exe/
ModifikatorTextHexRegexFunktion
ascii / wideja–jaBytes / UTF-16LE
nocaseja–jaGroß-/Kleinschreibung egal
fullwordja–jaGanzes Wort
xorja––1-Byte-XOR-Schlüssel
base64 / base64wideja––In Base64 (min. 3 Bytes in YARA-X)
privatejajajaNicht in der Ausgabe

Hex: ?? beliebiges Byte, A?/?A Halbbyte, [4]/[2-6]/[8-] Sprünge, ( 01 | 02 ) Alternativen, ~00 jedes Byte außer 00.

Operatoren und Quantoren

KategorieOperatoren
Booleschand or not
Arithmetik+ - * \ %
Bitweise& | ^ ~ << >>
Strings (Modulwerte)contains icontains startswith endswith iequals matches
Muster$a #a @a[i] !a[i] $a at N $a in (A..B)
Dateifilesize uint8/16/32(off) und be-Varianten

any of them, all of them, none of them, 2 of ($s*), 50% of them, for any i in (1..#a) : ( … ), for all of ($x*) : ( # > 2 ), for any s in pe.sections : ( … ), with x = … : ( … ) (nur YARA-X).

Magic Bytes

FormatPrüfung
PE (MZ)uint16(0) == 0x5A4D
ELFuint32(0) == 0x464C457F
Mach-O 64uint32(0) == 0xFEEDFACF
PDFuint32(0) == 0x46445025
ZIP / OOXMLuint32(0) == 0x04034B50
OLEuint32(0) == 0xE011CFD0

Module

import "pe"
import "math"
import "hash"

rule Module_Snippets
{
    condition:
        pe.is_pe and (
            pe.imports("kernel32.dll", "VirtualAlloc") or
            pe.exports("DllRegisterServer") or
            math.entropy(0, 4096) > 7.0 or
            hash.md5(0, 64) == "00000000000000000000000000000000"
        )
}

YARA-X-Kommandozeile

yr scan rules.yar ziel, yr scan -s (Strings), yr check, yr fmt, yr compile rules.yar -o rules.yarc, yr dump -m pe datei.exe.

Performance

TunLassen
4+ feste Bytes je MusterStrings unter 4 Bytes
Magic Bytes und filesize zuerstModule vor günstigen Prüfungen
Literale in RegexFührendes .*
Schleifen über 1..#aSchleifen über 0..filesize

Mehr in Syntax, Strings, Bedingungen, Module und Performance; Regeln mit dem Linter prüfen.

FAQ

Gibt es einen druckbaren YARA-Spickzettel?
Diese Seite ist als einseitige Referenz gedacht; einfach aus dem Browser drucken. Jede vollständige Regel darauf kompiliert mit YARA-X 1.20.
Wie lautet der Operator für Ganzzahldivision?
YARA verwendet den Backslash für Ganzzahldivision, z. B. filesize \ 2, und % für den Rest.