C\C++各路高手以及操作系统专家请进来杀死这个进程

180it 2020-11-02 PM 1566℃ 0条

通常情况下编写一个程序,可以点击关闭按钮正常结束程序,也可以使用任务管理器结束任务,还可以使用taskkill等命令杀死进程,实在都不行也可以直接重启计算机。

    但是,这些方法真的都管用吗?我觉得不一定,今天晚上闲着没事,想写一个杀不死的程序。设计思路如为写三个程序ProcessMain、Process1和Process2,相互保护,具体如下:

1、按照平时的方法写一个程序ProcessMain实现你的功能;
2、再写一个程序Process1保护ProcessMain和Process2都不被杀掉;
3、再写一个程序Process2保护Process1不被杀掉;

Process1:

#include <windows.h>  
#include <tlhelp32.h> //进程快照函数头文件  
#include <stdio.h>  
 
bool getProcess(const char *procressName)               //此函数进程名不区分大小写  
{  

PROCESSENTRY32 pe32;//定义一个PROCESSENTRY32结构

pe32.dwSize = sizeof(pe32);//先设置它的大小
    char pName[MAX_PATH];                               //和PROCESSENTRY32结构体中的szExeFile字符数组保持一致,便于比较  
    strcpy(pName,procressName);                         //拷贝数组  
    CharLowerBuff(pName,MAX_PATH);                      //将名称转换为小写  
    PROCESSENTRY32 currentProcess;                      //存放快照进程信息的一个结构体  
    currentProcess.dwSize = sizeof(currentProcess);     //在使用这个结构之前,先设置它的大小  
    HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照  
 
    if (hProcess == INVALID_HANDLE_VALUE)  
    {  
        printf("CreateToolhelp32Snapshot()调用失败!\n");  
        return false;  
    }  
 
    bool bMore=Process32First(hProcess,&pe32);        //获取第一个进程信息  
    while(bMore)  
    {  
        CharLowerBuff(currentProcess.szExeFile,MAX_PATH);       //将进程名转换为小写  
        if (strcmp(currentProcess.szExeFile,pName)==0)          //比较是否存在此进程  
        {  
            CloseHandle(hProcess);                              //清除hProcess句柄  
            return true;  
        }  
        bMore=Process32Next(hProcess,&pe32);          //遍历下一个  
    }  
 
    CloseHandle(hProcess);  //清除hProcess句柄  
    return false;  
}  
 
int main()  
{  
 
    while(1)
    {
        if (!getProcess("calc.exe"))         //如果被保护的进程不存在(被杀死),则启动该进程
        {  
            system("start calc.exe");
        }  
        if (!getProcess("process2.exe"))    //如果保护进程process2不存在,则启动该进程
        {
            system("start process2.exe");
        }
        Sleep(10);                        //允许你睡一会,但不能“睡着”,要看好被保护的进程
    }
    system("pause");
    return 0;  
}  

Process2:

#include <windows.h>  
#include <tlhelp32.h> //进程快照函数头文件  
#include <stdio.h>  
 
bool getProcess(const char *procressName)               //此函数进程名不区分大小写  
{  

PROCESSENTRY32 pe32;//定义一个PROCESSENTRY32结构

pe32.dwSize = sizeof(pe32);//先设置它的大小
    char pName[MAX_PATH];                               //和PROCESSENTRY32结构体中的szExeFile字符数组保持一致,便于比较  
    strcpy(pName,procressName);                         //拷贝数组  
    CharLowerBuff(pName,MAX_PATH);                      //将名称转换为小写  
    PROCESSENTRY32 currentProcess;                      //存放快照进程信息的一个结构体  
    currentProcess.dwSize = sizeof(currentProcess);     //在使用这个结构之前,先设置它的大小  
    HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照  
 
    if (hProcess == INVALID_HANDLE_VALUE)  
    {  
        printf("CreateToolhelp32Snapshot()调用失败!\n");  
        return false;  
    }  
 
    bool bMore=Process32First(hProcess,&pe32);        //获取第一个进程信息  
    while(bMore)  
    {  
        CharLowerBuff(currentProcess.szExeFile,MAX_PATH);       //将进程名转换为小写  
        if (strcmp(currentProcess.szExeFile,pName)==0)          //比较是否存在此进程  
        {  
            CloseHandle(hProcess);                              //清除hProcess句柄  
            return true;  
        }  
        bMore=Process32Next(hProcess,&pe32);          //遍历下一个  
    }  
 
    CloseHandle(hProcess);  //清除hProcess句柄  
    return false;  
}  
 
int main()  
{  
 
    while(1)
    {
        if (!getProcess("process1.exe"))        //如果保护进程process1不存在,则启动该进程
        {
            system("start process1.exe");
        }
        Sleep(10);                                //允许睡0.01秒,不能擅自脱离防守
    }
    system("pause");
    return 0;  
}  
    以上代码可以保证用户在不关机、不注销和不重启的情况下杀不掉进程,甚至通过快速的批处理命令也无可奈何:

taskkill -im process1.exe
taskkill -im process2.exe

    如果,再修改注册表,把Process1或Process2设为开机启动项,呵呵!那么任务管理器、DOS命令、关机、重启都不管用了。是不是要重装系统或者通过引导盘将这几个文件删除掉再开机呢?欢迎大家评论!

来源:https://blog.csdn.net/lynch0571/article/details/32965169

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

C\C++各路高手以及操作系统专家请进来杀死这个进程