网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
枚举本地-远程NT系统进程
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
ses; i++ )


     PrintProcessNameAndID( aProcesses[i] );


  return;


}


基于PSAPI,shotgun写了个比较完整的命令行下内存进程/模块查看器,可以显示内存中所有的进程及进程调用的所有模块文件(DLL),可以用来协助程序、DLL的调试,也可以用来查找DLL木马和后门。有兴趣的读者可以从http://www.patching.net/shotgun/ps.zip下载,压缩包包含C++源代码。





<<第二部分:调用ToolHelp API枚举本地系统进程>>


   在第一部分提到的PSAPI函数只能枚举NT系统的进程,在Windows9x环境下我们可以通过调用ToolHelp API函数来达到枚举系统进程的目的。M$的Windows NT开发小组因为不喜欢ToolHelp函数,所以没有将这些函数添加给Windows NT,所以他们开发了自己的Process Status函数,就是第一部分提到的PSAPI了。但是后来M$已经将ToolHelp函数添加给了Windows 2000。ToolHelp共有12个函数,通过调用这些函数可以方面的取得本地系统进程的详细信息,以下这个简单的例子只调用了三个函数,获取我们所需要系统进程名字和进程ID。程序如下:


/**********************************************************************


Module:ps.c


说明:调用ToolHelp函数枚举本地系统进程名和ID,Only for 9x/2000


**********************************************************************/


#include <windows.h>


#include <tlhelp32.h>


#include <stdio.h>


int main()


{


   HANDLE     hProcessSnap = NULL;


  PROCESSENTRY32 pe32   = {0};


  hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);


  if (hProcessSnap == (HANDLE)-1)


  {


     printf("\nCreateToolhelp32Snapshot() failed:%d",GetLastError());


    return 1;


  }


  pe32.dwSize = sizeof(PROCESSENTRY32);


   printf("\nProcessName     ProcessID");


  if (Process32First(hProcessSnap, &pe32))


  {


    do


    {


       printf("\n%-20s%d",pe32.szExeFile,pe32.th32ProcessID);


    }


    while (Process32Next(hProcessSnap, &pe32));


  }


  else


  {


     printf("\nProcess32Firstt() failed:%d",GetLastError());


  }


  CloseHandle (hProcessSnap);


  return 0;


}





<<第三部分:调用NTDLL.DLL中未公开API枚举本地系统进程>>


   第一部分和第二部分说的是调用MS公开的API来枚举系统进程,在NTDLL.DLL中其实有一个未公开API,也可以用来枚举系统进程。此方法是从别处看来的,我可没这本事自己发现哦,出处记不清楚了,好像是pwdump2 中的源代码中的一部分吧。


    OK!那个未公开API就是NtQuerySystemInformation,使用方法如下,以下代码是从pwdump2中修改了一点点而来的:


////////////////////////////////////////////////////////////////////////////////////////////////


#include <windows.h>


#include <stdio.h>


#include <stdlib.h>





typedef unsigned long NTSTATUS;





typedef unsigned short USHORT;


typedef unsigned long ULONG;


typedef unsigned long DWORD;


typedef long LONG;





typedef __int64 LONGLONG;





typedef struct {


  USHORT Length;


  USHORT MaxLen;


  USHORT *Buffer;


} UNICODE_STRING;





struct process_info {


  ULONG NextEntryDelta;


  ULONG ThreadCount;


  ULONG Reserved1;


  LARGE_INTEGER CreateTime;


  LARGE_INTEGER UserTime;


  LARGE_INTEGER KernelTime;


  UNICODE_STRING ProcessN
  • 上一篇资讯: 获得OnOK退出控制
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号