用什么办法,可以在某些应用程序启动之前得到一个消息,得到这个程序名启动路径,把这程序禁止启动?不能用实时列出进程序列表,杀进程的方法,因为这可能会让系统性能降低,而且可能会死机

解决方案 »

  1.   

    在pe文件中嵌入第一段Image,在程序刚启动时执行直接退出操作
      

  2.   

    To: duiduiblues不能改可执行文件
      

  3.   

    如果这执行程序为窗口程序,可以使用全局消息HOOK,截获WM_CREATE消息,得到应用程序的窗口句柄,返回就可以禁止启动。具体可参照我以前回答的一个帖子。
      

  4.   

    我同意kingzai的。
    想想也只能用hook了,如果不实时检测的话,你又怎么能得到任何时候启动程序的句柄哪?
      

  5.   

    能不能用个hook,截取应用程序启动消息?
      

  6.   

    能不能用个hook,截取应用程序启动消息?
      

  7.   

    修改系统内存中创建进程的API地址值 指向我们自己的代码 我现在已经实现了这个功能 必须用hook 不然你就改系统核心文件了
      

  8.   

    To: iamwuge 能提供源程序吗?
      

  9.   

    To: iamwuge 能提供源程序吗?
      

  10.   

    To: iamwuge 能提供源程序吗?
      

  11.   

    //my code
    callwndHook=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)CallWndProc,hins,0);LRESULT __declspec(dllexport)__stdcall  CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    PCWPSTRUCT pcw=(PCWPSTRUCT) lParam;

    if(nCode>=0 && pcw && pcw->hwnd)
    {
    if(pcw->message==WM_CREATE)
    {
                            CString strApplication;
              CString strCommand=GetCommandLine();
              int nnum=strCommand.ReverseFind('\\');
              if(nnum!=-1)
             {
            strApplication=strCommand.Mid(nnum+1);
            strApplication.TrimRight();
            strApplication.TrimRight("\"");
              }
                       if(strApplication == "test.exe")
                            return 0;
                       }
              }
    }
      

  12.   

    //my code
    callwndHook=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)CallWndProc,hins,0);LRESULT __declspec(dllexport)__stdcall  CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    PCWPSTRUCT pcw=(PCWPSTRUCT) lParam;

    if(nCode>=0 && pcw && pcw->hwnd)
    {
    if(pcw->message==WM_CREATE)
    {
                            CString strApplication;
              CString strCommand=GetCommandLine();
              int nnum=strCommand.ReverseFind('\\');
              if(nnum!=-1)
             {
            strApplication=strCommand.Mid(nnum+1);
            strApplication.TrimRight();
            strApplication.TrimRight("\"");
              }
                       if(strApplication == "test.exe")
                            return 0;
                       }
              }
    }
      

  13.   

    //my code
    callwndHook=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)CallWndProc,hins,0);LRESULT __declspec(dllexport)__stdcall  CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    PCWPSTRUCT pcw=(PCWPSTRUCT) lParam;

    if(nCode>=0 && pcw && pcw->hwnd)
    {
    if(pcw->message==WM_CREATE)
    {
                            CString strApplication;
              CString strCommand=GetCommandLine();
              int nnum=strCommand.ReverseFind('\\');
              if(nnum!=-1)
             {
            strApplication=strCommand.Mid(nnum+1);
            strApplication.TrimRight();
            strApplication.TrimRight("\"");
              }
                       if(strApplication == "test.exe")
                            return 0;
                       }
              }
    }
      

  14.   

    我觉得 kingzai()的意见不错,用个SHELL钩子,拦到你的那个程序了,就把他干掉
      

  15.   

    //为win32 dll(不是MFC的)
    #include <windows.h>#pragma data_seg("shareddata")
    HINSTANCE g_hDll;
    HHOOK g_hShellHook;
    HWND g_hwndDial;
    #pragma data_seg()void Install();
    void Unstall();
    LRESULT CALLBACK ShellProc(int nCode,WPARAM wParam,LPARAM lParam);int WINAPI
    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {

    if (dwReason == DLL_PROCESS_ATTACH)
    {
    g_hDll=hInstance;

    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
    Unstall();
    }
    return 1;   // ok
    }void Install()
    {
    if (g_hShellHook==NULL)
    g_hShellHook=::SetWindowsHookEx(WH_SHELL,ShellProc,g_hDll,0);


    }void Unstall()
    {
    if (g_hShellHook)
    {
    ::UnhookWindowsHookEx(g_hShellHook);
    g_hShellHook=NULL;
    }

    }LRESULT CALLBACK ShellProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    TCHAR szTitle[MAX_PATH];
    int nCopyied;
            DWORD dwProcessId;
            HANDLE hProcess; if (nCode>=0)
    {

    if (nCode==HSHELL_WINDOWCREATED)
    {
    nCopyied=::GetWindowText((HWND)wParam,szTitle,sizeof(szTitle));
    szTitle[nCopyied]=0;
    if (lstrcmp(szTitle,"拨号连接")==0)
    {
                               g_hwndDial=(HWND)wParam;
                               ::GetWindowThreadProcessId(g_hwndDial,&dwProcessId);  
                               hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId);
                               TerminateProcess(hProcess,0);
                               CloseHandle(hProcess);                         

    }

    }
    }
    return ::CallNextHookEx(g_hShellHook,nCode,wParam,lParam);

    }// DEF
    LIBRARY "HackHook2"SECTIONS
     shareddata READ WRITE SHAREDEXPORTS
        ; Explicit exports can go here
    Install @1用时要先调用DLL的Install()
      

  16.   

    GetModuleBaseName可以得到进程的程序全路径,自己加进去
      

  17.   

    GetModuleBaseName可以得到进程的程序全路径,自己加进去
      

  18.   

    you don't use shell hook,because the window has created when use HSHELL_WINDOWCREATED param.you can try callwndproc.and hook WM_CREATE message.
    msdn:
    The WM_CREATE message is sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. (The message is sent before the function returns.) The window procedure of the new window receives this message after the window is created, but before the window becomes visible. 
      

  19.   

    就用Hook啊,得到了窗口的句柄,就可以知道进城、可执行文件的信息了,你想怎么样就怎么样。