ShellCode 免杀方法

1. 改变 ShellCode 特征

这是最基本也是最重要的一步。原始的 ShellCode 往往包含固定的、已知的字节序列,这些序列很容易被杀毒软件识别

  • 编码 (Encoding): 使用各种编码技术,如 XOR、Base64、RC4 等,对 ShellCode 进行加密或混淆。在运行时,ShellCode 会被解码器(Decoder)解密后再执行。这样,静态文件中的 ShellCode 就不再是原始字节,从而绕过了静态查杀
  • 多态/自修改 (Polymorphism): 每次生成 ShellCode 时,都使用不同的加密密钥和解码器代码。这样,即使 ShellCode 本身相同,其外部封装也总是变化的,使签名查杀变得困难
  • 分块加载 (Chunking): 将 ShellCode 分割成多个小块,分散存储在不同的位置。在运行时,再将这些小块按顺序加载到内存中,重新组装成完整的 ShellCode。这可以避免单个大块的恶意代码被检测

2. 改变 ShellCode 加载方式

仅仅改变 ShellCode 的静态特征是不够的,还需要改变其在内存中的加载和执行方式,绕过行为检测

  • 反射式 DLL 注入: 不将 ShellCode 直接写入内存,而是将它作为 DLL 文件反射性地加载到目标进程中。这种技术可以绕过一些基于内存特征的检测
  • 内存申请方式: 避免使用像 VirtualAlloc 这样常用的 API 函数来分配可执行内存。可以尝试使用其他函数,如 HeapAlloc,或者通过一些更隐蔽的手段来获取可执行内存
  • API 函数混淆: 恶意软件通常会调用一些特定的敏感 API 函数,如 CreateProcessWriteProcessMemory 等。可以通过动态解析、哈希查找等方式,避免在代码中直接写出这些函数名,而是运行时再解析得到地址。这可以绕过一些基于 API 调用的行为检测
  • 白加黑 (LOLBAS): 利用 Windows 系统中已有的合法程序(如 rundll32.exe, certutil.exe 等)来加载和执行恶意代码。这种方式利用了“白名单程序”的信任,使恶意行为看起来像是合法操作
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:13:00

results matching ""

    No results matching ""