针对Windows的程序隐藏技术

1. 进程伪装

1. 根据进程的 PID 号打开指定进程, 并获取进程的句柄

2. 从 ntdll.dll 中获取 NtQueryInformationProcess 函数的导出地址

3. 使用 NtQueryInformationProcess 函数获取指定的进程基本信息 PROCESS_BASIC_INFORAMTION,并从中获取指定进程的 PEB

4. 可以根据进程环境块中的 ProcessParameters 来获取指定进程的 RTL_USER_PROCESS_PARAMETERS 信息(PEB 的 路径信息、命令行信息存储在这结构体中)

5. 修改结构体中的信息(ReadProcessMemory\WriteProcessMemory), 从而实现进程的伪装

2. 傀儡进程

1. 利用 CreateProcess 函数 CREATE_SUSPENDED 创建一个挂起的进程

2. 调用 VirtualAllocEx 函数在新进程中申请一个可读可写可执行的内存, 并调用 WriteProcessMemory 写入 ShellCode 数据

3. 调用 GetThreadContext 函数, 设置获取标志为 CONTEXT_FULL, 获取新进程中的所有上下文, 修改其 EIP

4. 调用 ResumeThread, 让进程恢复运行

3. 进程隐藏

说是进程隐藏不如说,InlineHook ZwQuerySystemInformation 函数, 遍历进程通常调用的都是 EnumProcess 或是 CreateToolhelp32Snapshot 等来实现的, 通过逆向分析, 会发现它们最终会调用 ZwQuerySystemInformation ,所以我们 Hook ZwQuerySystemInformation  即可


4. DLL 劫持

1. 利用 Windows 加载程序会优先遍历当前目录表来实现劫持

2. 注意关键的系统DLL函数是无法劫持的, 如:NTDLL.DLL, Kernel32.dll等, 因为在系统启动的时候它们就已经被加载了

原创文章,转载请注明: 转载自Windows内核安全驱动编程

本文链接地址: 针对Windows的程序隐藏技术

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注