用DebugActiveProcess把你的程序作为调试器附加到目标进程上,然后你就可以知道所有线程的信息了(windows会自动为每一个已存在或新创建的线程给你发调试信息的。而且此时目标进程是完全停止运行的。你完全可以分析其线程内容(用GetThreadContext和ReadProcessMemory)对可疑线程用SetThreadContext把它的EIP指向ExitThread, 再调用ContinueDebugEvent就可以中止掉可疑线程了。

解决方案 »

  1.   

    枚举系统所有进程,可以得到进程名,呵呵,不过等你得到进程名,杀毒软件可能已经被杀了。所以这个工作必须要在程序启动之前来做,一般杀毒软件都有监控功能,所以只要发现这个进程中含有杀掉杀毒软件的特征码马上结束掉就可以了。如果杀毒软件没有检测到特征码的话,理论上应该也有防杀机制,可以防止恶意结束。 如果没有,就等着被杀吧。楼主要做一个保护杀软工具的话, 其实可以这样,双进程保护,如果发现杀毒软件不见了马上重启,或者来个ApiHook(OpenProcess),发现有人要结束杀软,则马上阻止他。 其他的方法,就是写个类似杀毒软件监控,来监控系统所有进程的启动,发现有杀掉杀软的特征码,那么马上结束他。顺便贴个源码(使用APIHook实现无法被结束的进程): http://waxb.blog.com.cn/archives/2007/APIHook5.shtml
      

  2.   

    不知道我的想法可行不可行,对线程运行机制还是不太熟悉,每次用icesword查看程序的线程都发现线程ID不相同,不知道怎么控制