小弟第一次发帖,编程新手,现在有一个亟待解决的问题希望哪个大哥能指点下现在在做一个系统安全软件,要求不允许用户在任务管理器里面关闭我的进程,注意:只要求任务管理器,其他方式不限制。以尝试过双进程保护以及CSDN里面找到的一个进程隐藏类,但效果都不是太好,双进程可能是编程的原因,有点太耗资源了,进程隐藏类又是有些机子可以实现隐藏,有些又不行,郁闷。现在正在尝试API HOOK方法,但不知道怎么用,源代码也已经找好了,但编译不成DLL(就是网上最多的那个),哪位大哥能帮帮我啊?刚注册的号,也不知道里面有多少分,嫌少了先记着,以后一定补上,先谢谢大家了!

解决方案 »

  1.   

    服务???
    还差得远.
    随随便便就杀掉了.
    API HOOK就更不用说了.
    要做就做驱动层的HOOK.
      

  2.   

    先谢谢二位了。
    做服务的方法一开始的时候就尝试过了,因为对WINDOWS还不太了解,我的软件在开机的时候必须跟服务器相连接,我注意到开机的时候本地连接要过一段时间才会出来,而本地连接没通是不能访问网络的,怕延迟太大所以就放弃了做服务程序。to:aaronwang81  对我的软件不用想的太复杂,我只是为了防止用户在任务管理器里面误操作杀死我的进程,如果用户是用高级的方法杀死我的进程,就认为是恶意用户,那就不归我应用层管了。我现在只是用最简单的方法,程序改名为WINLOGON.EXE应付着,正在研究API HOOK
      

  3.   

    to:raptormak16  双进程我用过了,我是用两个互斥量,两个进程互相检测互斥量,但不知道应该如何让一个进程停止执行一直等待,我把守护进程做成一检测到主程序存在就退出,但资源消耗好大啊
      

  4.   

    LZ对服务的理解有问题,服务是通过系统进程SVCHOST调用的DLL,任务管理器中看不到
      

  5.   

    貌似已经用API HOOK搞定了,嘿嘿,用了最简单的API HOOK,功能是已经实现了,先谢谢大家了,谁能告诉我怎么加分啊?也不知道有多少分
      

  6.   

    用API HOOK可以搞定!监视任务管理器的启动,启动就HOOK OpenProcess API,当OpenProcess调用的是你的保护的进程ID时,返回失败!
    这样任务管理器就杀不掉了!关键点:1.如何监视任务管理器的启动!通过添加注册表的方法实现 
           2.把保护的进程ID通知给HOOK模块!
      

  7.   

    在驱动里一直返回pending状态,怎么杀也不会杀掉了,哈哈
      

  8.   

    我知道很多人需要这个代码,呵呵,所以我就特意做好了,下载:
    http://blog.sina.com.cn/s/blog_4e5dcb9701000c4a.html
      

  9.   

    > TerminateProcess的参数不好用来判断是不是我们的进程。
    其实这一点并不难。
    BOOL WINAPI GetProcessName( IN HANDLE hProcess, OUT LPTSTR lpBuffer,
                               IN DWORD dwSize )
    {
        HANDLE h = NULL;
        if ( !DuplicateHandle( GetCurrentProcess(), hProcess,
            GetCurrentProcess(), &h,
            PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, 0 ) )
        {
            return FALSE;
        }    DWORD dw;
        HMODULE hModExe;
        BOOL bRet = FALSE;
        if ( EnumProcessModules( h, &hModExe, sizeof( HMODULE ), &dw ) )
        {
            TCHAR szFullPath[MAX_PATH];
            GetModuleFileNameEx( h, hModExe, szFullPath, MAX_PATH );
            lstrcpyn( lpBuffer, _tcsrchr( szFullPath, _T('\\') ) + 1, dwSize );
            bRet = TRUE;
        }
        CloseHandle( h );
        return bRet;
    }
      

  10.   

    WaitForSingleObject( HPROCESS )