Yara规则无法检测含指定字符串的PDF文件问题求助
问题排查与修复方案
1. Yara规则语法错误
你的规则存在语法错误,Yara规则没有detection关键字,所有字符串定义必须放在Strings:块内,否则规则无法正常解析。
错误规则示例:
Rule example1{ Strings: $Str1 = {25 50 44 46} // for pdf detection $str2 = "hello-1234" // string in pdf //$str2 = /hello-\d{4}/ // regex for string detection Condition: $str1 and $str2 }
修正后的规则:
rule example1 { Strings: $pdf_magic = {25 50 44 46} // PDF文件头标识(%PDF) $target_str = "hello-1234" // 若需匹配任意4位数字后缀,可启用正则:$target_re = /hello-\d{4}/ Condition: $pdf_magic and ($target_str or $target_re) }
2. 字符串不匹配问题
你明确提到PDF文件中包含的是hello_1234(下划线),但规则中查找的是hello-1234(连字符),这两个是完全不同的字符串,自然无法匹配。如果需求是检测含hello_1234的PDF,需将规则中的目标字符串改为"hello_1234"。
3. PDF内容压缩导致匹配失败
多数PDF会对文本内容进行Flate压缩,Yara默认不会自动解压PDF的压缩流,因此即使目标字符串存在,也可能因被压缩而无法被规则识别。
解决方式:
- 使用支持PDF解压的Yara衍生工具,比如
yara-pdf - 手动解压PDF后再检测:
- 用
qpdf工具解压PDF:qpdf --stream-data=uncompress input.pdf output_uncompressed.pdf - 用Yara规则检测解压后的文件
- 用
4. 命令执行路径检查
若PDF目录路径包含空格,需用引号包裹路径避免解析错误:
yara64 filename.yara "C:/directory of pdf files"
同时确保yara64在系统PATH中,或使用完整路径调用(如C:/tools/yara64.exe filename.yara "C:/pdf_dir")
内容的提问来源于stack exchange,提问作者Abdur Rashid
相关产品推荐
相关产品推荐

