请高人提示一下如何在windows2000\xp下如何让一个进程在任务管理器中隐藏,毕社要用,老师逼的很紧,帮帮偶吧~~~对了,是vc++.net平台!达人请入。

解决方案 »

  1.   

    http://www.nsfocus.net/index.php?act=magazine&do=view&mid=2150
      

  2.   

    用dll插入到系统服务进程中,如svchost等
      

  3.   

    各种进程信息是通过NtQuerySystemInformation获取的。        NTSTATUS NtQuerySystemInformation(
            IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
            IN OUT PVOID SystemInformation,
            IN ULONG SystemInformationLength,
            OUT PULONG ReturnLength OPTIONAL
        );    
        SystemInformationClass标明了我们想要获得的信息的类别,SystemInformation是一个指向函数输出缓冲区的指针,SystemInformationLength是这个缓冲区的长度,ReturnLength是写入字节的数目。
        对于正在运行的进程的枚举我们使用设置为SystemProcessesAndThreadsInformation的SystemInformationClass。    #define SystemInformationClass 5
        在SystemInformation的缓冲区中返回的数据结构是:    typedef struct _SYSTEM_PROCESSES { 
            ULONG NextEntryDelta;
            ULONG ThreadCount;
            ULONG Reserved1[6];
            LARGE_INTEGER CreateTime;
            LARGE_INTEGER UserTime;
            LARGE_INTEGER KernelTime;
            UNICODE_STRING ProcessName; 
            KPRIORITY BasePriority;
            ULONG ProcessId;
            ULONG InheritedFromProcessId;
            ULONG HandleCount;
            ULONG Reserved2[2];
            VM_COUNTERS VmCounters;
            IO_COUNTERS IoCounters;  // Windows 2000特有的
            SYSTEM_THREADS Threads[1];
        } SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
        隐藏进程和隐藏文件方法基本一样,就是改动我们需要隐藏的记录的前一个记录的NextEntryDelta。通常我们不用隐藏第一个记录,因为它是空闲进程(Idle process)。
      

  4.   

    对系统APITerminateProcess进程挂钩可以阻止进程被非法结束
      

  5.   

    比较简单的方法是,自己编写一个dll,然后调用NtQuerySystemInformation,把自己进程从进程链表中去掉旧ok了