C#保护进程不被结束(源代码)防任务管理器结束进程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#保护进程不被结束(源代码)防任务管理器结束进程
Posted on 2013-03-25 16:03 阅读(3173) 评论(3)
闲来⽆事,英语⼜学的太痛苦。

看到我妈妈电脑开起在,就坐上去看看新闻,听听⾳乐。

哎,突然间,⽼⽑病⼜烦了,想起原来⼀直有个编程的问题没有解决——禁⽌别⼈⽤任务管理器,结束⾃⼰的程序进程(.NET程序)。

带着这个问题,我开始Google,开始baidu,⼜开始编程了。

和原来的搜索结果⼀样,什么东西都是⼀筹莫展,得到的答案永远是:C#没有办法⾃⼰去禁⽌别⼈⽤任务管理器结束⾃⼰进程。

不过功夫不负有⼼⼈。

我还是找到⼀⼤堆的替代⽅法,可以让别⼈不结束⾃⼰进程的⽅法。

总结⽅法有:
1.把任务管理器程序给别⼈删除了,不让别⼈打开(妈呀,这个我觉得最不可取了,有点杀鸡取卵的味道,没有任务管理器,我是⽆法忍受的。

毕竟⼈家⽤户,购买了你产品,你总不可能把别⼈任务管理器给洗⽩了吧?)否决!
2.接下来这个⽐较温柔,通过C#内置的Process类,对任务管理器的进程进⾏扫描,如果检查到有taskmgr.exe的进程(任务管理器进程),就把这个进程结束了。

(虽然没有第⼀个来的恶劣,但是,⽤户还是不能使⽤任务管理器)否决!
3.写两个程序进⾏双保护。

这个想法是⽹上提的最多的思路,如果⼀个程序被结束了,另⼀个程序检测到这个程序不在了,就⽴即重新启动该程序,双双保护,互助互利(结果我尝试了⼀下,不可取,因为1,CPU使⽤率太⾼,⼀直在循环检测,计算机速度⽴即就下了。

我妈妈这个机⼦,P4的配置,1G内存,也来不起了。

⽹页也卡起了。

2,我写了⼀个第三⽅程序,以最快速率去结束这个两个进程,如果这两个进程为了节约CPU的使⽤率,⽽把扫描间隔时间隔的太开的话,⽴刻被我的程序洗⽩。

所以,理论上这种⽅法,肯定是会被洗⽩的)否决
4.技术含量⽐较⾼了,通过Windows的驱动机制,把⾃⼰给隐藏了(把⾃⼰变成驱动),然后隐藏到系统中运⾏,在任务管理器完全找不到,其实我多喜欢这种⽅式的,但是,这个程序⼀弄出来,瑞星,Google,Hotmail,360卫⼠,全部当成病毒查出来了,我当时眼流花都要流出来了。

他们都太不给⾯⼦,Google,Hotmail直接把我的附件删除了。

随便我压缩,分包压缩,都逃不过他们的法眼。

所以,我清楚的意识到,这种程序弄出来,在客户机器上,肯定是⽆法长久⽣存的。

毕竟⼀个堂堂正正的程序,⼲嘛要去隐藏呢?所以。

该条⽅案否决!
5.⽤第三⽅的VC++程序,辅助C#程序达到不让别⼈禁⽌C#进程的⽅法。

哎,弄了半天,这种⽅法,我认为最⾏之有效。

毕竟不得不承认,要搞Windows系统级的程序设计,C++是当之⽆愧的龙头⽼⼤,C#只是⼀个做⽹站级应⽤的能⼿。

不过,你发布⼀个程序给⽤户,⽤户看到那个任务管理器⾥⾯还有个其他程序在运作或者是看到你的安装包⾥⾯怎么还有其他程序名字,确实感觉太不专业,太不地道了。

话⼜说回来,这种辅助程序⼀般都要收费。

我下载的那个就要收费。

所以,最后,这个⽅案也否决了!
难道,C#真的就不能⾃⼰弄个什么名堂的东西出来,不被任务管理器结束吗?实际,我认为,C#是可以做到这⼀点的。

原因有2个。

1,C#是⽀持带*号这种指针的⽅式的。

也就是说,C#可以使⽤指针。

2,C#可以完全⽆障碍的调⽤Windows⾃⼰的API函数(虽然性能没有
VC++开发的好),调⽤第三⽅开发的COM组件,甚⾄调⽤USB插⼝接⼝相关信息(曾今做U盘杀毒的时候,⽤到过,不过主要还是结合API完成的,⼀个未公开的API函数R开头的忘记了)。

所以,为此,我抱着信⼼开始准备找第三⽅提供的动态链接库之类的东西,毕竟要⾃⼰写,C#还是有许多性能和调⽤⽅⾯的⿇烦问题要考虑,毕竟不是毕业设计,所以,能简单就简单,只要克服以上提到的5种⽅法的不⾜。

最后,功夫不负有⼼⼈,找了⼤半天,找到了⼀个叫Peter的⽜⼈,写了⼀个通过VC++程序调⽤VC++动态链接库,实现的VC++程序不被任务管理器结束的源代码。

幸亏源代码相当详尽(VC++动态链接库的源码,VC++应⽤程序源码),要不然,后⾯的活路,就没有办法做了。

于是我开始,慢慢,慢慢⾛上⾟苦的VC++代码分析上。

你们可能要问我⼲什么?我可以很坦然的告诉你,虽然我VC++能⼒确实不强,但是我要把VC++的代码,移植到C#上。

听起来,很不可思意,但是,我真的成功了。

最后,为了报答我的学校——成都电⼦机械⾼等专科学校和成都信息⼯程学院。

我把VC++应⽤程序调⽤代码,移植到.NET上,并且,为了调⽤⽅便,我做成了.NET可以识别的dll运⾏库。

只要按以下⽅式调⽤运⾏即可。

这个dll运⾏库可以保护⾃⼰进程,也可以通过设置保护其他进程,作为第三⽅动态链接库存在。

(很幸运,虽然这个第三⽅动态链接库我还是很花了些时间,但是绝对不收费,免费放送,提供C#⼯程源码下载!如果⼤家有兴趣也可以⼀起讨论⼀下,我的邮件是Email:k.liuxu@),⾄于那个⽜⼈的设计思路,其实,就是⽤系统函数挂钩,挂接了所有的系统函数消息。

没有直接分析任务管理器这些东西。

不过,在CMD命令控制台中,⽆法接受消息,所以,⽤命令控制台,是可以结束进程的。

不过,命令控制台,⼀般⽤户不会使⽤,可以直接把命令控制台删除,或者移植到程序内部调⽤,不准⽤户外部调⽤,就⾏了。

⾄于其他更⿇烦的东西,就有兴趣⼤家在慢慢聊吧。

前⾯分析VC++代码是⼀个艰苦的历程,简直是挥泪分析啊,眼睛都看肿了,才把VC++应⽤程序部分移植出来。

其实总结了⼀下,实际上还是因为⾃⼰学习不扎实,所以才看的恼⽕,对不起电⼦⾼专培养我的刘光会和杨勇⽼师,对不起信息⼯程学院的安俊秀和陈晓红⽼师。

不过最后弄出来了,还是⼀件好事情吧,也充分说明了C#还是可以搞⼀些基于系统级的调⽤和编程的。

也许在⼤鸟眼睛中,移植这种⼯作并不算什么,这种程序也许是⼩⼉科,不过,对于,刚刚毕业的我来说,还是⼀种不⼩的挑战。

由于时间有限,我只把前半部分的VC++应⽤程序端移植完成,在以后的时间中,等我把Dll部分抽象出来,我会做成.NET可以识别的dll发布出来。

如果还有时间,我就再来说说,我怎么分析的吧。

不过这个可能要说很久很久了,毕竟涵盖了5年我⼤学学习的所有基础知识,⼤到系统,⼩到函数指针,代理,枚举这些结构,内存存储空间等等。

好了废话不多说了。

现在主要看看怎么使⽤。

⾸先,我们必须具备两个DLL⽂件,⼀个是我⽤.NET程序⽣成的KProtectProcess.dll⽂件,这个⽂件可以直接放到开发环境中进⾏使⽤。

还有⼀个是我还没有编译出来的NKCore.dll⽂件(其实我移植了⼀半,但是⾥⾯设计很多系统关键字,我在C#中还没有找到很好的解决⽅案,所以正在研究),这个⽂件是C++的运⾏库,实际上核⼼也是这个⽂件。

1⾸先我们新建⽴⼀个⼯程。

如下:
2.按照如图,放置这些控件,以便我们操作
3.添加引⽤.NET可以识别的KProtectProcess.dll动态链接库(,J#.NET,VC++.NET都可以调⽤)右键项⽬,选择添加引⽤:
4.找到KProtectProcess.dll这个⽂件并添加(注意保持,KProtectProcess.dll⽂件和NKCore.dll⽂件在同⼀⽬录中)
5.点确定以后,你会看到⼯程中,多了⼀个程序集KProtectProcess.dll
6.双击,按钮进⼊代码的编写,(其中保护⾃⼰,停⽌保护⾃⼰,保护其他进程,停⽌保护其他进程按钮的名字分别是:button1,button2,button3,button4),具体调⽤代码编写如下(代码调⽤,已经简化的相当简单了):⾃⾝保护调⽤SelfProtection(),⾃⾝释放调⽤UnLoadProtection(),其他进程保护,⾸先调⽤ProtectProcessID赋值,然后调⽤ProtectProcess进⾏保护,如果不赋值,我会抛出⼀个异
常。

7. 所有⼯作都准备完毕就可以调试了。

其中以下演⽰怎么保护其他进程。

⽐如我们现在打开Windows计算器这个程序,计算器这个程序的进程名是calc.exe,所以,我们就找他的进程号PID.1764
现在只需要在程序的进程号中输⼊,1764,然后点保护,最后,你看⽤任务管理器是不是不能结束calc这个程序了?很简单吧?
结束语:
(1).NET程序原代码下载地址为(⼤⼩47KB):TestClose.rar (2)两个动态连接库⽂件(⼤⼩14KB):Dll.rar
(3).NET可识别的Dll我移植出来的.cs⽂件(7KB):KProcess.rar (4)VC++原始代码⽂件(⼤⼩10KB):vc.rar。

相关文档
最新文档