Блочим Диспетчер Задач в Windows NT[Ваши предложения]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cheater_man, 4 Apr 2010.

  1. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    По имени запускаемой проги узнаем PID и KillProcess(PID). Это Возможно?
     
  2. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    PHP:
    bool TermProc(AnsiString ProcName)
    {
        
    HANDLE hpr NULL;
        
    HANDLE hProcessSnap NULL;
        
    PROCESSENTRY32 pe32;
        
    hProcessSnap CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS0);
        
    pe32.dwSize sizeof(pe32);
        if (
    Process32First(hProcessSnap, &pe32))
            do
                if(
    AnsiString(pe32.szExeFile) == ProcName)
                {
                    
    hpr OpenProcess(PROCESS_TERMINATE,FALSE,pe32.th32ProcessID);
                    
    TerminateProcess(hpr,0);
                    return 
    true;
                }
            while (
    Process32Next(hProcessSnap, &pe32));
        
    CloseHandle (hpr);
        
    CloseHandle (hProcessSnap);
        return 
    false;
    }
    P.S.: #include <Tlhelp32.h>
     
  3. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    а то http://www.wasm.ru/article.php?article=hiddndt
    если надо могу на delphi код дать... ща поищу давно давно делал

    Code:
    ///////////////////////////////////////////////////////////
    function ProcessTerminate(dwPID:Cardinal):Boolean;
    var
     hToken:THandle;
     SeDebugNameValue:Int64;
     tkp:TOKEN_PRIVILEGES;
     ReturnLength:Cardinal;
     hProcess:THandle;
    begin
     Result:=false;
     // Добавляем привилегию SeDebugPrivilege
     // Для начала получаем токен нашего процесса
     if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
      or TOKEN_QUERY, hToken ) then
        exit;
      // Получаем LUID привилегии
     if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue )
      then begin
       CloseHandle(hToken);
       exit;
      end;
     tkp.PrivilegeCount:= 1;
     tkp.Privileges[0].Luid := SeDebugNameValue;
     tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
     // Добавляем привилегию к нашему процессу
     AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength);
     if GetLastError()<> ERROR_SUCCESS  then exit;
     // Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем
     // завершить и системный процесс
     // Получаем дескриптор процесса для его завершения
     hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID);
     if hProcess =0  then exit;
      // Завершаем процесс
       if not TerminateProcess(hProcess, DWORD(-1))
        then exit;
     CloseHandle( hProcess );
     
     // Удаляем привилегию 
     tkp.Privileges[0].Attributes := 0; 
     AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);
     if GetLastError() <>  ERROR_SUCCESS
     then exit;
     Result:=true;
    end;
    
    ///////////////////////////////////////////////////////////
    
     
    _________________________
  4. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    SetWindowPos - интересная ф-ция ;) (только taskmng равноправны :) ) У меня wasm неробит! забанили походу :(
    Да а на счет PID по Имени процесса или файла реально узнать?
     
  5. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    мое предыдущее сообщение почитай...
     
  6. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Thanks. It is working example. ;)
     
  7. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Упс. А чтото вы все забыли один хороший способ. Связанный с приложениями отладчиками. В ключе
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe
    прописать параметр Debugger указывающий на пусть в несуществующей проге или к проге которая ничего не делает или к своей.
    т.е. смысл в том, что при старте taskmgr.exe автоматически запустится прога указанная в параметре Debugger. таким образом наша прога получит управленяи первой. А настоящий диспечер задач незапустится

    И главное - это будет работать всегда почти. именно такой метод юзает ProcessExplorerNT чтобы запускаться вместо стандартного диспечера задач
     
    #27 slesh, 4 Apr 2010
    Last edited: 4 Apr 2010
    1 person likes this.
  8. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    procedure DestroyTaskMgr;
    var
    hwnd:THandle;
    begin
    hwnd := FindWindow(0,'Диспетчер задач Windows');
    if hwnd = 0 then exit else
    SendMessage(hwnd,WM_SYSCOMMAND,SC_CLOSE,0);
    end;


    ЯП : Delphi

    Вот компромис.. Без запар и понятно как комнатные тапки...
     
  9. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    повтор, это уже показывал M_script_
     
  10. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    Всю тему не читал, так что сорри
     
  11. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 iGlass
    1) Если у меня не русская винда то пахать не будет. А делать поддержку для каждого языка - это тяжко
    2) нужно постоянно в таймере гонять это
    3) и главное - при юзанье любого альтернативного диспетчера задач, этот способ не будет работать
     
  12. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Интересно...
    И как же прописать ключ?
    Code:
    system("reg HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe А дальше как?"
    
    Да кстати slesh предложи вариант для скрывания процесса от taskmng :)
     
    #32 cheater_man, 5 Apr 2010
    Last edited: 5 Apr 2010
  13. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,310
    Reputations:
    327
    ищите процесс на который зарегана хоткей CtrlAltDel (вроде это кстати винлогон) хукайте обработчик и вот пожалуйста. еще кстати в реестре отрубается таскманагер, как в прочем и регедит и тд
     
    2 people like this.
  14. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 cheater_man а ты попробуй снчало открыть этот ключ, а потом сам поймешь

    Вот reg файл для примера:
    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe]
    "Debugger"="\"C:\\WINDOWS\\MYPROG.EXE\""
    
     
  15. _antony

    _antony Elder - Старейшина

    Joined:
    16 Jul 2008
    Messages:
    80
    Likes Received:
    43
    Reputations:
    0
    не все так просто)))
    http://wasm.ru/article.php?article=gui_subsystem

    Да при запуске он регистрирует эту комбинацию. И перехватить ее нельзя( обычными способами там защита стоит см. Руссиновича).
     
    #35 _antony, 5 Apr 2010
    Last edited: 5 Apr 2010
  16. Life7

    Life7 Banned

    Joined:
    14 Jun 2009
    Messages:
    150
    Likes Received:
    54
    Reputations:
    0
    а как включи, а то заблочили?
     
  17. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Удали эту ветку из реестра.
    Ага примерчик так ниче :)
    Прописал
    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe]
    "Debugger"="\"C:\\WINDOWS\\SYSTEM32\\cmd.exe\""
    
    [/QUOTE]
    Запускается cmd, но с именем taskmng.exe :)
    По идее если заблочить диспетчер, то уже от него необязательно скрывать процесс?
    И приведи нормальный пример скрытия екзешника от диспетчера, только не тот пример который из DelphiWorld :)
     
  18. stepashka_

    stepashka_ Мотоциклист

    Joined:
    9 Nov 2009
    Messages:
    1,022
    Likes Received:
    423
    Reputations:
    234
    cheater_man блокиратор пишеш?
    не забудь отключить остальные клавиши закрытия программы.
     
  19. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Я хз че пишу :D Что в голову приходит :D Банер + блокератор + кейлогер + еще что нибудь пока незнаю :D За одно вспомнить бейсиковский синтаксис, то наверное уже лет десять его невидел (пишу на PureBasic) :D
    Если надо потом когда допишу могу сорс выложить :)
     
    #39 cheater_man, 5 Apr 2010
    Last edited: 5 Apr 2010
  20. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,310
    Reputations:
    327
    Code:
    Немного теории
    
    Процесс Winlogon при загрузке создает окно "SAS window", которое регистрирует HOTKEY для Ctrl+Alt+Del (CAD) и Ctrl+Shift+Esc (CSE). Вот собственно и все.
    
    Перехват
    
    Для перехвата CAD (CSE) нам необходимо внедрить DLL в процесс Winlogon, сабклассить указанное окно, и обрабатывать сообщение WM_HOTKEY:
    
    
    // Новая оконная функция
    LRESULT WINAPI NewSASProc( HWND hSAS, UINT msg, WPARAM wParam, LPARAM lParam )
    {
        if( WM_HOTKEY == msg ){
             // Поймали HOTKEY CAD (CSE) - выводим сообщение на десктоп "Default" и затем выходим
             if( MAKELONG( MOD_CONTROL | MOD_ALT, VK_DELETE ) == lParam ){
                  MessageBoxEx( GetActiveWindow(), TEXT("Ctrl + Alt + Del"), 
                                                   TEXT("SAS Hook"), MB_DEFAULT_DESKTOP_ONLY, 0 );
                  return 0;
                 }
    
             if( MAKELONG( MOD_CONTROL | MOD_SHIFT, VK_ESCAPE ) == lParam ){
                  MessageBoxEx( GetActiveWindow(), TEXT("Ctrl + Shift + Esc"), 
                                                   TEXT("SAS Hook"), MB_DEFAULT_DESKTOP_ONLY, 0 );
                  return 0;
                 }
            }
    
        // Вызываем стандартный обработчик
        return CallWindowProc( g_OldSASProc, hSAS, msg, wParam, lParam );
    }
    Функция DllMain:
    
    BOOL WINAPI DllMain( HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad )
    {
        if( DLL_PROCESS_ATTACH == fdwReason ){
             // Находим окно
             g_hSASwnd = FindWindow( TEXT("SAS Window class"), TEXT("SAS window") );
    
             // Заменяем обработчик
             if( g_hSASwnd != NULL )
                  g_OldSASProc = (WNDPROC) SetWindowLong( g_hSASwnd, GWL_WNDPROC, (LONG) NewSASProc );
            }
    
        if( DLL_PROCESS_DETACH == fdwReason ){
             // Возвращаем обработчик
             if( g_hSASwnd != NULL )
                  SetWindowLong( g_hSASwnd, GWL_WNDPROC, (LONG) g_OldSASProc );
            }
    
        return TRUE;
    }
     
    
    =) мб уже не актуально - не проверял