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

安全基础
可以用于交换环境下SNIFFER的几种攻击技术手段
嗅探的时候,防火墙能发现吗?
wincap and sniffer(1)
wincap and sniffer(2)
客户端登录到Win 2000域
网络故障问答集萃
软件开发项目控制浅谈(1)
软件开发项目控制浅谈(2)
软件开发项目控制浅谈(3)
软件开发项目控制浅谈(4)
用Telnet快速收发电子邮件(1)
用Telnet快速收发电子邮件(2)
Windows XP系统启动提速专题
让Google长个好“记性”
恢复EXE文件关联补完版
真真假假的安全警告
网络安全应急三观
全力打造个人网络安全
系统自动启动程序之十大藏身之所
访问权限问题问答集锦

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-28   浏览: 134 ::
收藏到网摘: 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