mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-22 19:36:11 +00:00
500 lines
12 KiB
NASM
500 lines
12 KiB
NASM
; +---------------------------------------------------+ ;
|
|
; | Sample program DIARY for use with Magic Assembler | ;
|
|
; +---------------------------------------------------+ ;
|
|
mov ah,09
|
|
mov dx,offset(headtxt)
|
|
int 21
|
|
cmp byte [0081],0d
|
|
jne @1
|
|
mov dx,offset(syntax)
|
|
jmp error
|
|
@1 cmp byte [0082],'A'
|
|
je @2
|
|
cmp byte [0082],'a'
|
|
je @2
|
|
cmp byte [0082],'!'
|
|
jne @10
|
|
jmp @f
|
|
@10 cmp byte [0082],'D'
|
|
je @1a
|
|
cmp byte [0082],'d'
|
|
je @1a
|
|
jmps @1b
|
|
@1a jmp @1d
|
|
@1b cmp byte [0082],'O'
|
|
je @1e
|
|
cmp byte [0082],'o'
|
|
je @1e
|
|
jmps @29
|
|
@1e jmp @1f
|
|
@29 cmp byte [0082],'S'
|
|
je @2c
|
|
cmp byte [0082],'s'
|
|
je @2c
|
|
jmps @2d
|
|
@2c jmp @2e
|
|
@2d mov dx,offset(unpar)
|
|
jmp error
|
|
; Add item
|
|
@2 mov ah,3c
|
|
mov cx,0020
|
|
mov dx,offset(tempnam)
|
|
int 21
|
|
mov thandle,ax
|
|
mov ax,3d00
|
|
mov dx,offset(datanam)
|
|
int 21
|
|
jc @3
|
|
;Copy the data
|
|
mov bx,ax
|
|
@5 mov ah,3f
|
|
mov cx,0003
|
|
mov dx,offset(date)
|
|
int 21
|
|
cmp ax,cx
|
|
jne @4
|
|
mov ah,3f
|
|
mov cx,0001
|
|
mov dx,offset(tsize)
|
|
int 21
|
|
mov ah,3f
|
|
mov ch,0
|
|
mov cl,tsize
|
|
mov dx,offset(txt)
|
|
int 21
|
|
push bx
|
|
mov ah,40
|
|
mov bx,thandle
|
|
mov ch,00
|
|
mov cl,tsize
|
|
add cx,0004
|
|
mov dx,offset(date)
|
|
int 21
|
|
pop bx
|
|
jmps @5
|
|
;Close and delete DIARY.DAT
|
|
@4 mov ah,3e
|
|
int 21
|
|
mov ah,41
|
|
mov dx,offset(datanam)
|
|
int 21
|
|
;Ask for data
|
|
@3 mov ah,09
|
|
mov dx,offset(askdate)
|
|
int 21
|
|
@9 call readdat
|
|
mov ah,09
|
|
mov dx,offset(message)
|
|
int 21
|
|
mov tsize,00
|
|
mov di,offset(txt)
|
|
@e mov ah,00
|
|
int 16
|
|
cmp al,0d
|
|
je @c
|
|
cmp al,08
|
|
jne @d
|
|
cmp tsize,00
|
|
je @e
|
|
mov ah,09
|
|
mov dx,offset(bs)
|
|
int 21
|
|
dec di
|
|
dec tsize
|
|
jmps @e
|
|
@d inc tsize
|
|
stosb
|
|
mov ah,0e
|
|
mov bx,0007
|
|
int 10
|
|
jmps @e
|
|
|
|
;End of lineread
|
|
@c mov ah,40
|
|
mov bx,thandle
|
|
mov ch,00
|
|
mov cl,tsize
|
|
add cx,0004
|
|
mov dx,offset(date)
|
|
int 21
|
|
mov ah,3e
|
|
int 21
|
|
mov ah,56
|
|
mov dx,offset(tempnam)
|
|
mov di,offset(datanam)
|
|
int 21
|
|
int 20
|
|
;Look for warning
|
|
@f mov ah,2a
|
|
int 21
|
|
sub cx,076c
|
|
mov byte [offset(cdate)],dl
|
|
mov byte [offset(cdate)+1],dh
|
|
mov byte [offset(cdate)+2],cl
|
|
@1c mov ax,3d00
|
|
mov dx,offset(datanam)
|
|
int 21
|
|
jnc @11
|
|
mov dx,offset(datanf)
|
|
jmp error
|
|
@11 push ax
|
|
mov ah,3c
|
|
mov cx,0020
|
|
mov dx,offset(tempnam)
|
|
int 21
|
|
mov thandle,ax
|
|
pop ax
|
|
mov bx,ax
|
|
@19 mov ah,3f
|
|
mov cx,0003
|
|
mov dx,offset(date)
|
|
int 21
|
|
cmp ax,cx
|
|
jne @12
|
|
mov ah,3f
|
|
mov cx,0001
|
|
mov dx,offset(tsize)
|
|
int 21
|
|
mov ah,3f
|
|
mov ch,00
|
|
mov cl,tsize
|
|
mov dx,offset(txt)
|
|
int 21
|
|
mov si,offset(cdate)
|
|
mov di,offset(date)
|
|
mov cx,0003
|
|
@13 cmpsb
|
|
jne @14
|
|
loop @13
|
|
call delit
|
|
cmp al,01
|
|
jne @14
|
|
jmps @19
|
|
@14 push bx
|
|
mov ah,40
|
|
mov bx,thandle
|
|
mov ch,00
|
|
mov cl,tsize
|
|
add cx,0004
|
|
mov dx,offset(date)
|
|
int 21
|
|
pop bx
|
|
jmps @19
|
|
;End of file
|
|
@12 mov ah,3e
|
|
int 21
|
|
mov ah,41
|
|
mov dx,offset(datanam)
|
|
int 21
|
|
mov ah,3e
|
|
mov bx,thandle
|
|
int 21
|
|
mov ah,56
|
|
mov dx,offset(tempnam)
|
|
mov di,offset(datanam)
|
|
int 21
|
|
int 20
|
|
;Delete item
|
|
@1d mov ah,09
|
|
mov dx,offset(wdel)
|
|
int 21
|
|
call readdat
|
|
mov si,offset(date)
|
|
mov di,offset(cdate)
|
|
mov cx,0003
|
|
@3c movsb
|
|
loop @3c
|
|
jmp @1c
|
|
;Delete old dates
|
|
@1f mov ah,2a
|
|
int 21
|
|
mov bx,offset(cdate)
|
|
mov [offset(cdate)],dl
|
|
mov [offset(cdate)+1],dh
|
|
sub cx,076c
|
|
mov [offset(cdate)+2],cl
|
|
mov ax,3d00
|
|
mov dx,offset(datanam)
|
|
int 21
|
|
jnc @21
|
|
mov dx,offset(datanf)
|
|
jmp error
|
|
@21 push ax
|
|
mov ah,3c
|
|
mov cx,0020
|
|
mov dx,offset(tempnam)
|
|
int 21
|
|
mov thandle,ax
|
|
pop bx
|
|
@25 mov ah,3f
|
|
mov cx,0003
|
|
mov dx,offset(date)
|
|
int 21
|
|
cmp ax,cx
|
|
jne @22
|
|
mov ah,3f
|
|
mov cx,0001
|
|
mov dx,offset(tsize)
|
|
int 21
|
|
mov ah,3f
|
|
mov ch,00
|
|
mov cl,tsize
|
|
mov dx,offset(txt)
|
|
int 21
|
|
mov si,offset(date)+2
|
|
mov di,offset(cdate)+2
|
|
mov cx,0003
|
|
@23 std
|
|
cmpsb
|
|
cld
|
|
ja @20
|
|
jb @24
|
|
loop @23
|
|
@24 call delit
|
|
cmp al,01
|
|
je @25
|
|
;Still future
|
|
@20 push bx
|
|
mov ah,40
|
|
mov bx,thandle
|
|
mov ch,00
|
|
mov cl,tsize
|
|
add cx,0004
|
|
mov dx,offset(date)
|
|
int 21
|
|
pop bx
|
|
jmps @25
|
|
;End of file
|
|
@22 mov ah,3e
|
|
int 21
|
|
mov ah,3e
|
|
mov bx,thandle
|
|
int 21
|
|
mov ah,41
|
|
mov dx,offset(datanam)
|
|
int 21
|
|
mov ah,56
|
|
mov dx,offset(tempnam)
|
|
mov di,offset(datanam)
|
|
int 21
|
|
int 20
|
|
;Show dates
|
|
@2e mov ax,3d00
|
|
mov dx,offset(datanam)
|
|
int 21
|
|
jnc @2f
|
|
mov dx,offset(datanf)
|
|
jmp error
|
|
@2f mov bx,ax
|
|
@3b mov ah,3f
|
|
mov cx,0003
|
|
mov dx,offset(date)
|
|
int 21
|
|
cmp ax,cx
|
|
jne @30
|
|
mov ah,3f
|
|
mov cx,0001
|
|
mov dx,offset(tsize)
|
|
int 21
|
|
mov cl,tsize
|
|
mov ch,00
|
|
mov ah,3f
|
|
mov dx,offset(txt)
|
|
int 21
|
|
mov si,ax
|
|
mov byte [offset(txt)+si],'$'
|
|
mov al,date
|
|
call shownum
|
|
push bx
|
|
mov ah,09
|
|
mov dx,offset(slash)
|
|
int 21
|
|
mov al,[offset(date)+01]
|
|
call shownum
|
|
mov ah,09
|
|
mov dx,offset(slash)
|
|
int 21
|
|
mov al,[offset(date)+02]
|
|
call shownum
|
|
mov ah,09
|
|
mov dx,offset(space)
|
|
int 21
|
|
mov ah,09
|
|
mov dx,offset(txt)
|
|
int 21
|
|
mov ah,09
|
|
mov dx,offset(crlf)
|
|
int 21
|
|
pop bx
|
|
jmps @3b
|
|
@30 mov ah,3e
|
|
int 21
|
|
int 20
|
|
|
|
delit push bx
|
|
mov al,date
|
|
call shownum
|
|
mov ah,09
|
|
mov dx,offset(slash)
|
|
int 21
|
|
mov al,[offset(date)+01]
|
|
call shownum
|
|
mov ah,09
|
|
mov dx,offset(slash)
|
|
int 21
|
|
mov al,[offset(date)+02]
|
|
call shownum
|
|
mov ah,09
|
|
mov dx,offset(space)
|
|
int 21
|
|
mov bh,00
|
|
mov bl,tsize
|
|
mov byte [offset(txt)+bx],'$'
|
|
pop bx
|
|
mov ah,09
|
|
mov dx,offset(txt)
|
|
int 21
|
|
mov ah,09
|
|
mov dx,offset(delete)
|
|
int 21
|
|
call flag
|
|
push ax
|
|
mov ah,09
|
|
mov dx,offset(crlf)
|
|
int 21
|
|
pop ax
|
|
ret
|
|
|
|
error mov ah,09
|
|
int 21
|
|
int 20
|
|
|
|
flag push bx
|
|
@16 mov ah,00
|
|
int 16
|
|
mov ah,0e
|
|
mov bx,0007
|
|
int 10
|
|
cmp al,'Y'
|
|
je @15
|
|
cmp al,'y'
|
|
je @15
|
|
cmp al,'N'
|
|
je @17
|
|
cmp al,'n'
|
|
je @17
|
|
mov ah,09
|
|
mov dx,offset(bs)
|
|
int 21
|
|
jmps @16
|
|
@15 mov al,01
|
|
jmps @18
|
|
@17 mov al,00
|
|
@18 pop bx
|
|
ret
|
|
|
|
readdat mov di,offset(date)
|
|
@2a call readnum
|
|
cmp al,1f
|
|
jna @a
|
|
mov ah,09
|
|
mov dx,offset(backerr)
|
|
int 21
|
|
jmps @2a
|
|
@a stosb
|
|
mov ah,09
|
|
mov dx,offset(slash)
|
|
int 21
|
|
@2b call readnum
|
|
cmp al,0c
|
|
jna @8
|
|
mov ah,09
|
|
mov dx,offset(backerr)
|
|
int 21
|
|
jmps @2b
|
|
@8 stosb
|
|
mov ah,09
|
|
mov dx,offset(slash)
|
|
int 21
|
|
call readnum
|
|
stosb
|
|
mov ah,09
|
|
mov dx,offset(crlf)
|
|
int 21
|
|
ret
|
|
|
|
;AL=NUMBER
|
|
shownum push ax
|
|
push bx
|
|
mov ah,00
|
|
mov bl,0a
|
|
div bl
|
|
cmp al,00
|
|
je @31
|
|
push ax
|
|
mov ah,0e
|
|
add al,30
|
|
mov bx,0007
|
|
int 10
|
|
pop ax
|
|
@31 mov al,ah
|
|
add al,30
|
|
mov ah,0e
|
|
mov bx,0007
|
|
int 10
|
|
pop bx
|
|
pop ax
|
|
ret
|
|
|
|
readnum mov ah,00
|
|
@6 int 16
|
|
cmp al,30
|
|
jb @6
|
|
cmp al,39
|
|
ja @6
|
|
mov ah,0e
|
|
mov bx,0007
|
|
int 10
|
|
sub al,30
|
|
mov bl,0a
|
|
mul bl
|
|
mov bl,al
|
|
mov ah,00
|
|
@7 int 16
|
|
cmp al,30
|
|
jb @7
|
|
cmp al,39
|
|
ja @7
|
|
mov ah,0e
|
|
push bx
|
|
mov bx,0007
|
|
int 10
|
|
pop bx
|
|
sub al,30
|
|
add al,bl
|
|
ret
|
|
|
|
backerr db 07 08 08 '$'
|
|
bs db 08 20 08 '$'
|
|
crlf db 0a 0d '$'
|
|
datanam db 'DIARY.DAT' 00
|
|
datanf db 'DIARY.DAT not found' 0a 0d '$'
|
|
delete db 0a 0d 'Delete this entry? $'
|
|
askdate db 'Enter date (DD/MM/YY): $'
|
|
headtxt db 'Diary - Written by Bert Greevenbosch for Magic Software' 0a 0d
|
|
db 'Public Domain Version' 0a 0d '$'
|
|
message db 'Enter message to display on that date: $'
|
|
slash db '/$'
|
|
space db ' $'
|
|
syntax db 0a 0d 'Syntax: DIARY [A/D/O/S/!]' 0a 0a 0d 'A = Add' 0a 0d 'D = Delete' 0a 0d 'O = Delete all decayed dates' 0a 0d 'S = Show all dates' 0a 0d '! = Warn' 0a 0d '$'
|
|
tempnam db 'DIARY.TMP' 00
|
|
unpar db 'Unknown parameter' 0a 0d '$'
|
|
wdel db 'Enter date to delete from (DD/MM/YY): $'
|
|
-
|
|
cdate ds 3
|
|
thandle dw ?
|
|
;the record
|
|
date ds 3
|
|
tsize db ?
|
|
txt ds 100
|