Cyber Security Academy · 课时

去混淆与反分析技巧

识别并绕过字符串混淆、控制流平坦化、反调试和加壳技术。

第 4 / 4 课13 个步骤

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

恶意软件为何进行代码混淆

恶意软件作者会对代码进行混淆,以躲避静态 AV 特征检测、分析人员的逆向分析以及沙箱检测。去混淆是指将代码从混淆形式还原为可读代码的过程。

字符串混淆

恶意软件很少以明文形式存储 C2 URL 或 API 名称。常见技术包括:

  • XOR 编码:对每个字节执行 key ^ char
  • Base64 编码
  • 栈字符串:在运行时逐个字符构造字符串
  • 使用硬编码密钥进行自定义加密

去混淆 XOR 字符串

查找 XOR 密钥:

# If you see single-byte XOR:
import string
for key in range(256):
    decoded = bytes([b ^ key for b in encoded])
    if all(c in string.printable for c in decoded.decode('latin1')):
        print(f"Key {key}: {decoded}")

代码加壳

加壳程序会压缩或加密原始二进制文件,并添加一个在运行时解包或解密它的存根。原始代码不会出现在磁盘上。示例包括 UPX(正常用途)以及恶意软件中的自定义加壳程序。

检测方法:导入表较小、熵较高,并且在 PEID/Detect-It-Easy 中存在已知的加壳程序特征。

反调试技巧

恶意软件会检测调试器并改变行为:

  • IsDebuggerPresent() — Windows API 检查
  • 计时检查 — 在调试器下运行的代码速度较慢
  • ptrace 检查 — Linux 进程只能被 ptrace 一次
  • INT3 陷阱 — 检测软件断点
# Linux anti-ptrace:
if (ptrace(PTRACE_TRACEME, 0, 0, 0) == -1) {
    exit();  // already being traced!
}

反虚拟机与沙箱检测

恶意软件会检测虚拟化或沙箱环境,然后休眠或退出:

  • 使用 CPUID 检查虚拟机监控程序位
  • 检查虚拟机特有的注册表项、进程和文件
  • 运行时间短、没有最近文件、没有浏览器历史记录
  • 检查鼠标移动(自动化沙箱不会移动鼠标)

控制流混淆

用于迷惑反汇编器的技术:

  • 跳转混淆 — 通过计算得到的地址进行间接跳转
  • 不透明谓词 — 始终为真的条件,会干扰分析
  • 指令重叠 — 将数据嵌入指令流中

在 GDB 中绕过反调试

绕过常见的反调试技巧:

# Patch IsDebuggerPresent return value:
# In GDB: set $rax = 0 after the call
# Or use NOP sled to skip the check:
# In GDB: jump *0x401234  (skip the check)
# Force ptrace to succeed:
set follow-fork-mode child

动态解包

对于加壳的恶意软件,让解包存根运行,直到原始代码位于内存中,然后将其转储:

  1. 在 GDB 中运行,直到加壳程序存根执行完毕
  2. 查找 OEP(原始入口点)— 通常可以通过在 VirtualAlloc 上设置断点并查找 jmp reg 来定位
  3. 使用 dump binary memory 将内存转储到文件

基于仿真的去混淆

通过仿真代码来揭示混淆字符串、而无需运行二进制文件的工具:

  • FLOSS(FireEye)— 提取栈字符串和混淆字符串
  • speakeasy — Windows API 仿真
  • Capa — 自动识别恶意软件功能

模式识别

识别常见的恶意软件模式可以加快分析:

  • API 哈希:使用函数名称的 CRC32/ROR13,在运行时解析导入项
  • 反射式 DLL 注入模式
  • NTDLL 系统调用存根(直接进行系统调用,以绕过 EDR 钩子)

快速检查:反分析

某恶意软件样本会检查在 Linux 上 ptrace(PTRACE_TRACEME) 是否返回 -1。这是什么技术?

课程回顾

恶意软件会混淆字符串(XOR、栈字符串)、对代码加壳、检测调试器(IsDebuggerPresent、ptrace、计时检查),并躲避沙箱(虚拟机检查、活动不足)。去混淆方法包括:暴力破解 XOR 密钥、动态解包(在 OEP 之后转储)以及使用 FLOSS 提取栈字符串。在 GDB 中修补或绕过反调试检查。仿真工具(FLOSS、speakeasy)可以安全地提取行为。

免费开始

用 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 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「去混淆与反分析技巧」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. Ghidra:浏览与注释二进制程序
  2. 逆向分析者必备的 x86/x64 汇编
  3. 使用 GDB 与 pwndbg 进行动态分析
  4. 去混淆与反分析技巧
← 返回 Cyber Security Academy