恶意代码隐藏之进程伪装
介绍
通常情况下,为了永久驻留在用户计算机上面,木马程序会披上厚厚的伪装,来躲过用户的常识判断和一些杀软的检测。很多病毒都需要巧妙地隐藏手段来让自己和一个正常的程序一样正大光明的运行在操作系统上。隐藏的手段多种多样,有些是利用较为隐蔽的自启动和植入技术,不需要额外伪装也能起到免杀的效果。
进程伪装
当一个恶意程序将自己的名称改为和系统自带的一些程序名称相同,有时就能骗过用户和杀软的“眼睛”,即使和被冒充的那个进程信息相同,但是内部执行的代码确实我们自己定义的,通过修改指定进程的PEB
中的路径和命令行信息来实现伪装。
一些系统进程的作用
进程名称 | 作用描述 |
---|---|
smss.exe | 会话管理(Session Manager) |
csrss.exe | 子系统服务器进程 |
winlogon.exe | 管理用户登录 |
services.exe | 包含很多系统服务 |
svchost.exe | 包含很多系统服务,从DLL 中运行的服务的通用主机名称 |
SPOOLSV.EXE | 将文件加载到内存中以便之后打印 |
explorer.exe | 资源管理器 |
函数介绍
函数NtQueryInformationProcess
:获取指定进程的信息
实现原理
进程伪装的关键在于进程环境块的获取,可由上述函数NtQueryInformationProcess()
来获取指定进程的PEB
地址,获取之后通过调用函数ReadProcessMemory()
和WriteProcessMemory()
来读写目标进程内存。具体实现流程如下:
根据
PID
打开指定进程从
ntdll.dll
中获取NtQueryInformationProcess()
函数的导出地址使用
NtQueryInformationProcess
函数获取指定的进程基本信息PROCESS_BASIC_INFORMATION
并从中获取指定进程的PEB
最后,就可以根据进程环境块中的
ProcessParameters
来获取指定进程的RTL_USER_PROCESS_PARAMETERS
信息,这是因为PEB
的路径信息、命令行信息存储在这个结构体 中。调用WriteProcessMemory()
和ReadProcessMemory()
函数可以修改PEB
中的路径信息、命令行信息等,从而 实现进程伪装。
注意:在实现的时候要注意系统的版本是32位还是64位