清除守护进程程序

#include "windows.h"
#include "stdio.h"
#include "tlhelp32.h"

int main()
{
/////////////////////////////////////////////////////////////////////
// 程序首先要暂停病毒进程
/////////////////////////////////////////////////////////////////////
 printf("开始查杀病毒进程...");
 // 给系统内所有的进程拍个快照  
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
    if ( hSnap == INVALID_HANDLE_VALUE )  
 {  
        printf("进程快照创建失败!");  
        return 0;  
 }

 PROCESSENTRY32 Pe32 = { 0 };  
    // 在使用这个结构前,先设置它的大小  
    Pe32.dwSize = sizeof(PROCESSENTRY32);  
    // 遍历进程快照  
    BOOL bRet = Process32First(hSnap, &Pe32;); 
 // 通过循环来暂停病毒进程
 while ( bRet )
 {
     // 三个进程名称进行匹配
  if ( strcmp(Pe32.szExeFile, "severe.exe")==0 || strcmp(Pe32.szExeFile, "conime.exe")==0 || strcmp(Pe32.szExeFile, "tfidma.exe")==0)
  {
      // 创建线程快照
   HANDLE thSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, Pe32.th32ProcessID);  
            if ( thSnap == INVALID_HANDLE_VALUE )  
   {  
                printf("%s线程快照创建失败!",Pe32.szExeFile);  
                return 0;  
   }

            THREADENTRY32 Te32 = { 0 };  
            // 在使用这个结构前,先设置它的大小
   Te32.dwSize = sizeof(THREADENTRY32);  
            // 遍历线程快照
   BOOL tbRet = Thread32First(thSnap, &Te32;);  
            // 通过循环来暂停病毒进程中的所有线程
   while ( tbRet )  
   {  
                //判断线程所属  
       if ( Te32.th32OwnerProcessID == Pe32.th32ProcessID )  
                {                         
                    // 打开线程
     HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, Te32.th32ThreadID);  
                    // 暂停线程    
     SuspendThread(hThread);  
                    // 关闭线程句柄
                    CloseHandle(hThread);  
                }   
                tbRet = Thread32Next(thSnap, &Te32;);  
   }
   printf("%s进程暂停成功!
",Pe32.szExeFile);
   CloseHandle(thSnap);
  }
  bRet = Process32Next(hSnap, &Pe32;); 
 }
/////////////////////////////////////////////////////////////////////
// 程序接下来要结束病毒进程
///////////////////////////////////////////////////////////////////// 
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
    if ( hSnap == INVALID_HANDLE_VALUE )  
 {  
        printf("进程快照创建失败!
");  
        return 0;  
 }

    // 在使用这个结构前,先设置它的大小  
    Pe32.dwSize = sizeof(PROCESSENTRY32);  
    // 遍历进程快照  
    bRet = Process32First(hSnap, &Pe32;); 
 // 通过循环来结束病毒进程
 while ( bRet )
 {
     // 三个进程名称进行匹配
  if ( strcmp(Pe32.szExeFile, "severe.exe")==0 || strcmp(Pe32.szExeFile, "conime.exe")==0 || strcmp(Pe32.szExeFile, "tfidma.exe")==0)
  {
      HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, Pe32.th32ProcessID);       
            TerminateProcess(hProcess, 0); 
   printf("病毒进程%s成功结束!
",Pe32.szExeFile);
            CloseHandle(hProcess); 
  }
  bRet = Process32Next(hSnap, &Pe32;); 
 }

 printf("病毒进程清理完毕!
"); 
    CloseHandle(hSnap);
 getchar();
 return 0;
}
原文地址:https://www.cnblogs.com/zheh/p/5460614.html