Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #72, НОЯБРЬ 2006 г.

20 вистов и пуля

ДРОЗДОВ АНДРЕЙ AKA SULVERUS

Спецвыпуск: Хакер, номер #072, стр. 072-038-3


Алгоритм охраны конфигурационного файла

public class FileSheck

{

public static void scan()

{

while (true) //создаем бесконечный цикл

{

string ProtectedDate = File.ReadAllText("C:\\test\\NormalDate.txt");

string scan = File.GetLastWriteTime("C:\\WINDOWS\\system32\\drivers\\etc\\hosts").ToString();

a:

if (scan != ProtectedDate) //проверяем

{

string time = DateTime.Now.Minute.ToString();

if (time != DateTime.Now.Minute.ToString())

{

File.Delete("C:\\WINDOWS\\system32\\drivers\\etc\\hosts");

File.Copy("C:\\test\\host.conf.protected", "C:\\WINDOWS\\system32\\drivers\\etc\\hosts"); //восстанавливаем рабочий файл

File.WriteAllText("C:\\test\\Alert.txt", "Hackers allert was refused successfully" + DateTime.Now.Hour + ":" + DateTime.Now.Minute);

else

{

goto a;

}

}

}

}

}

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

[безлопастный инсталлер.]

Если просто прописать в автозагрузку нашу службу, то она корректно работать не будет. Для служб есть свои ключи в реестре, однако с ними возникает много проблем, поскольку, если запускать службу с правами определенного пользователя, может оказаться, что вирус будет иметь больше прав, чем антивирус, или вирус просто запретит доступ. Поэтому сервис должен запускаться с правами системы Local System, это необходимо для того, чтобы иметь права на запись в конфигурационные файлы. Для создания грамотного инсталлера нам надо открыть проект с ранее созданной службой и добавить туда класс инсталлер. Смело жмем Project-> Add CLass и выбираем Installer Class. Тут начнется самое интересное: по умолчанию инсталлер прописывается методом InitializeComponent(), но в таком случае служба будет зарегистрирована с правами пользователя, а для антивируса этого мало, поэтому придется все прописывать руками. В связи с этим нам надо будет открыть исходндик компонента Installer и внести в метод InitializeComponent() коррективы. По умолчанию в этом методе написана одна строка, создающая компонент, а нам надо настроить его вручную. Для работы с инсталлером используются пространства имен System.ComponentModel, System.Configuration.Install и System.ServiceProcess. Далее нужно создать два объекта - ProcessInstaller и ServiceInstaller. Через них мы будем работать с настройками. Первым делом пропишем то, что служба должна запускаться с правами системы, там же можно поставить пароль на службу и вручную указать ее имя. Замечу, что чтобы во время инициализации службы не возникло ошибок, нужно прописывать все пути к классам, начиная от родительского пространства имен. Вот какой код получается:

Назад на стр. 072-038-2  Содержание  Вперед на стр. 072-038-4