当前位置: 首页 > 图文教程 > 网络安全 > 安全基础 > 很巧妙的进程防杀方法

安全基础
用net start 可以启动肉鸡的命令(2)
用net start 可以启动肉鸡的命令(3)
用net start 可以启动肉鸡的命令(4)
DDOS攻击 如何判断是否遭到流量攻击
网络防“虫”手段和全局安全网络的应用
个人网络安全防卫手册(1)
个人网络安全防卫手册(2)
个人网络安全防卫手册(3)
个人网络安全防卫手册(4)
个人网络安全防卫手册(5)
个人网络安全防卫手册(6)
一位高手整理的IIS FAQ
使用Exchange 2003防御地址欺骗(1)
使用Exchange 2003防御地址欺骗(2)
RAdmin 服务端高级配置(1)
只防病毒不安全 网络还需防什么(1)
只防病毒不安全 网络还需防什么(2)
主动防御电脑病毒并非天方夜谭
用XPSP2防火墙打造最强护身甲(1)
用XPSP2防火墙打造最强护身甲(2)

安全基础 中的 很巧妙的进程防杀方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-28   浏览: 102 ::
收藏到网摘: n/a

刚刚学内核对象,想写个可以防杀的进程,但其他方法太高级,
本菜鸟不感高攀,想了几天,想到一个很本的办法,不正确的
方还请高手指点一下.
程序运行两个事例,每个实例互相监视另外的实例是否存在,
如果不存在,就运行一个.
代码:
// test_process.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "tchar.h"
#include "iostream.h"
#include "windows.h"

LPCTSTR lpszMutex1 = _T("mutex1");
LPCTSTR lpszMutex2 = _T("mutex2");

DWORD WINAPI Thread1(LPARAM lParam);
DWORD WINAPI Thread2(LPARAM lParam);

int main(int argc, char* argv[])
{
    HANDLE hMutex1 = CreateMutex(NULL, FALSE, lpszMutex1);
    if (hMutex1 != NULL)
    if (GetLastError() == ERROR_ALREADY_EXISTS)
    {
        CloseHandle(hMutex1);
        cout << lpszMutex1 << " already exist." << endl;
        HANDLE hMutex2 = CreateMutex(NULL, FALSE, lpszMutex2);
        if (hMutex2 != NULL)
        if (GetLastError() == ERROR_ALREADY_EXISTS)
        {
            cout << lpszMutex2 << " already exist." << endl;
            return 1;
        }
    }
    DWORD dwThreadId;
    HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&dwThreadId);
    CloseHandle(hThread);
    while (1)
    Sleep(1);
    return 0;
}
DWORD WINAPI Thread1(LPARAM lParam)
{
    HANDLE hMutex;
    while (1)
    {
        hMutex = OpenMutex(MUTEX_ALL_ACCESS, TRUE, lpszMutex1);
        if (! hMutex)
        {
            STARTUPINFO si = { sizeof STARTUPINFO };
            PROCESS_INFORMATION pi;
            TCHAR szBuf[MAX_PATH];
            GetModuleFileName(GetModuleHandle(NULL), szBuf, MAX_PATH);
            CreateProcess(szBuf, NULL, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
            CloseHandle(pi.hThread);
            CloseHandle(pi.hProcess);
        }
        CloseHandle(hMutex);
        hMutex = OpenMutex(MUTEX_ALL_ACCESS, TRUE, lpszMutex2);
        if (! hMutex)
        {
            cout << "mutex 2 created." << endl;
            STARTUPINFO si = { sizeof STARTUPINFO };
            PROCESS_INFORMATION pi;
            TCHAR szBuf[MAX_PATH];
            GetModuleFileName(GetModuleHandle(NULL