Остановить сервис(неостанавливаемый)

Тема в разделе "WASM.WIN32", создана пользователем linke, 25 фев 2005.

  1. linke

    linke New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    11
    Есть сервисы которые при попытке их остановить вываливают ошибку 1052(типа сервис не поддерживает данную команду(SERVICE_STOPPED)).Как можно остановить такой сервис?
     
  2. linke

    linke New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    11
    Ну неужели никто не сталкивался?
     
  3. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    штатно - никак.
     
  4. linke

    linke New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    11
    Не штатно как?
     
  5. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
  6. linke

    linke New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    11
  7. Bill_TPOC

    Bill_TPOC New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2005
    Сообщения:
    31
    Сервис - это такой же процесс, но запущенный менеджером сервисов. Если убить все его потоки, то он сам и откинеться. Но это тема уже обсуждалась. И проблема решена Вашем покорным слугой!



    #include "stdafx.h"

    #include <tlhelp32.h>

    #include <winbase.h>

    #include <shellapi.h>



    DWORD GetProcess(LPSTR ExeName);

    bool SetDebugStatusForCurentProc();

    int APIENTRY WinMain(HINSTANCE hInstance,

    HINSTANCE hPrevInstance,

    LPSTR lpCmdLine,

    int nCmdShow)



    {

    SetDebugStatusForCurentProc();

    HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,NULL);

    THREADENTRY32 th;

    th.dwSize=sizeof(THREADENTRY32);

    if (!Thread32First(hSnap,&th)) return 0;

    while (Thread32Next(hSnap,&th))

    {

    if (th.th32OwnerProcessID==GetProcess("имя_сервиса.exe"))

    {

    BOOL d=PostThreadMessage(th.th32ThreadID,WM_QUIT,NULL,NULL);

    }

    }



    return 0;

    }



    DWORD GetProcess(LPSTR ExeName)

    {

    HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

    PROCESSENTRY32 pe32;

    pe32.dwSize=sizeof(PROCESSENTRY32);

    if (Process32First(hSnap,&pe32))

    while (Process32Next(hSnap,&pe32))

    {

    if (!lstrcmp(ExeName,pe32.szExeFile)) return pe32.th32ProcessID;

    }

    return 0;

    }



    bool SetDebugStatusForCurentProc()

    {

    HANDLE hToken;

    LUID DebugValue;

    TOKEN_PRIVILEGES tkp;



    if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES |

    TOKEN_QUERY,&hToken))

    {

    return false;

    }



    if (!LookupPrivilegeValue((LPSTR) NULL,SE_DEBUG_NAME,&DebugValue))

    {

    return false;

    }



    tkp.PrivilegeCount = 1;

    tkp.Privileges[0].Luid = DebugValue;

    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;



    AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES)

    NULL,(PDWORD) NULL);



    if (GetLastError() != ERROR_SUCCESS)

    {

    return false;

    }



    return true;

    }
     
  8. linke

    linke New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    11
    Может я чего то не догоняю, но привиденным выше исходником такой процесс не убить.В принципе как я понял его вообще невозможно прибить.
     
  9. Bill_TPOC

    Bill_TPOC New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2005
    Сообщения:
    31
    А ты попробуй с помощью Process Exporer by SysInternals убить все потоки процесса, тогда и поймешь можно его убить или нет. Но сервис Касперского, ранее неубиваемый, убивается ;)
     
  10. Bill_TPOC

    Bill_TPOC New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2005
    Сообщения:
    31
    Вот это как раз нештатный способ убития любого(!) приложения, по крайней мере которое работает в ring 3.
     
  11. linke

    linke New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    11
    Не про касперского я молчу его выносит за милую душу а вот процессы nortona что-то никак.
     
  12. Bill_TPOC

    Bill_TPOC New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2005
    Сообщения:
    31
    Специально для Вас - Linke, займусь этим
     
  13. VladimirZ

    VladimirZ New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2005
    Сообщения:
    3
    Посмотри топик "Как противостоять TerminateProcess" от Апр 23, 2004, пост RobinFood:



    > А ты уверен, что он пытается убить отладчик с

    > помощью TerminateProcess? Вариантов куча - начиная

    > от CreateRemoteThread->ExitProcess, продолжая

    > SetWindowsHookEx->ExitProcess, и заканчивая

    > DebugActiveProcess->DebugSetProcessKillOnExit,

    > не говоря уже о всяких

    > SuspendThread/WriteProcessMemory/SetThreadContext...
     
  14. Bill_TPOC

    Bill_TPOC New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2005
    Сообщения:
    31
    Да, в каком-то смысле ты прав. Процесс "run time virus scan" - rtvscan.exe в пакете Norton Antivirus не хочет убиваться, ведь так? Но он убивается! Но даже после его убития остается такая штучка которая делает что-то типа хуков некоторых функций. Эта штучка и есть драйвер режима ядра - navap.sys и Navapel.sys. Хоть я и не написал ничего полезного, но у этой истории есть продолжение...
     
  15. Bill_TPOC

    Bill_TPOC New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2005
    Сообщения:
    31
    Спасибо VladimirZ. Убить сам процесс можно. Здесь вопрос такой как Выгрузить в RunTime драйвер режима ядра, написать свой драйвер ring 0
     
  16. linke

    linke New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    11
    Да вообще интересно как стакими драйверами на уровне ялра работать.Bill_TPOC может доки какие есть интересные?
     
  17. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Bill_TPOC

    как Выгрузить в RunTime драйвер режима ядра, написать свой драйвер ring 0



    думаю никак .. раз SoftICE неможет то и мы не в силах :)



    Даже если логически подумать - как можно выгрузить то что выполнятеться на самаом высоком уровне и имеет контроль над каким нибудь устройствои или он многоуровневый драйвер .. как виндовс узнает случиться ли что нибудь если этт драйвер выгрузить - а вдруг от этого выгрузится не только он но и еще штук 10 . например вдуг юзеру захочется с дуру выгрузить драйвер файловой системы... думаю вы представляете последствия
     
  18. linke

    linke New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2005
    Сообщения:
    11
    Помледствия представляю.Это кстати не для юзеров.Я уже понял что проблему надо решать по другому.Так сказать в другом разрезе.А на уровне ядра выгрузка чего-нибудь не гарантирует стаьильную работу системы, а это в первую очереть и требуется чтобы выгрузить и не чего не упало.Но как выяснилось это скорее всего не возможно.
     
  19. je_

    je_ New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    143
    если плохо выгружать, то мо_но приткнуть:)

    или вообще jump-ик в свой дривер..итд-итп..

    тренируйте карроче извилины..
     
  20. Bill_TPOC

    Bill_TPOC New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2005
    Сообщения:
    31
    <font size=3>Прочитайте не слишком быстро...</font><!--size-->

    Что касается Norton Antivirus, то здесь есть одна возможность. Как правильно заметил linke проблему можно решать в другом разрезе. Процесс rtvscan.exe открывает udp-порт 2967 на локальном хосте. И этому не может помешать даже Agnitum Outpost. Из последнего предложения следует, что не rtvscan.exe открывает порт, а простите, как раз драйвер режима ядра. И через этот порт они общаются. Закрываем каким-либо образом порт и прыгаем от радости разнося заразу по всем органам компьютера. Они же должны как-то между собой связываться и чтобы не слишком напрягать извилины программеры из Symantec не стали сканировать например, таблицу процессов в операционной системе(как это провильно называется Вы узнаете в книге Руссиновича, а это мой слэнг). Просто решили использовать известные и что самой хорошее, документированные средства. Вот программеры поленились, и скоро вот на этом самом форуме Васма появиться сообщение - как полностью отключить Norton Antivirus в реальном времени и с помощью какого-то, казалось бы безправного приложения ring 3. Вот здесь как раз задевается вопрос о поиске уязвимостей в программах. Что бы этим хорошо владеть надо в тонкостях разбираться в деталях реализации конкретной операционной системы. Вот Руссинович я думая далеко бы пошел в этом направлении.

    С уважением, Bill/TPOC