Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #96, ДЕКАБРЬ 2006 г.

Дилдо для антивируса

Михаил «Horrific» Фленов

Хакер, номер #096, стр. 096-126-2


Если программа работает с правами LocalSystem, то можно указать следующие права доступа:

- SC_MANAGER_CONNECT – разрешено подключение к менеджеру;

- SC_MANAGER_ENUMERATE_SERVICE – разрешено перечисление сервисов;

- SC_MANAGER_QUERY_LOCK_STATUS – разрешен запрос состояния;

- STANDARD_RIGHTS_READ – стандартные права чтения;

- SC_MANAGER_MODIFY_BOOT_CONFIG – разрешено изменение загрузки.

Если функция отработала успешно и смогла подключиться, то результатом будет хэндл выбранной базы данных SC-менеджера. Если подключение невозможно, то результатом будет ноль.

Итак, чтобы подключиться к менеджеру управления сервисами на локальном компьютере, достаточно написать следующий код:

var

servicemanager:Cardinal;

begin

servicemanager:=OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);

end;

Рекомендую проверять результат на корректность, потому что программа может не иметь прав для подключения с запрошенными привилегиями.

Подключение к сервису

К менеджеру мы подключились, теперь подрубимся к необходимому сервису. Для этого используется метод OpenService, который выглядит так:

function OpenService (

hSCManager: SC_HANDLE;

lpServiceName: PChar;

dwDesiredAccess: DWORD

): SC_HANDLE; stdcall;

Здесь у нас опять 3 параметра:

1. хэндл менеджера сервисов, который мы получили после выполнения функции OpenSCManager;

2. имя сервиса, которым нужно управлять;

3. права доступа.

В качестве прав доступа при подключении к сервису можно указывать:

- SERVICE_ALL_ACCESS – полный доступ;

- SERVICE_START – разрешить запуск сервисов;

- SERVICE_STOP – разрешить останавливать сервисы;

- SERVICE_PAUSE_CONTINUE – разрешить вгонять сервис в паузу и возобновлять выполнение.

Это основные права, которые тебе могут понадобиться.

Если выполнение прошло успешно, в качестве результата функция возвращает хэндл сервиса. Если произошла ошибка, то результатом будет ноль. Обязательно проверяй на ошибку, ведь сервис может и не быть установлен, а значит, его невозможно будет открыть и впоследствии управлять им. Получается, что по наличию сервиса можно определить, какой антивирус стоит на компьютере жертве. Если соответствующий сервис открылся, то его можно останавливать.

Управление

Ну что же, можно начинать управление. Делается это с помощью функции:

ControlService.

function ControlService(

hService: SC_HANDLE;

dwControl: DWORD;

var lpServiceStatus: TserviceStatus

): BOOL; stdcall;

И снова 3 магических параметра:

1. Хэндл сервиса, которым нужно управлять.

2. Действие, которое нужно выполнить. Основные указываемые здесь команды - это:

- SERVICE_CONTROL_STOP – остановить сервис;

- SERVICE_CONTROL_PAUSE – сделать паузу, скушать «Твикс»;

- SERVICE_CONTROL_CONTINUE – продолжить выполнение сервиса, который кушает «Твикс»;

Назад на стр. 096-126-1  Содержание  Вперед на стр. 096-126-3