| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6896 人关注过本帖
标题:vb有没有办法写防止自身进程被杀程序
只看楼主 加入收藏
猪肉
Rank: 1
等 级:新手上路
帖 子:96
专家分:1
注 册:2007-3-8
收藏
 问题点数:0 回复次数:21 
vb有没有办法写防止自身进程被杀程序
vb有没有办法写防止自身进程被杀程序,防止别人在任务管理器结束进程。

[此贴子已经被作者于2007-6-14 12:58:33编辑过]

搜索更多相关主题的帖子: 进程 办法 
2007-06-14 12:58
猪肉
Rank: 1
等 级:新手上路
帖 子:96
专家分:1
注 册:2007-3-8
收藏
得分:0 
有没有人懂啊,像IceSword一样的进程保护。任务管理器杀不掉的
2007-06-14 20:10
猪肉
Rank: 1
等 级:新手上路
帖 子:96
专家分:1
注 册:2007-3-8
收藏
得分:0 

进程防杀原理(转载)

在WINDOWS操作系统下,当我们无法结束或者不知道怎样结束一个程序的时候,或者是懒得去找“退出”按钮的时候,通常会按“CTRL+ALT+DEL”呼出任务管理器,找到想结束的程序,点一下“结束任务”就了事了,呵呵,虽然有点粗鲁,但大多数情况下都很有效,不是吗?

设想一下,如果有这么一种软件,它所要做的工作就是对某个使用者在某台电脑上的活动作一定的限制,而又不能被使用者通过“结束任务”这种方式轻易地解除限制,那该怎么做?无非有这么三种方法:1.屏蔽“CTRL+ALT+DEL”这个热键的组合;2.让程序不出现在任务管理器的列表之中;3.让任务管理器无法杀掉这个任务。对于第一种方法,这样未免也太残酷了,用惯了“结束任务”这种方法的人会很不习惯的;对于第二种方法,在WINDOWS 9X下可以很轻易地使用注册服务进程的方法实现,但是对于WINDOWS NT架构的操作系统没有这个方法了,进程很难藏身,虽然仍然可以实现隐藏,但实现机制较为复杂;对于第三种方法,实现起来比较简单,我的作品:IPGate 网址过滤器 就是采用的这种方式防杀的,接下来我就来介绍这种方法。

任务管理器的“结束任务”实际上就是强制终止进程,它所使用的杀手锏是一个叫做TerminateProcess()的Win32 API函数,我们来看看它的定义:

BOOL TerminateProcess(
HANDLE hProcess; // 将被结束进程的句柄
UINT uExitCode; // 指定进程的退出码
);

看到这里,是不是觉得不必往下看都知道接下来要做什么:Hook TerminateProcess()函数,每次TerminateProcess()被调用的时候先判断企图结束的进程是否是我的进程,如果是的话就简单地返回一个错误码就可以了。真的是这么简单吗?先提出一个问题,如何根据hProcess判断它是否是我的进程的句柄?答案是:在我的进程当中先获得我的进程的句柄,然后通过进程间通讯机制传递给钩子函数,与hProcess进行比较不就行了?错!因为句柄是一个进程相关的值,不同进程中得到的我的进程的句柄的值在进程间进行比较是无意义的。

怎么办?我们来考察一下我的hProcess它是如何得到的。一个进程只有它的进程ID是独一无二的,操作系统通过进程ID来标识一个进程,当某个程序要对这个进程进行访问的话,它首先得用OpenProcess这个函数并传入要访问的进程ID来获得进程的句柄,来看看它的参数:

HANDLE OpenProcess(
DWORD dwDesiredAccess, // 希望获得的访问权限
BOOL bInheritHandle, // 指明是否希望所获得的句柄可以继承
DWORD dwProcessId // 要访问的进程ID
);

脉络渐渐显现:在调用TerminateProcess()之前,必先调用OpenProcess(),而OpenProcess()的参数表中的dwProcessId是在系统范围内唯一确定的。得出结论:要Hook的函数不是TerminateProcess()而是OpenProcess(),在每次调用OpenProcess()的时候,我们先检查dwProcessId是否为我的进程的ID(利用进程间通讯机制),如果是的话就简单地返回一个错误码就可以了,任务管理器拿不到我的进程的句柄,它如何结束我的进程呢?

至此,疑团全部揭开了。由Hook TerminateProcess()到Hook OpenProcess()的这个过程,体现了一个逆向思维的思想。其实我当初钻进了TerminateProcess()的死胡同里半天出也不来,但最终还是蹦出了灵感的火花,注意力转移到了OpenProcess()上面,实现了进程防杀。喜悦之余,将这心得体会拿出来与大家分享。



有没有人能写出一份VB的源码让我学习一下?

2007-06-14 21:01
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
你想做什么?

VB QQ群:47715789
2007-06-14 21:15
猪肉
Rank: 1
等 级:新手上路
帖 子:96
专家分:1
注 册:2007-3-8
收藏
得分:0 

我想写一个程序,不想隐藏进程的,只想让别人可以看到进程,但没法通过任务管理器结束。网上看见了很多这种程序,但是都是用DELPHI写的,不知道VB能不能实现。

2007-06-14 22:14
找不到服务器
Rank: 4
等 级:贵宾
威 望:12
帖 子:2937
专家分:1
注 册:2006-8-29
收藏
得分:0 

修改注册表,禁用任务管理器
http://zhidao.baidu.com/question/16622276.html


史上点击数最高的贴
http://bbs.bccn.net/thread-146005-1-1.html
2007-06-15 12:31
xiepeng
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-5-29
收藏
得分:0 
你这种方法是不行的,有隐藏自身进程的方法,你试试。

2007-06-15 18:17
猪肉
Rank: 1
等 级:新手上路
帖 子:96
专家分:1
注 册:2007-3-8
收藏
得分:0 
你说的我都懂,但我只想显示进程,不让人杀掉进程。隐藏进程没用的,别人在XP的GHOST版可以看到进程,2K3也能看到进程。任务管理器一定不能禁止。
2007-06-15 19:57
猪肉
Rank: 1
等 级:新手上路
帖 子:96
专家分:1
注 册:2007-3-8
收藏
得分:0 
有没有人懂的啊。大佬
2007-06-16 19:17
pkdos
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2006-11-14
收藏
得分:0 
用VB应该可以实现的吧。。。
2007-06-17 18:19
快速回复:vb有没有办法写防止自身进程被杀程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016231 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved