Process Explorer隐藏进程 进程隐藏工具
转载
20145319 《网络渗透》免考—进程隐藏
概述
- 实验的主要目的是通过ap ihook技术对系统回调函数进行hook,拦截系统任务管理器对进程信息的获取,并做出相应修改,从而实现目标进程在任务管理器的列表中“隐藏”
- 主要知识如下:
实验内容
概念
- 之前,我们了解了如何做到让一个程序实现任务栏隐藏来做到在用户眼中“隐身”,但如果用户打开任务管理器就能发现后台有一个未知程序正在运行,因此我们需要进一步处理,实现进程隐藏
- 进程隐藏,分为真隐藏和伪隐藏
- 真隐藏:顾名思义就是真的让一个程序不以一个进程的方式运行,来实现真正意义上进程隐藏,
- 伪隐藏:则是一种障眼法,我们今天要做的,就是将任务管理器的列表中抹去目标程序的名字的戏法
伪隐藏(混淆隐藏)
- 通过读取系统中的关键进程路径,将恶意代码重命名为类似名称(例如kernel32.dll和kerne123.dll),并复制到同一路径下
- 此方法比较简单,原理容易理解,因此不做过多说明,重点讲述如何修改任务管理器进程列表来实现进程隐藏
伪隐藏(API HOOK)
- 在windows中,任务管理器也是通过遍历系统中的进程信息结构体链表来,枚举进程信息来实现进程管理的,因此,我们要做的就是通过API拦截技术来拦截该信息,提前将目标进程在待显示进程列表中删除,即可实现进程隐藏
- 首先是进程的遍历,无论在之前进程注入中获得相应Pid,还是现在进程列表,都是需要使用到进程遍历技术,进程遍历的方法有好几种,最常用的一种就是通过ToolHelp Service提供的API函数来创建系统快照,从快照中获取进程信息,核心函数为
CreateToolhelp32Snapshot函数
,Process32First函数
和Process32Next函数
- 以下为函数原型
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags, //系统快照要查看的信息类型
DWORD th32ProcessID //值0表示当前进程
);
BOOL WINAPI Process32First(
HANDLE hSnapshot, //CreateToolhelp32Snapshot函数创建的快照句柄
LPPROCESSENTRY32 lppe //进程结构体入口
);
BOOL WINAPI Process32Next(
HANDLE hSnapshot, //同上
LPPROCESSENTRY32 lppe //同上
);
- 首先我们通过
CreateToolhelp32Snapshot函数
创建系统快照句柄,Process32First函数
从名字上看我们就知道,这个函数能获取系统快照中的第一个进程信息,Process32Next
则是能获得下一个进程的句柄 - 通过这个简单的逻辑我们就可以遍历整个进程列表,代码如下
hshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
flag=Process32First(hshot,pinfo);
while(flag){
report=Process32Next(hProcess, pinfo);
}
- 第二种,就是通过psapi.dll提供的
EnumProcesses函数
、EnumProcessModules函数
实现 - 函数原型如下
BOOL EnumProcesses(
DWORD* pProcessIds,
DWORD cb,
DWORD* pBytesReturned
);
BOOL EnumProcessModules(
HANDLE hProcess,
HMODULE* lphModule,
DWORD cb,
LPDWORD lpcbNeeded
);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS , FALSE, processID);
if(NULL != hProcess)
{
HMODULE hMod;
DWORD cbNeeded;
if( EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded) )
{
GetModuleBaseName(hProcess, hMod, szProcessName,sizeof(szProcessName) / sizeof(TCHAR));
}
}
- 在第二种方法里,涉及到OpenProcess操作,进行提权操作,提权代码在博客API拦截(博客链接)中有展示
- 最后就是通过
ZwQuerySystemInformation()函数
和SystemHandleInformation标记
实现遍历,仍然有许多进程遍历的方法,不过大多数都只能在某些局限性环境下实现,在此就不一一演示了 - 其实上述所有的进程遍历的方法在根本上都与
ZwQuerySystemInformation()函数
有关,因此该函数也是我们hook的目标,我们仍旧采用inline hook的手法实现与我们自定义的MyZwQuerySystemInformation()函数
地址替换,具体原理参见API拦截技术 - 代码实现如下:
- 我们先运行窗口小程序hello5319.exe,将dll注入之后即发现进程列表中hello5319.exe已经消失了
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。