如何防杀进程?(100分)

  • 主题发起人 主题发起人 飘叶
  • 开始时间 开始时间

飘叶

Unregistered / Unconfirmed
GUEST, unregistred user!
我找到一篇文章,谁可以提供一个完整例子:<br>===========<br>&nbsp; &nbsp; 在WINDOWS操作系统下,当我们无法结束或者不知道怎样结束一个程序的时候,或者是懒得去找“退出”按钮的时候,通常会按“CTRL+ALT+DEL”呼出任务管理器,找到想结束的程序,点一下“结束任务”就了事了,呵呵,虽然有点粗鲁,但大多数情况下都很有效,不是吗?<br><br>&nbsp; &nbsp; 设想一下,如果有这么一种软件,它所要做的工作就是对某个使用者在某台电脑上的活动作一定的限制,而又不能被使用者通过“结束任务”这种方式轻易地解除限制,那该怎么做?无非有这么三种方法:1.屏蔽“CTRL+ALT+DEL”这个热键的组合;2.让程序不出现在任务管理器的列表之中;3.让任务管理器无法杀掉这个任务。对于第一种方法,这样未免也太残酷了,用惯了“结束任务”这种方法的人会很不习惯的;对于第二种方法,在WINDOWS 9X下可以很轻易地使用注册服务进程的方法实现,但是对于WINDOWS NT架构的操作系统没有这个方法了,进程很难藏身,虽然仍然可以实现隐藏,但实现机制较为复杂;对于第三种方法,实现起来比较简单,我的作品:IPGate 网址过滤器 就是采用的这种方式防杀的,接下来我就来介绍这种方法。<br><br>&nbsp; &nbsp; 任务管理器的“结束任务”实际上就是强制终止进程,它所使用的杀手锏是一个叫做TerminateProcess()的Win32 API函数,我们来看看它的定义:<br><br>BOOL TerminateProcess(<br>&nbsp; HANDLE &nbsp; &nbsp; &nbsp;hProcess; // 将被结束进程的句柄<br>&nbsp; UINT &nbsp; &nbsp; &nbsp; &nbsp;uExitCode; // 指定进程的退出码<br>);<br><br>&nbsp; &nbsp; 看到这里,是不是觉得不必往下看都知道接下来要做什么:Hook TerminateProcess()函数,每次TerminateProcess()被调用的时候先判断企图结束的进程是否是我的进程,如果是的话就简单地返回一个错误码就可以了。真的是这么简单吗?先提出一个问题,如何根据hProcess判断它是否是我的进程的句柄?答案是:在我的进程当中先获得我的进程的句柄,然后通过进程间通讯机制传递给钩子函数,与hProcess进行比较不就行了?错!因为句柄是一个进程相关的值,不同进程中得到的我的进程的句柄的值在进程间进行比较是无意义的。<br><br>&nbsp; &nbsp; 怎么办?我们来考察一下我的hProcess它是如何得到的。一个进程只有它的进程ID是独一无二的,操作系统通过进程ID来标识一个进程,当某个程序要对这个进程进行访问的话,它首先得用OpenProcess这个函数并传入要访问的进程ID来获得进程的句柄,来看看它的参数:<br><br>HANDLE OpenProcess(<br>DWORD &nbsp; &nbsp; &nbsp;dwDesiredAccess, // 希望获得的访问权限<br>BOOL &nbsp; &nbsp; &nbsp; bInheritHandle, // 指明是否希望所获得的句柄可以继承<br>DWORD &nbsp; &nbsp; &nbsp;dwProcessId // 要访问的进程ID<br>);<br><br>&nbsp; &nbsp; 脉络渐渐显现:在调用TerminateProcess()之前,必先调用OpenProcess(),而OpenProcess()的参数表中的dwProcessId是在系统范围内唯一确定的。得出结论:要Hook的函数不是TerminateProcess()而是OpenProcess(),在每次调用OpenProcess()的时候,我们先检查dwProcessId是否为我的进程的ID(利用进程间通讯机制),如果是的话就简单地返回一个错误码就可以了,任务管理器拿不到我的进程的句柄,它如何结束我的进程呢?<br><br>&nbsp; &nbsp; 至此,疑团全部揭开了。由Hook TerminateProcess()到Hook OpenProcess()的这个过程,体现了一个逆向思维的思想。其实我当初钻进了TerminateProcess()的死胡同里半天出也不来,但最终还是蹦出了灵感的火花,注意力转移到了OpenProcess()上面,实现了进程防杀。喜悦之余,将这心得体会拿出来与大家分享。<br><br>
 
Hook api,着帖子DFW里很早的时候过一帖,
 
一直对hook模模糊糊 当然也没有用过 可能以后会用的着 有没有高手讲一下!!
 
问一下, 那个飘叶千夫指是不是你做的?
 
Task2003 kill you!
 
可不可以在进程结束前自动重开一个进程?
 
http://www.138soft.com/JingTaoProcess.zip
 
楼上的,又来卖菜喽!
 
这个是调用老外的写的一个DLL实现的.DLL代码可以搜索一下.<br>下班前找到的.<br>代码自己找找<br>明天又是星期天,双休,所以自己找找
 
爱元元的哥哥,:我日你娘:)
 
飘叶兄对RDP有研究否?<br>刚翻译了一个UNIX下的代码为DELPHI的<br>但是它的功能不全<br>有没有这方面的资料?<br>下次回茂名有机会找你聊聊,<br>大家仅几公里的距离<br>
 
http://www.internals.com/utilities/winnt/stickyapp32/StickyApp32.zip<br>我的VC6.0需要修改几个入口参数,否则无法编译.你自己看看吧.
 
jingtao,你是陈经韬吧,有机会来聊聊<br>你说的RDP是指3389端口使用的远程桌面协议漏洞吧?所知也甚少<br>http://www.138soft.com/JingTaoProcess.zip<br>中的程序虽然能防PrcView.exe,但还是防止不了“柳叶擦眼”杀进程。<br>刚收到上面文章作者阿卓大哥寄来的源程序,还未看懂
 
接受答案了.
 
jingtao,你那文件下载不了,能不能发一份给我呢?<br>谢谢,我的E-mail: richmy@163.net
 
后退
顶部