逆向入门分析实战(四)
字数 1506 2025-08-15 21:31:58

Windows进程遍历与安全软件检测技术详解

1. 技术背景

在恶意软件和APT攻击中,常见的一种规避技术是检测系统中运行的安全软件(如杀毒软件、行为监控软件等)。当发现特定安全软件存在时,恶意程序会选择退出或改变行为模式以避免被发现。这种技术的核心是进程遍历进程名比对

2. 关键技术原理

2.1 进程遍历基本流程

  1. 创建系统进程快照
  2. 遍历快照中的进程信息
  3. 比对进程名与目标安全软件进程名
  4. 根据比对结果采取相应行为

2.2 Windows API详解

2.2.1 CreateToolhelp32Snapshot

功能:创建系统快照,捕获指定类型的系统信息。

参数

  • dwFlags:指定快照包含的内容类型
    • TH32CS_SNAPPROCESS (值为2):包含所有进程
  • th32ProcessID:进程ID,仅当查看特定进程的堆或模块时使用,进程遍历时应设为0

返回值:快照句柄,失败时返回INVALID_HANDLE_VALUE (-1)

2.2.2 PROCESSENTRY32结构体

存储进程信息的结构体,关键成员:

  • dwSize:结构体大小,必须在使用前初始化
  • szExeFile:进程可执行文件名

2.2.3 Process32First

功能:获取快照中第一个进程信息

参数

  • hSnapshot:快照句柄
  • lppe:指向PROCESSENTRY32结构体的指针

2.2.4 Process32Next

功能:获取快照中下一个进程信息

参数与Process32First相同

3. 正向开发实现

3.1 代码实现步骤

  1. 包含必要头文件
  2. 初始化PROCESSENTRY32结构体
  3. 调用CreateToolhelp32Snapshot创建进程快照
  4. 调用Process32First获取第一个进程
  5. 循环调用Process32Next遍历所有进程
  6. 使用StrStr比对进程名
  7. 根据比对结果执行相应操作

3.2 关键代码示例

#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>

void listProcess() {
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);
    
    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if(hProcessSnap == INVALID_HANDLE_VALUE) {
        printf("CreateToolhelp32Snapshot failed\n");
        return;
    }
    
    if(Process32First(hProcessSnap, &pe32)) {
        do {
            printf("The process is %s\n", pe32.szExeFile);
            if(StrStr(pe32.szExeFile, "360sd.exe")) {
                printf("360杀毒正在运行,退出程序\n");
                exit(0);
            }
        } while(Process32Next(hProcessSnap, &pe32));
    }
    
    CloseHandle(hProcessSnap);
}

4. 逆向分析要点

4.1 IDA分析关键点

  1. CreateToolhelp32Snapshot调用分析

    • 参数dwFlags值为2(TH32CS_SNAPPROCESS)
    • 返回值与0FFFFFFFFh(-1)比较,判断是否成功
  2. PROCESSENTRY32结构体

    • 大小为128h(296字节)
    • szExeFile成员存储进程名
  3. 进程名比对逻辑

    • 使用StrStr函数比对进程名与"360sd.exe"
    • 匹配成功则进入退出流程
    • 匹配失败则继续遍历

4.2 关键汇编代码分析

mov eax, [ebp+pe32]       ; 获取PROCESSENTRY32结构体地址
push eax                  ; 准备printf参数
push offset aTheProcessIs ; "The process is %s\n"
call printf               ; 输出进程名

mov eax, [ebp+pe32.szExeFile] ; 获取进程名
push offset a360sdExe     ; "360sd.exe"
push eax
call StrStr              ; 比对进程名
test eax, eax
jnz exit_program         ; 匹配则退出

5. 技术扩展与应用

5.1 检测其他安全软件

常见安全软件进程名示例:

  • 360安全卫士:360tray.exe
  • 腾讯电脑管家:QQPCRTP.exe
  • 火绒安全:HipsTray.exe
  • Windows Defender:MsMpEng.exe

5.2 进阶检测技术

  1. 窗口枚举:通过EnumWindows查找安全软件窗口
  2. 服务检测:检查安全软件相关服务
  3. 驱动检测:检查加载的驱动模块
  4. 文件检测:检查安全软件安装目录

5.3 防御措施

  1. 进程隐藏:安全软件可隐藏自身进程
  2. 随机化进程名:每次启动使用不同进程名
  3. 行为混淆:检测到扫描时展示无害行为
  4. API钩子:监控关键API调用

6. 总结

本文详细讲解了Windows平台下通过进程遍历检测安全软件的技术实现,包括:

  • 关键API的使用方法
  • 正向开发的完整代码实现
  • 逆向分析的要点和方法
  • 技术扩展方向和防御措施

掌握这些技术对于安全研究人员分析恶意软件行为、开发安全防护工具具有重要意义。

Windows进程遍历与安全软件检测技术详解 1. 技术背景 在恶意软件和APT攻击中,常见的一种规避技术是检测系统中运行的安全软件(如杀毒软件、行为监控软件等)。当发现特定安全软件存在时,恶意程序会选择退出或改变行为模式以避免被发现。这种技术的核心是 进程遍历 和 进程名比对 。 2. 关键技术原理 2.1 进程遍历基本流程 创建系统进程快照 遍历快照中的进程信息 比对进程名与目标安全软件进程名 根据比对结果采取相应行为 2.2 Windows API详解 2.2.1 CreateToolhelp32Snapshot 功能 :创建系统快照,捕获指定类型的系统信息。 参数 : dwFlags :指定快照包含的内容类型 TH32CS_SNAPPROCESS (值为2):包含所有进程 th32ProcessID :进程ID,仅当查看特定进程的堆或模块时使用,进程遍历时应设为0 返回值 :快照句柄,失败时返回 INVALID_HANDLE_VALUE (-1) 2.2.2 PROCESSENTRY32结构体 存储进程信息的结构体,关键成员: dwSize :结构体大小,必须在使用前初始化 szExeFile :进程可执行文件名 2.2.3 Process32First 功能 :获取快照中第一个进程信息 参数 : hSnapshot :快照句柄 lppe :指向PROCESSENTRY32结构体的指针 2.2.4 Process32Next 功能 :获取快照中下一个进程信息 参数与Process32First相同 3. 正向开发实现 3.1 代码实现步骤 包含必要头文件 初始化PROCESSENTRY32结构体 调用CreateToolhelp32Snapshot创建进程快照 调用Process32First获取第一个进程 循环调用Process32Next遍历所有进程 使用StrStr比对进程名 根据比对结果执行相应操作 3.2 关键代码示例 4. 逆向分析要点 4.1 IDA分析关键点 CreateToolhelp32Snapshot调用分析 : 参数 dwFlags 值为2(TH32CS_ SNAPPROCESS) 返回值与 0FFFFFFFFh (-1)比较,判断是否成功 PROCESSENTRY32结构体 : 大小为128h(296字节) szExeFile 成员存储进程名 进程名比对逻辑 : 使用StrStr函数比对进程名与"360sd.exe" 匹配成功则进入退出流程 匹配失败则继续遍历 4.2 关键汇编代码分析 5. 技术扩展与应用 5.1 检测其他安全软件 常见安全软件进程名示例: 360安全卫士:360tray.exe 腾讯电脑管家:QQPCRTP.exe 火绒安全:HipsTray.exe Windows Defender:MsMpEng.exe 5.2 进阶检测技术 窗口枚举 :通过EnumWindows查找安全软件窗口 服务检测 :检查安全软件相关服务 驱动检测 :检查加载的驱动模块 文件检测 :检查安全软件安装目录 5.3 防御措施 进程隐藏 :安全软件可隐藏自身进程 随机化进程名 :每次启动使用不同进程名 行为混淆 :检测到扫描时展示无害行为 API钩子 :监控关键API调用 6. 总结 本文详细讲解了Windows平台下通过进程遍历检测安全软件的技术实现,包括: 关键API的使用方法 正向开发的完整代码实现 逆向分析的要点和方法 技术扩展方向和防御措施 掌握这些技术对于安全研究人员分析恶意软件行为、开发安全防护工具具有重要意义。