20 вистов и пуля ДРОЗДОВ АНДРЕЙ AKA SULVERUS Спецвыпуск: Хакер, номер #072, стр. 072-038-2 ServicesToRun = new ServiceBase[] { new Service1() }; Это и есть главная служебная функция. Теперь создадим класс, который будет выполнять функцию антивирусного сканнера. Для того чтобы показать больше возможностей .NET, мы будем размещать наш класс в отдельной сборке, которую будем докомпилировать на ходу (Just-in-Time) и работать с ней. Для операций с файлами и службой нашей сборке понадобятся пространства имен System.IO. Для работы с файлами в .NET Framework'e используется класс File. На мой взгляд, такой объектно-ориентированный подход довольно удобен, поскольку он заметно облегчает написание приложений и гораздо удобнее, чем Windows API. После создания проекта надо добавить в него ссылку на динамически загружаемую сборку, в которой будет лежать класс с функциями антивирусного сканнера (назовем ее «AVExample»), затем добавить в код строку use AVExample для того, чтобы получить доступ к классу. Если просто использовать функции из сборки, то служба будет автоматически завершаться, значит, нужно вызывать функции, используя потоки. Чтобы создать поток и запустить сканнер, нужно создать новый объект класса Thread и присвоить его параметру Target Void метод из нашей сборки (о самой сборке речь пойдет дальше). Весь этот код должен «висеть» на событии OnStart() для сервиса. Рассмотрим код: Создание потока с вызовом сборки using AVExample; //... protected override void OnStart(string[] args) { Thread ScanT = new Thread(new ThreadStart(AVExample.FileCheck.scan));//создаем и запускаем поток ScanT.IsBackground = true; ScanT.Name = "ConfScanner"; ScanT.Start(); } По многочисленным рекомендациям компании Майкрософт код методов не должен храниться в самой службе. Он должен находиться в сборках, поэтому в нашем случае сама служба - это, на данный момент разработки, пара строк кода (скоро строк станет гораздо больше). Приступим к созданию антивируса :). [антишпион своими руками.] В последнее время многие вирусы прописывают в hosts.conf свои данные для того чтобы запутать пользователей. Например, весной 2006 года по сети ходил вирус, который прописывал в host.conf ссылки на поисковики и переводил эти запросы на сайт хакера, вымогая таким образом кровно заработанные деньги у пользователей (одну мою подругу так развели на 100 WMZ: она заплатила за разблокировку яндекса, мейл.ру, гугла и рамблера, по 25 за каждый поисковик!). Я же, как и все читающие наш журнал, желаю пользователям исключительно добра и хочу их обезопасить их от Сетевых злоумышленников. Для защиты от такого рода нападения как раз хорошо использовать службу. Создаем сборку, в ней пишем класс AVExample. Алгоритм работы сканера прост: при установке программы получить дату последней записи в этот файл, сохранить ее, проверять файл host.conf на предмет изменений, в случае изменений заменить файл на рабочий host.conf. Единственной сложностью такого решения является то, что программа может столкнуться с вирусом и не сможет заменить файл (по причине того, что в этот момент файл будет использоваться другим процессом), поэтому после обнаружения программа должна прождать 60 секунд и затем переписать файл. Вот так будет выглядеть реализация этого алгоритма: |