Cyber Security Academy · 课时

使用字符串与十六进制进行威胁狩猎

匹配恶意软件痕迹。

第 3 / 4 课13 个步骤

使用字符串与十六进制进行威胁狩猎 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。

从样本到 rule

搜寻从样本开始。您需要提取有辨识度的特征,判断哪些特征持久可靠,然后将它们编码到一个 rule 中,使其能够捕获该家族,同时不误报良性文件。

工作流程如下:对样本进行初步分析,提取字符串和结构特征,将有效信号与噪声分开,起草 rule,然后在部署前针对该家族样本和干净样本集进行测试。

提取候选字符串

请先使用 strings 工具列出可打印的序列,同时提取 ASCII 和 UTF-16(宽字符)文本。Windows 恶意软件经常将字符串存储为宽字符。

请扫描输出,寻找 C2 URL、互斥体名称、注册表路径、自定义错误消息、PDB 路径以及异常具体的文本。请忽略通用的运行时和编译器字符串。

strings -a sample.bin > ascii.txt
strings -e l sample.bin > wide.txt   # UTF-16LE
grep -iE 'http|mutex|\\\\pipe\\\\|\.pdb' ascii.txt wide.txt

选择持久可靠的字符串

并非每个字符串都适合放入 rule。请优先选择攻击者若要修改就必须付出较大 effort 的特征:

  • 该家族独有的硬编码互斥体或管道名称
  • 自定义协议标记或配置键
  • 不常见的调试或崩溃消息
  • 能够揭示构建环境的嵌入式 PDB 路径

请避免使用库的样板字符串、常见 API 名称以及合法软件共用的版本字符串,因为它们会产生误报。

strings:
  $mutex = "Global\\Zx7yQ_lock" wide
  $cfgkey = "x0r_cfg_begin" ascii
  $pdb = "C:\\build\\loader\\release\\loader.pdb"

破解简单混淆

许多家族会使用 XOR 或其他轻量方式对字符串进行编码。如果明文字符串很少,请寻找编码形式或解码例程。

您可以计算已知明文经过 XOR 编码后的字节并匹配这些字节,也可以使用 YARA 的 xor 修饰符,自动匹配使用任意单字节 XOR 密钥编码的字符串。

strings:
  // matches "http://" under any single-byte XOR key
  $u = "http://" xor
  // or a fixed key range
  $k = "config" xor(0x01-0xff)

使用十六进制模式进行搜寻

当字符串经过混淆而代码未被混淆时,请匹配恶意软件自身逻辑中的字节模式:例如解密存根、解包循环或独特常量。

请对样本进行反汇编,找到有辨识度的指令序列,然后将操作码转换为十六进制字符串。请将会变化的字节(地址、立即数)设置为通配符,使模式能够经受重新编译。

strings:
  // XOR decrypt loop with wildcarded counter/address
  $decrypt = { 8A ?? 34 ?? 88 ?? 4? 4? 75 ?? }

通配符与跳转的实践

十六进制搜寻的关键在于选择需要设置为通配符的部分。模式过于严格,重新编译就会使 rule 失效;模式过于宽松,则会匹配所有内容。

  • 将编译器会更改的相对偏移量和立即数设置为通配符
  • 固定操作码,因为算法是稳定的
  • 在指令长度变化的地方使用跳转 [n-m]

请让模式足够长以保持唯一性(通常至少包含 8 个有意义的字节),同时在必要处保持灵活。

strings:
  $stub = { 55 8B EC 83 EC [1-4] E8 ?? ?? ?? ?? 33 C0 }

结构与 PE 指标

超出原始字节的静态特征可以构成强大且低噪声的条件。使用 pe 模块,您可以匹配:

  • imphash — 导入表的哈希值,通常在同一家族的不同构建版本之间保持稳定
  • 节名称 — 自定义加壳程序会添加具有明显特征的节
  • 特定的 imports — VirtualAllocEx + WriteProcessMemory + CreateRemoteThread 表明存在注入行为
import "pe"
condition:
  pe.imphash() == "4e3a9f..." or
  for any s in pe.sections : ( s.name == ".x0rsec" )

作为信号的 entropy

加壳或加密区域具有高 entropy。math 模块可以测量 entropy,让您标记有效载荷节看起来已加密的样本,这是加壳程序的典型特征。

单独使用 entropy 会产生较多噪声(压缩安装程序同样具有高 entropy),因此请将它与其他指标结合使用,而不要仅凭它触发警报。

import "math"
condition:
  math.entropy(0, filesize) >= 7.2 and $loader_stub

组合多个指标

最强的 rule 会要求多个相互独立的指标,这样单个巧合就不会触发匹配。请将字符串、代码模式和结构特征结合起来。

这种分层条件既能抵御误报(所有部分都必须一致),也能抵御规避(攻击者必须同时更改多个特征)。

condition:
  uint16(0) == 0x5A4D and
  filesize < 800KB and
  $mutex and
  $decrypt and
  pe.imports("kernel32.dll", "CreateRemoteThread")

命名、元数据与版本管理

搜寻 rule 只有在其他人能够信任并维护它时才有用。请为每个 rule 指定清晰的命名空间名称,并填写完整的 meta。

  • 记录构建该 rule 所依据样本的哈希值
  • 注明家族、作者、日期和引用
  • 改进逻辑时递增版本字段

数月后 rule 触发时,这些元数据会告诉响应人员它代表什么以及应当多大程度上信任它,从而将一次性搜寻转变为持久且可共享的检测。

meta:
  family = "X0rLoader"
  author = "ir-team"
  date = "2026-06-04"
  hash = "9f1c...e2"
  version = "2"

先测试,再信任

请始终针对两个样本集验证新的 rule:

  • 真阳性 — 该家族的每个已知样本都必须匹配
  • 良性软件 — 大型干净样本集(系统二进制文件、常见应用)必须 NOT 匹配

在 Windows DLL 上出现一次误报,就可能导致整个环境中的关键文件被隔离。请运行扫描、统计结果、检查未命中和命中,然后在广泛部署前进行改进。

yara -r family.yar /malware_corpus/   # expect all to hit
yara -r family.yar /clean_corpus/     # expect zero hits

快速检查

请选择最具韧性的指标。

回顾

YARA 实战搜寻的完整流程:

  • 提取 ASCII 和宽字符字符串;保留持久可靠的特征(互斥体、配置键、PDB 路径)
  • 使用异或修饰符或编码模式破解轻度混淆
  • 字符串被隐藏时,匹配代码字节模式(解密/解包存根)
  • 将易变字节设置为通配符,固定操作码,并使用跳转处理可变长度
  • 使用 PE imphash、节、imports 和 entropy 作为结构信号
  • 组合多个指标以抵御误报和规避
  • 部署前始终针对家族样本和良性软件样本集进行测试

接下来:在整个环境中运行这些 rule。

免费开始

用 AI 导师学习 Cyber Security Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
76
课程
303

常见问题解答

「使用字符串与十六进制进行威胁狩猎」课时是免费的吗?

是的 — 「使用字符串与十六进制进行威胁狩猎」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。

「使用字符串与十六进制进行威胁狩猎」这节课中我会学到什么?

匹配恶意软件痕迹。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cyber Security Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用字符串与十六进制进行威胁狩猎」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cyber Security Academy 课中编写并运行代码吗?

能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. YARA 的用途
  2. YARA 规则语法
  3. 使用字符串与十六进制进行威胁狩猎
  4. 扩展并自动化扫描
← 返回 Cyber Security Academy