什么是进程隐藏?

对 Windows系统可以用自带的任务管理器,查看进程列表, 找出可疑进程。
恶意代码为了保护自己的进程不被发现,所以就有了进程隐藏技术,用来对抗进程检测。

为什么需要进程隐藏?

进程隐藏是病毒和木马确保自己不被查杀所要做的最重要的事,而分析检测隐藏进程和发现木马病毒是反病毒工作者的一个重要任务。
为了对抗病毒检测,病毒开发者也在一直寻找更有效的进程隐藏的技术。

进程隐藏的方法

1.基于API HOOK的进程隐藏技术
  API HOOK指的是通过特殊的编程手段截获WINDOWS系统调用的API函数,并将其丢弃或者进行替换。 通过API HOOK编程方法,截获系统遍历进程函数并对其进行替换,可以实现对任意进程的隐藏。

进程隐藏:通过HOOK函数ZwQuerySystemInfornation实现进程隐藏

2.基于DLL 的进程隐藏技术:远程注入Dll技术
  DLL文件没有程序逻辑,不能独立运行,由进程加载并调用,所以在进程列表中不会出现DLL文件。如果是一个以DLL形式存在的程序,通过某个已有进程进行加载, 即可实现程序的进程隐藏。
  在windows系统中, 每个进程都有自己的私有地址空间, 进程不能创建属于另一个进程的内存指针。而远程线程技术正是通过特殊的内核编程手段, 打破进程界限来访问另一进程的地址空间, 以达到对自身 进行隐藏的目的。
  远程线程注入DLL技术指的是通过在某进程中创建远程线程的方法进入该进程的内存空间, 然后在其内存空间中加载启动DLL程序。
3.基于远程线程注入代码的进程隐藏技术
  这种方法与远程线程注入 DLL 的原理一样,都是通过在某进程中创建远程线程来共享该进程的内存空间。
  所不同的是,远程线程注入代码通过直接拷贝程序代码到某进程的内存空间来达到注入的目的。因为程序代码存在于内存中, 不仅进程列表中无法检测,即使遍历进程加载的内存模块也无法找到被隐藏程序的踪迹。

下列是现在几种比较常用的方法:
进程伪装:通过修改指定进程PEB中的路径和命令行信息实现伪装。
傀儡进程:通过进程挂起,替换内存数据再恢复执行,从而实现创建傀儡进程
进程隐藏:通过HOOK函数ZwQuerySystemInfornation实现进程隐藏
DLL劫持:通过#pragma comment指令直接转发DLL导出函数或者通过LoadLibrary和GetProcAddress函数获取DLL导出函数并调用

参考:
《黑客技术Windows编程详解》
《Windows 木马的各种进程隐藏技术及应对策略》