Regex与Yara规则编写咨询:路径匹配正则表达式问题
嘿,我来帮你搞定这几个Yara规则里的正则问题!针对你提到的三个场景,我逐个拆解正确的写法,顺便解释细节,方便你理解复用:
场景1:匹配以
C:\Program Files\或C:\Program Files\Microsoft Office\开头、以excel.exe结尾的路径 Yara使用PCRE兼容的正则,所以Windows路径里的反斜杠\需要转义成\\。这里的核心是处理可选的Microsoft Office子目录,同时匹配中间任意层级的目录:
^C:\\Program Files(?:\\Microsoft Office)?\\.*\\excel\.exe$
拆解下关键部分:
^:锚定字符串开头,确保路径从指定前缀开始,避免匹配到路径中间的片段(?:\\Microsoft Office)?:非捕获可选组,?表示这个子目录是可选的,既匹配带Office的路径,也匹配不带的\\.*\\:匹配中间任意数量的目录层级(.*表示任意字符序列,直到遇到最后一个\)excel\.exe$:锚定字符串结尾,转义.是因为正则里.代表任意字符,确保精准匹配文件名
对应的Yara规则示例:
rule Match_Target_Excel_Paths { strings: $valid_excel_path = /^C:\\Program Files(?:\\Microsoft Office)?\\.*\\excel\.exe$/ fullword condition: $valid_excel_path }
fullword修饰符确保匹配的是完整的路径字符串,不会被其他无关字符截断。
场景2:匹配任意路径下的
dnx.exe 这个需求很简单,只要确保文件名是dnx.exe,前面可以是任意路径(包括直接在根目录或当前目录的情况):
.*\\dnx\.exe$
如果要兼容没有盘符的相对路径,或者直接运行的dnx.exe,也可以简化成:
dnx\.exe$
对应的Yara规则示例:
rule Match_Any_Dnx_Path { strings: $dnx_path = /.*\\dnx\.exe$/ fullword condition: $dnx_path }
场景3:匹配
C:\Program Files\Microsoft Office\*\client\appvlp.exe(*为任意单个目录) 这里的*代表单个目录层级,所以用[^\\]+来匹配(表示不包含反斜杠的任意字符序列,刚好对应一个目录名):
^C:\\Program Files\\Microsoft Office\\[^\\]+\\client\\appvlp\.exe$
如果*允许是任意数量的目录层级(比如中间有多个子目录),就把[^\\]+换成.*:
^C:\\Program Files\\Microsoft Office\\.*\\client\\appvlp\.exe$
对应的Yara规则示例:
rule Match_Appvlp_Target_Path { strings: $appvlp_path = /^C:\\Program Files\\Microsoft Office\\[^\\]+\\client\\appvlp\.exe$/ fullword condition: $appvlp_path }
额外小提示
- Yara正则默认不区分大小写,如果需要严格区分,可以在正则后加
/i修饰符(比如/^C:\\...$/i) - 如果路径里可能出现转义字符或者不同的分隔符,根据实际捕获的样本调整正则的宽松度
内容的提问来源于stack exchange,提问作者dipl0
相关产品推荐
相关产品推荐

