20145319 《网络渗透》免考—进程隐藏
20145319 《网络渗透》免考—进程隐藏
概述
- 实验的主要目的是通过ap ihook技术对系统回调函数进行hook,拦截系统任务管理器对进程信息的获取,并做出相应修改,从而实现目标进程在任务管理器的列表中“隐藏”
- 主要知识如下:
- 注入技术
- api 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拦截技术 -
代码实现如下:
- dll代码
- 注入代码
-
我们先运行窗口小程序hello5319.exe,将dll注入之后即发现进程列表中hello5319.exe已经消失了
posted on 2017-06-18 12:39 20145319钟轲 阅读(254) 评论(0) 编辑 收藏 举报