NEW 100REM This program detects ProDOS 8 SYS files 101REM that have been infected with the 102REM viruses known as: 105REM * CyberAIDS 106REM * Festering Hate 120REM 121REM If you find an infected program in your 122REM library, the safest thing to do is to 123REM delete it and replace it with an 124REM uninfected back up. 130REM 131REM Written by Tom Weishaar, July 1988 132REM Inspiration by Dennis Doms and Eric Mueller 133REM 900D$=CHR$(4) 910DIMF$(300,1) 1000TEXT:HOME:?CHR$(21) 1001INVERSE 1002?": APPLE II VIRUS SCANNER: V 1.0 :" 1003NORMAL 1004? 1005?" COPYRIGHT 1988 BY" 1006?" TOM WEISHAAR, OPEN-APPLE/GENIE" 1007? 1008?"FOR THE LATEST VERSION OF THIS PROGRAM," 1009?"CHECK OUT CAT 40 IN GENIE'S A2 LIBRARY." 1010? 1011?"FREEWARE: MAY BE COPIED AND DISTRIBUTED" 1012?" AS LONG AS NO MODIFICATIONS ARE MADE." 1013? 1014?" PRESS ALONE TO QUIT." 1015?:?:? 1020REM get slot 1021?"SCAN DISK DEVICE IN WHICH SLOT? "; 1022INPUT"";S$:IFS$=""THEN?D$;"BYE" 1023S=VAL(S$): 1024IFS<1ORS>7THEN?CHR$(7):GOTO1020 1040REM get drive 1041?" IN WHICH DRIVE? "; 1042INPUT"";DR$:IFDR$=""THEN1020 1043D=VAL(DR$): 1044IFD<1ORD>2THEN?CHR$(7):GOTO1040 1100REM start disk scan 1110ONERRGOTO1190 1120?D$;"PREFIX,S";S;",D";D 1121?D$;"PREFIX" 1122INPUTF$:GOSUB4000:F$(0,0)=F$:F$(0,1)="DIR" 1123POKE216,0 1130?:?"CHECKING ";F$(0,0) 1131?"THIS MAY TAKE AWHILE....":? 1140?D$;"BLOAD ";F$(0,0);",TDIR,A$300,B511,L1" 1141IFPEEK(768)=0THEN1150 1142?"CAUTION: VIRUS COUNTER ON THIS DISK=";PEEK(768) 1150REM clear F$(x,x) array 1151FPNT=1 1152IFF$(FPNT,1)=""THENGOTO1154 1153F$(FPNT,1)="":FPNT=FPNT+1:GOTO1152 1154FPNT=0:DIRPNT=1:NSYS=0:GOTO1200 1190REM handle no device connected error 1191IFPEEK(222)<>3ANDPEEK(222)<>8THEN9900 1192CALL-3288 1193?CHR$(7) 1194IFPEEK(222)=3THEN?"NO DEVICE AT SLOT ";S;", DRIVE ";D 1195IFPEEK(222)=8THEN?"I/O ERROR AT SLOT ";S;", DRIVE ";D 1196? 1197POKE216,0:GOTO1020 1200REM main loop 1210IFF$(FPNT,1)="DIR"THENGOSUB2000:FPNT=FPNT+1:GOTO1210 1220IFF$(FPNT,1)="SYS"THENGOSUB3000:FPNT=FPNT+1:GOTO1210 1230?:IFNSYSTHENM$="MORE " 1240?"NO ";M$;"SYS FILES ON THIS DISK. "; 1250M$="" 1260INPUT"";A$ 1270GOTO1000 2000REM search a directory for DIR and SYS files 2010ONERRGOTO2900 2011?D$;"OPEN ";F$(FPNT,0);" ,TDIR" 2012?D$;"READ ";F$(FPNT,0) 2013INPUTF$:IFLEN(F$)<40THEN2013 2014INPUTF$ 2100REM search directory loop 2110INPUTF$:ONF$=""GOTO2910 2111DIR$=MID$(F$,18,3):F$=MID$(F$,2,16) 2112GOSUB4000 2120F$(DIRPNT,0)=F$(FPNT,0)+"/"+F$ 2130IFDIR$="DIR"THENF$(DIRPNT,1)="DIR":DIRPNT=DIRPNT+1 2140IFDIR$="SYS"THENF$(DIRPNT,1)="SYS":DIRPNT=DIRPNT+1 2150GOTO2110 2900REM handle end-of-file error 2901IFPEEK(222)<>5THEN9900 2902CALL-3288 2910POKE216,0 2911?D$;"CLOSE" 2912RETURN 3000REM do virus check on a SYS file 3005ONERRGOTO3900 3010?D$;"BLOAD";F$(FPNT,0);",A$300,L6,B0,TSYS" 3020DETECT=1:NSYS=NSYS+1:TTL=0 3030FORADR=771TO773 3031:TTL=TTL+PEEK(ADR):IFTTL>256THENTTL=TTL-256 3032NEXT 3040IFTTL<>57THEN3700 3050ADR=(PEEK(769)+(PEEK(770)*256))-8192 3060?D$;"BLOAD";F$(FPNT,0);",A$300,L4,B";ADR;",TSYS" 3070IFPEEK(768)<>32THENDETECT=0 3071IFPEEK(769)<>88THENDETECT=0 3072IFPEEK(770)<>255THENDETECT=0 3073IFPEEK(771)<>186THENDETECT=0 3690ONDETECTGOTO3800 3700REM no virus in this file 3710?"OK: ";F$(FPNT,0) 3720POKE216,0:RETURN 3800REM file appears infected 3810DCNT=DCNT+1 3820?CHR$(7) 3822?F$(FPNT,0);" APPEARS INFECTED." 3825?" DELETE IT? (Y/N) "; 3830GETA$:?A$:? 3840IFA$="Y"ORA$="y"THENGOSUB3860 3850POKE216,0:RETURN 3860REM delete current file 3870?D$;"UNLOCK";F$(FPNT,0) 3880?D$;"DELETE";F$(FPNT,0) 3890RETURN 3900REM handle end-of-file error 3901IFPEEK(222)<>5THEN9900 3902CALL-3288 3903DETECT=0:GOTO3200 4000REM delete trailing spaces & slash in F$ 4010FORI=LEN(F$)TO2STEP-1 4020IFMID$(F$,I,1)=" "ORMID$(F$,I,1)="/"THENF$=LEFT$(F$,I-1) 4030NEXT 4040RETURN 9900REM fatal error 9910?"ERROR #";PEEK(222);" IN LINE ";PEEK(218)+PEEK(219)*256 9920END SAVE VS