百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
返回工具页/返回 Issues 列表
#1891·yara

宽字符串仅匹配 UTF16-LE

作者: ruppde创建于 2023年3月6日更新于 2024年4月26日
标签bug

描述错误

从 https://yara.readthedocs.io/en/v4.2.3/writingrules.html#wide-character-strings 中的示例字符串"Borland"被编码为B\x00o\x00r\x00l\x00a\x00n\x00d\x00,但这只是 UTF16 的 LE 版本,BE 版本为\x00B\x00o\x00r\x00l\x00a\x00n\x00d(前面有 \x00)。因此,文档中的示例规则不匹配 UTF16-BE:

yara
rule WideCharTextExample1
{
    strings:
        $wide_string = "Borland" wide
    condition:
        $wide_string
}

到目前为止,UTF16-LE 是最常见的情况,但我在 2fb7a38e69a88e3da8fece4c6a1a81842c1be6ae9d6ac299afa4aef4eb55fd4b 中遇到了 UTF16-BE 字符串"Qi Lijun"(但这是怎么发生的 ... )

image

(实际上,这是更令人意外的行为,而不是一个错误,但这比特征请求更合适。)

要重现

yara
rule WideCharTextExample1
{
    strings:
        $wide_string = "Qi Lijun" wide
    condition:
        $wide_string
}

不匹配:

bash
$ yara test.yar 2fb7a38e69a88e3da8fece4c6a1a81842c1be6ae9d6ac299afa4aef4eb55fd4b

预期行为 可以有几种方法来解决这个问题:

  1. 回到"Borland"示例,完美的解决方案是同时搜索 UTF16-LE 和 UTF16-BE。 UTF16-LE: B\x00o\x00r\x00l\x00a\x00n\x00d\x00 UTF16-BE: \x00B\x00o\x00r\x00l\x00a\x00n\x00d
  2. 更快且节省内存的方法是删除现有实现中的 \x00 并搜索: B\x00o\x00r\x00l\x00a\x00n\x00d

这可能会在非常短的字符串上错误匹配(这不应该经常发生,因为性能和误报问题)。 3. 引入例如widebe作为新的字符串修饰符,类似于 uint16be。 4. 在文档中解释这个问题,并建议使用十六进制表示 UTF16-BE。 请填写以下信息:

  • 操作系统: Linux
  • YARA 版本: 4.3.0

内容来源: VirusTotal/yara

查看 GitHub 原文在 GitHub 查看讨论