通过前述可知,枚举出系统中所有进程以及它们所打开的端口,这完成木马病毒的检测与清除工作的关键任务。要做到这一点方法有多种,但最简单的就是调用NTDLL.dll中的几个未公开API,如NtQuerySystemInfomation,NtQueryInfomationProcess。其中NtQuerySystemInfomation函数提供了一个简单的途径以获得系统中所有的HANDLE(句柄),只要找到系统中的SOCKET句柄,就可以通过这个句柄得到该进程所使用的端口号,这样就完成了进程与端口之间的关联,我们正是通过这种关联来判断一个进程是否为木马进程。NtQuerySystemInfomation函数的原型如下:
DWORD NtQuerySystemInformation( DWORD dwRecordType, PDWORD pdwHandleList, DWORD dwNumBytes, PDWORD pdwNumBytesRet );
其中,第一个参数dwRecordType用于指定所要查询的系统信息类型,为了查询系统HANDLE列表,此项参数要设置为16,此数值是来自网上资料,由于这个函数是未公开函数暂时无法得到更详细的资料,第二个参数是一个指针,用来返回系统句柄列表,在调用函数之前,必须为这个指针分配足够的内存空间,否则函数调用会出错;第三个参数是指定为HandleList预先所分配的内存空间大小,单位是byte;第四个参数是函数调用后返回的HandleList的大小,如果函数调用成功,返回值将是0,否则可以使用GetLastError()获得详细的错误代码。
一旦NtQuerySystemInformation函数调用成功,系统中所有的句柄将被存放在pdwHandleList所指向内存空间中,其中,pdwHandleList所指向的第一个32位数,是这个缓冲区所包含的句柄数量,之后是顺序排列的句柄指针pHandleInfo,指向的是HANDLEINFO结构。HANDLEINFO结构定义如下:
typedef struct _HandleInfo
{
USHORT dwPid;
USHORT CreatorBackTraceIndex;
利用未公开函数枚举进程及其关联的端口系列之(-)
最新推荐文章于 2020-06-15 09:23:25 发布
本文介绍了如何使用NtQuerySystemInformation函数枚举系统中的进程及其关联的端口,以进行木马检测。通过设置第一个参数为16来获取系统句柄列表,然后判断句柄类型来找出SOCKET句柄,从而获取进程和端口的关联。最后,通过DuplicateHandle转换句柄并使用getsockname等函数获取更多SOCKET信息。
摘要由CSDN通过智能技术生成