如题

解决方案 »

  1.   

    我们首先应该让我们的程序能够隐身。双击Form,首先在FormCreate事件中添加可使木马在Win9x的“关闭程序”对话框中隐藏的代码。这看起来很神秘,其实说穿了不过是一种被称之为Service的后台进程,它可以运行在较高的优先级下,可以说是非常靠近系统核心的设备驱动程序中的那一种。因此,只要将我们的程序在进程数据库中用RegisterServiceProcess()函数注册成服务进程(Service Process)就可以了。不过该函数的声明在Borland预先打包的头文件中没有,那么我们只好自己来声明这个位于KERNEL32.DLL中的鸟函数了。  首先判断目标机的操作系统是Win9x还是WinNt:{
    DWORD dwVersion = GetVersion();
    // 得到操作系统的版本号
    if (dwVersion >= 0x80000000)
    // 操作系统是Win9x,不是WinNt
     { 
       typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);
        //定义RegisterServiceProcess()函数的原型
        HINSTANCE hDLL;
       LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;
       hDLL = LoadLibrary("KERNEL32");
       //加载RegisterServiceProcess()函数所在的动态链接库KERNEL32.DLL
       lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL,"RegisterServiceProcess");
        //得到RegisterServiceProcess()函数的地址
        lpRegisterServiceProcess(GetCurrentProcessId(),1);
       //执行RegisterServiceProcess()函数,隐藏本进程
       FreeLibrary(hDLL);
       //卸载动态链接库
     }
    }
      

  2.   

    上面的不是mfc的代码,不过道理是一样的
    其实就是,将我们的程序在进程数据库中用RegisterServiceProcess()函数注册成服务进程(Service Process)就可以了。
      

  3.   

    用过这个函数  但是不行  源码如下:typedef DWORD(_stdcall *FunctionPointer)(DWORD, DWORD);
    FunctionPointer regSerProcess;
    HINSTANCE pK = GetModuleHandle("kernel32.dll");
    if(pK)
    {
    regSerProcess = (FunctionPointer)GetProcAddress(pK, "RegisterServiceProcess");
    }
    else
    {
    AfxMessageBox("打不开dll文件");
    }
    if(regSerProcess)
    {
    regSerProcess(NULL, 1);
    AfxMessageBox("注册系统进程成功");
    }
    else
    {
    AfxMessageBox("注册系统进程失败");
    }
    结果是失败