使用字符串与十六进制进行威胁狩猎
匹配恶意软件痕迹。
使用字符串与十六进制进行威胁狩猎 是 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 反馈 — 无需本地设置。