论坛: 编程破解 标题: 关于进程监视[请教] 复制本贴地址    
作者: SysHu0teR [syshunter]    版主   登录
我想时刻监视系统进程。如果有指定的程序运行,则KILL掉;
枚举进程部分代码如下:
代码:

// 枚举进程,查找进程名完整路径是否等于str的,如是则返回进程ID,未找到返回0。
unsigned long strEnum(char *str)
{
HANDLE hProcess,hModule;
LPMODULEENTRY32 minfo=(LPMODULEENTRY32)malloc(sizeof(MODULEENTRY32));
LPPROCESSENTRY32 pinfo=(LPPROCESSENTRY32)malloc(sizeof(PROCESSENTRY32));
BOOL report;

hProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pinfo->dwSize=sizeof(PROCESSENTRY32);
report=Process32First(hProcess,pinfo);
while(report) {

hModule=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pinfo->th32ProcessID);
Module32First(hModule,minfo);

if(stricmp(str,minfo->szExePath)==0) {

return minfo->th32ProcessID;
}

report=Process32Next(hProcess,pinfo);

}

return 0;
}


然后在下面代码中无限制调用上面的enumproc()来达到监视目的:
[code]
FILE *fp;
char fline[256]={0};
unsigned long pid;
char list[256][256]={0};

// char s[2];

fp=fopen("d:\\list_tmp.txt","r");
for(int i=0;i<256&&!feof(fp);++i) {
fgets(list[i],255,fp);
list[i][strlen(list[i])-1]=0;
}
fclose(fp);

while(1) {

for(i=0;i<256 && *list[i]!=NULL;++i) {
pid=strEnum(list[i]);
if(pid!=0)
KillProc(pid);  //杀掉该pid;
}

}
[code]
既从list_tmp.txt读出要监视的程序完整路径,然后不停的在内存中找。好象比较愚笨,这样非常占用资源。
望大家给点更好的主意。

地主 发表时间: 06-01-20 14:40

回复: TomyChen [quest]   版主   登录
Ring 3
API HOOK
CreateProcessA/W
Ring 0
Hook ZwCreateProcess
可以参考 《进程监视器》一文 xfocus.net上好像有



B1层 发表时间: 06-01-21 21:20

回复: SysHu0teR [syshunter]   版主   登录
thanks,寻找中。。。

B2层 发表时间: 06-01-22 10:42

回复: SysHu0teR [syshunter]   版主   登录
问题解决,不过没用API HOOK,对我来说难度偏大。考虑到只是要监视窗口类程序,偷工减料用消息HOOK挂了WH_CBT,用了GetForegroundWindow等函数

B3层 发表时间: 06-01-24 18:11

回复: SysHu0teR [syshunter]   版主   登录
更正下,可以用WH_SHELL

B4层 发表时间: 06-01-24 21:04

回复: flynet [flynet]   论坛用户   登录
驱动上也可以解决的

B5层 发表时间: 06-02-03 15:36

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号