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? )------------------