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

安全基础
威胁同样巨大 基于Telnet协议的攻击
基础知识 XST攻击理论及手法讲解
黑客破解Email账号常用的三种方法
攻防技术:动态IP地址的捕获及其应用
踏雪无痕 浅析黑客避开检测的手段
黑客必学—开启肉鸡终端全攻略
黑客入侵实例 记对Discuz论坛的入侵
浅析无线入侵检测系统 的应用及优缺点
黑客种植木马新方法及防范策略
小规模DDoS(拒绝服务)用Freebsd+IPFW搞定
一次意外的入侵经历-黑冰防火墙溢出攻击
利用“http暗藏通道”大举攻破局域网
黑客如何利用Ms05002溢出找“肉鸡”
看我谋取特权 用漏洞提升计算机控制权限
互联网的巨大威胁 ICMP洪水攻击浅析
实例讲解 黑客入侵论坛各种手段大暴光
入侵技巧 通过“鼠洞”控制你的电脑
黑客攻击揭密-分析选定的网络攻击
打破常规 构造特殊字符进行渗透入侵
安全必知:黑客入侵无线网络常用手段

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


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