packages/skills/skills/yara-authoring/SKILL.md
rule MalwareFamily_Variant : tag1 tag2 {
meta:
author = "analyst"
description = "Detects MalwareFamily variant based on unique strings"
date = "2024-01-01"
reference = "https://example.com/report"
hash = "abc123..."
severity = "high"
strings:
$s1 = "unique_malware_string" ascii
$s2 = { 4D 5A 90 00 03 00 } // hex pattern
$s3 = /https?:\/\/[a-z0-9]+\.evil\.com/ nocase // regex
condition:
uint16(0) == 0x5A4D and // MZ header (PE file)
filesize < 5MB and
(2 of ($s*))
}
| Type | Syntax | Use Case |
|---|---|---|
| Text | "string" | ASCII strings |
| Hex | { AA BB CC } | Byte patterns, shellcode |
| Regex | /pattern/ | Flexible text matching |
ascii / wide — encodingnocase — case insensitivefullword — word boundary matchingxor — XOR-encoded stringsbase64 — base64-encoded stringscondition:
all of them // All strings match
any of ($a*) // Any string starting with $a
2 of ($s1, $s2, $s3) // At least 2 of listed strings
#s1 > 3 // String $s1 appears more than 3 times
@s1 < 0x100 // String $s1 found before offset 0x100
filesize < 1MB // File size constraint
uint16(0) == 0x5A4D // Magic bytes at offset
# Scan a file
yara rule.yar target_file
# Scan directory recursively
yara -r rules/ /path/to/scan/
# Scan with metadata output
yara -m -s rule.yar target_file
# Compile rules for faster repeated scanning
yarac rules/ compiled.yarc
yara -C compiled.yarc /path/to/scan/
meta with author, description, date, and referencefilesize and magic byte checks to limit scopeprivate rules for helper conditions