扫描系统进程

自己一直想做一个和windows资源管理器一样的程序,所以看了一下如何列举系统的所有进程。主要用到几个函数

CreateToolhelp32Snapshot,Process32First,Process32Next和一个结构体PROCESSENTRY32。其中用法可以看百度百科或MSDN

这里是代码

#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <stdio.h>
#include<iostream>
using namespace std;
int main()
{
	HANDLE hProcessSnap;
	HANDLE hProcess;
	PROCESSENTRY32 pe32;//用来存储进程的相关信息
	DWORD dwPriorityClass;//

	//建立进程快照
	hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0);//获得系统进程的快照

	if(hProcessSnap == INVALID_HANDLE_VALUE)
	{
		cout<<"快照创建失败"<<endl;
		return 0;
	}
	pe32.dwSize = sizeof(PROCESSENTRY32);
	if(Process32First( hProcessSnap, &pe32) == NULL)
	{
		cout<<"error"<<endl;
		CloseHandle(hProcessSnap);

	}
	int i = 0;
	do{
		cout<<"------------"<<i++<<"个进程------------------------"<<endl;
		//cout<<" name : "<<pe32.szExeFile<<endl;
		_tprintf( TEXT("\nPROCESS NAME: %s"), pe32.szExeFile );
		cout<<endl;
		cout<< "Process ID = "<< pe32.th32ProcessID <<endl;
		cout<< "Thread count = "<<pe32.cntThreads <<endl; 
		cout<< "Parent process ID = "<< pe32.th32ParentProcessID <<endl;; 
		cout<< "Priority base = "<< pe32.pcPriClassBase <<endl; 
	}while( Process32Next( hProcessSnap, &pe32) );
	return 0;

}


 

当然,上面程序是我从一个程序中摘出来的,这是源程序,忘了引用的哪了,如果作者看到,请告知引用地址。

这个程序实现了对系统进程,单个进程和线程的快照,主要还是拿几个函数,有时间的话做一个可视化的,和大家分享

#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <stdio.h>
// Forward declarations:
BOOL GetProcessList( );
BOOL ListProcessModules( DWORD dwPID );
BOOL ListProcessThreads( DWORD dwOwnerPID );
void printError( TCHAR* msg );
void main( )
{ 
	GetProcessList( );
}
BOOL GetProcessList( )
{ 
	HANDLE hProcessSnap; 
	HANDLE hProcess; 
	PROCESSENTRY32 pe32; //用来存放快照进程信息的一个结构体
	DWORD dwPriorityClass; // Take a snapshot of all processes in the system. 
	hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); 
	/*
	CreateToolhelp32Snapshot函数为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。   
	HANDLE WINAPI CreateToolhelp32Snapshot(   DWORD dwFlags, //用来指定“快照”中需要返回的对象,可以是TH32CS_SNAPPROCESS等   
	                              DWORD th32ProcessID //一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取当前进程快照时可以设为0   ); 
	*/
	if( hProcessSnap == INVALID_HANDLE_VALUE ) 
	{ 
		printError( TEXT("CreateToolhelp32Snapshot (of processes)") ); 
		return( FALSE ); 
	} // Set the size of the structure before using it. 
	pe32.dwSize = sizeof( PROCESSENTRY32 ); // Retrieve information about the first process, 
	// and exit if unsuccessful
	if( !Process32First( hProcessSnap, &pe32 ) ) 
	{ 
		printError( TEXT("Process32First") ); // show cause of failure 
		CloseHandle( hProcessSnap ); // clean the snapshot object 
		( FALSE ); 
	} // Now walk the snapshot of processes, and 
	// display information about each process in turn 
	do {
		printf( "\n\n=====================================================" ); 
		_tprintf( TEXT("\nPROCESS NAME: %s"), pe32.szExeFile ); 
		printf( "\n-----------------------------------------------------" ); // Retrieve the priority class. 
		dwPriorityClass = 0; 
		hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID ); 
		/*
		OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。  
		1.函数原型   HANDLE OpenProcess(   DWORD dwDesiredAccess, //渴望得到的访问权限(标志)   
		                                 BOOL bInheritHandle, // 是否继承句柄   
										 DWORD dwProcessId// 进程标示符   ); 
		*/
		if( hProcess == NULL )
			printError( TEXT("OpenProcess") ); 
		else { 
			dwPriorityClass = GetPriorityClass( hProcess ); 
			if( !dwPriorityClass ) 
				printError( TEXT("GetPriorityClass") ); 
			CloseHandle( hProcess ); 
		} 
		printf( "\n Process ID = 0x%08X", pe32.th32ProcessID ); 
		printf( "\n Thread count = %d", pe32.cntThreads ); 
		printf( "\n Parent process ID = 0x%08X", pe32.th32ParentProcessID ); 
		printf( "\n Priority base = %d", pe32.pcPriClassBase ); 
		if( dwPriorityClass ) 
			printf( "\n Priority class = %d", dwPriorityClass ); // List the modules and threads associated with this process 
		//ListProcessModules( pe32.th32ProcessID ); 
		//ListProcessThreads( pe32.th32ProcessID );
	} while( Process32Next( hProcessSnap, &pe32 ) );
	CloseHandle( hProcessSnap ); 
	return( TRUE );
}
BOOL ListProcessModules( DWORD dwPID )
{
	HANDLE hModuleSnap = INVALID_HANDLE_VALUE; 
	MODULEENTRY32 me32; // Take a snapshot of all modules in the specified process. 
	hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID );
	if( hModuleSnap == INVALID_HANDLE_VALUE ) 
	{
		printError( TEXT("CreateToolhelp32Snapshot (of modules)") ); 
		return( FALSE );
	} // Set the size of the structure before using it.
	me32.dwSize = sizeof( MODULEENTRY32 ); // Retrieve information about the first module, 
	// and exit if unsuccessful 
	if( !Module32First( hModuleSnap, &me32 ) ) 
	{
		printError( TEXT("Module32First") ); // show cause of failure 
		CloseHandle( hModuleSnap ); // clean the snapshot object 
		return( FALSE );
	} // Now walk the module list of the process, 
	// and display information about each module 
	do {
		_tprintf( TEXT("\n\n MODULE NAME: %s"), me32.szModule );
		_tprintf( TEXT("\n Executable = %s"), me32.szExePath );
		printf( "\n Process ID = 0x%08X", me32.th32ProcessID );
		printf( "\n Ref count (g) = 0x%04X", me32.GlblcntUsage );
		printf( "\n Ref count (p) = 0x%04X", me32.ProccntUsage );
		printf( "\n Base address = 0x%08X", (DWORD) me32.modBaseAddr ); 
		printf( "\n Base size = %d", me32.modBaseSize );
	} while( Module32Next( hModuleSnap, &me32 ) ); 
	CloseHandle( hModuleSnap ); 
	return( TRUE );
}
BOOL ListProcessThreads( DWORD dwOwnerPID ) 
{ 
	HANDLE hThreadSnap = INVALID_HANDLE_VALUE; 
	THREADENTRY32 te32; // Take a snapshot of all running threads 
	hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 ); 
	if( hThreadSnap == INVALID_HANDLE_VALUE ) 
		return( FALSE ); // Fill in the size of the structure before using it. 
	te32.dwSize = sizeof(THREADENTRY32 ); // Retrieve information about the first thread, 
	// and exit if unsuccessful 
	if( !Thread32First( hThreadSnap, &te32 ) ) 
	{
		printError( TEXT("Thread32First") ); // show cause of failure 
		CloseHandle( hThreadSnap ); // clean the snapshot object 
		return( FALSE );
	} // Now walk the thread list of the system,
	// and display information about each thread 
	// associated with the specified process 
	do { 
		if( te32.th32OwnerProcessID == dwOwnerPID ) 
		{ 
			printf( "\n\n THREAD ID = 0x%08X", te32.th32ThreadID ); 
			printf( "\n Base priority = %d", te32.tpBasePri );
			printf( "\n Delta priority = %d", te32.tpDeltaPri ); 
		} 
	} while( Thread32Next(hThreadSnap, &te32 ) ); 
	CloseHandle( hThreadSnap ); 
	return( TRUE );
}
void printError( TCHAR* msg )
{ 
	DWORD eNum; 
	TCHAR sysMsg[256]; 
	TCHAR* p; 
	eNum = GetLastError( ); 
	FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, eNum, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language 
		sysMsg,256, NULL ); // Trim the end of the line and terminate it with a null 
	p = sysMsg;
	while( ( *p > 31 ) || ( *p == 9 ) ) 
		++p; 
	do {
		*p-- = 0;
	} while( ( p >= sysMsg ) && ( ( *p == '.' ) || ( *p < 33 ) ) ); // Display the message 
	_tprintf( TEXT("\n WARNING: %s failed with error %d (%s)"), msg, eNum, sysMsg );
} 


 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Python的漏洞扫描系统是一个非常实用的毕业设计项目。该系统将利用Python语言和相关的库来开发一个功能强大的漏洞扫描工具,用于帮助用户检测和修复计算机系统中的安全漏洞。 首先,该系统将利用Python的网络编程库来实现对目标主机的端口扫描和服务识别,从而帮助用户快速了解目标系统上开放了哪些端口和运行了哪些服务。接着,利用Python的模块化和面向对象编程能力,可以轻松地实现对常见的漏洞扫描技术的集成,例如对目标系统的弱口令检测、SQL注入检测、XSS漏洞检测等。 除此之外,该系统还可以利用Python的多线程和多进程编程能力,实现并发扫描,从而提高漏洞扫描速度。通过与数据库的结合,可以将扫描结果进行存储和分析,为用户提供直观的报告和建议,帮助用户更好地理解系统的安全状况,并及时采取措施进行修复。 同时,基于Python漏洞扫描系统还可以具备用户友好的图形化界面,方便用户进行操作和管理。通过使用Python的GUI编程库,可以实现漏洞扫描任务的配置和管理,以及扫描结果的查看和分析功能,使得用户可以轻松进行漏洞扫描工作。 总而言之,基于Python的漏洞扫描系统的毕业设计项目将充分发挥Python语言的优势,实现一个功能强大、高效可靠的漏洞扫描工具,为用户提供更好的系统安全保障。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值