mdavis@pro-sol.cts.COM (Morgan Davis) (08/04/88)
Albeit against my wishes, I'm posting a new version of Wopfog after receiving
over twenty-some messages from around the net for requests to submit this.
Some asked to send it to APPLE2L, others asked not to. Some asked to send it
to their e-mail addresses, others asked to send it to the newsgroup. So,
because I know this works, and everyone who wants it will get it, and I'm
curious to see if the new BRL.MIL address is going to work, here goes.
If you don't like it, I have a list of 20-some addresses you can send hate
mail to.
--Morgan
UUCP: crash!pnet01!pro-sol!mdavis
ProLine: mdavis@pro-sol
ARPANet: crash!pnet01!pro-sol!mdavis@nosc.mil
InterNet: mdavis@pro-sol.cts.com
------------------( Incise with HeNe laser here )------------------------
100 REM ***********************************
110 REM * *
120 REM * CyberAIDS / Festering Hate *
130 REM * Vaccination Utility *
140 REM * by Morgan Davis *
150 REM * 29 Jul 88 *
160 REM * *
170 REM * This will detect and remove the *
180 REM * virus from SYS files. It will *
190 REM * also fix byte $1FF of Block 2. *
200 REM * *
210 REM ***********************************
220 :
230 DIM F$(52):D$ = CHR$ (4):BUF = 768:ADR = 8192
240 HOME : IF PEEK ( - 1101) = 6 THEN PRINT D$"PR#3"
250 LIST - 210
260 PRINT "*** NOTE ***": PRINT
270 PRINT "This program will detect and disinfect:"
280 PRINT
290 PRINT " o CyberAIDS"
300 PRINT " o Festering Hate"
310 PRINT
320 PRINT "Check (F)ile or (D)irectory: ";: GOSUB 810
330 FIL = A$ = "F":DIR = A$ = "D"
340 IF NOT (FIL OR DIR) THEN PRINT : END
350 PRINT : INPUT "Pathname: ";P$:F$(1) = P$:F = 1
360 IF P$ = "" THEN END
370 PRINT D$"VERIFY"P$: PRINT
380 IF FIL THEN 480
390 PRINT D$"PREFIX"P$
400 PRINT D$"OPEN"P$",TDIR": PRINT D$"READ"P$
410 INPUT A$: INPUT A$: INPUT A$:F = 0
420 INPUT A$: IF A$ = "" THEN 450
430 IF MID$ (A$,18,3) = "SYS" THEN F = F + 1:F$(F) = MID$ (A$,2,15)
440 GOTO 420
450 PRINT D$"CLOSE"
460 IF NOT F THEN PRINT P$" has no SYS files.": END
470 :
480 FOR I = 1 TO F
490 PRINT "Checking "F$(I)"...";
500 PRINT D$"BLOAD"F$(I)",TSYS,A"BUF",L3"
510 IF PEEK (BUF) < > 76 THEN 700
520 OFF = ( PEEK (BUF + 1) + PEEK (BUF + 2) * 256) - ADR - 6
530 X = BUF + 6
540 PRINT D$"BLOAD"F$(I)",TSYS,A"BUF",L114,b"OFF
550 ID = PEEK (X + 107):V$ = "an unknown virus"
560 IF ID = 199 THEN V$ = "Festering Hate"
570 IF ID = 16 THEN V$ = "CyberAIDS"
580 RESTORE
590 READ N: IF N = PEEK (X) THEN X = X + 1: GOTO 590
600 ON N > = 0 GOTO 700
610 PRINT "Infected by "V$"!" CHR$ (7): PRINT
620 PRINT "Completely heal this file? ";: GOSUB 810: PRINT
630 IF A$ < > "Y" THEN 710
640 PRINT "Working hard...";
650 PRINT D$"BLOAD"F$(I)",TSYS,A"ADR
660 FOR X = 0 TO 5: POKE ADR + X, PEEK (BUF + X): NEXT
670 PRINT D$"DELETE"F$(I): PRINT D$"CREATE"F$(I)",TSYS"
680 PRINT D$"BSAVE"F$(I)",TSYS,A"ADR",L"OFF
690 PRINT F$(I)" cured!": GOTO 710
700 PRINT "not infected."
710 NEXT
720 :
730 OP = 128: GOSUB 850: REM READ_BLOCK
740 I = PEEK (ADR + 511): IF NOT I THEN END
750 PRINT : PRINT "This volume has a fuse! (counter = "I"/30)"
760 PRINT "Extinguish it? ";: GOSUB 810
770 IF A$ < > "Y" THEN END
780 POKE ADR + 511,0:OP = 129: GOSUB 850: REM WRITE_BLOCK
790 PRINT "Done.": END
800 :
810 GET A$: IF A$ = CHR$ (27) THEN END
820 IF A$ > "_" THEN A$ = CHR$ ( ASC (A$) - 32)
830 PRINT A$: RETURN
840 :
850 POKE 768,32: POKE 769,0: POKE 770,191: REM JSR $BF00
860 POKE 771,OP: POKE 772,9: POKE 773,3: REM DB OP / DW $0309
870 POKE 774,133: POKE 775,0: POKE 776,96: REM STA $00 / RTS
880 POKE 777,3: POKE 778, PEEK (48944)
890 POKE 779,ADR - INT (ADR / 256) * 256: POKE 780, INT (ADR / 256)
900 POKE 781,2: POKE 782,0
910 CALL 768:I = PEEK (0): IF I THEN PRINT "MLI Err #"I" OP="OP: END
920 RETURN
930 :
940 DATA 32,88,255,186,189,0,1,141,1,3,202,189,0,1,141,0,3,238,0,3,-1
--------------( This is the end, and aren't you glad? )------------------