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.
Eine kompakte Referenz; eigene Regeln im Editor testen.
Regelgerüst
import "pe"
rule PREFIX_Family_Detail : tag1 tag2
{
meta:
= "Was die Regel erkennt"
= "Sie"
= "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
| Typ | Syntax | Beispiel |
|---|---|---|
| Text | "…" | $a = "cmd.exe /c" |
| Hex | { … } | $h = { 4D 5A ?? 00 } |
| Regex | /…/is | $r = /evil[0-9]{2}\.exe/ |
| Modifikator | Text | Hex | Regex | Funktion |
|---|---|---|---|---|
ascii / wide | ja | – | ja | Bytes / UTF-16LE |
nocase | ja | – | ja | Groß-/Kleinschreibung egal |
fullword | ja | – | ja | Ganzes Wort |
xor | ja | – | – | 1-Byte-XOR-Schlüssel |
base64 / base64wide | ja | – | – | In Base64 (min. 3 Bytes in YARA-X) |
private | ja | ja | ja | Nicht 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
| Kategorie | Operatoren |
|---|---|
| Boolesch | and 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) |
| Datei | filesize 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
| Format | Prüfung |
|---|---|
| PE (MZ) | uint16(0) == 0x5A4D |
| ELF | uint32(0) == 0x464C457F |
| Mach-O 64 | uint32(0) == 0xFEEDFACF |
uint32(0) == 0x46445025 | |
| ZIP / OOXML | uint32(0) == 0x04034B50 |
| OLE | uint32(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
| Tun | Lassen |
|---|---|
| 4+ feste Bytes je Muster | Strings unter 4 Bytes |
Magic Bytes und filesize zuerst | Module vor günstigen Prüfungen |
| Literale in Regex | Führendes .* |
Schleifen über 1..#a | Schleifen ü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.