home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD2.bin
/
bbs
/
util
/
anticiclovir-2.4.lha
/
AntiCicloVir_V2.4
/
AntiCicloVir.s
< prev
next >
Wrap
Text File
|
1992-09-02
|
120KB
|
5,948 lines
; program : AntiCicloVir
; programsort : Viruskiller
; versionsnr. : 2.4
; genesis date : 31.10.1994
; author : Mathias Gutt
; Kantstr. 16
; 21335 Lüneburg
; Tel.: 04131/49624
; Germany
; This program shows a simple form of virus-hunting
; and so I hope, some novices can find some useful
; routines in AntiCicloVir.
; AntiCicloVir is completely Public Domain and that
; means, you can do everything with the program
; and this source, but read the docs !!!
; You can put out some routines from AntiCicloVir, to
; include them into your own program, or you may use
; AntiCicloVir as base for your own viruskiller, but
; it is not allowed, to use the same name !!!
; AntiCicloVir shows the system-vectors to you,
; looks for known viruses in memory, in the bootsectors
; of every disk from every drive and checks directories
; and files for viruses ...
; I used the masterseka v1.51 to write this one.
; Please excuse my bad anglian !!!
; I know, that this source is not the best one, but
; if you have some questions, please write me !
Execbase = 4
MEMF_PUBLIC = 1
MEMF_CHIP = 2
MEMF_FAST = 4
MEMF_CLEAR = 65536
MEMF_LARGEST = 131072
Addport = -354
AllocCInfo = -30
AllocMem = -198
AllocSignal = -330
AutoRequest = -348
CheckBoot = -$2A
Close = -36
CloseDevice = -450
CloseLibrary = -414
CloseWindow = -72
CopyMem = -624
CurrentDir = -126
Delay = -$00C6
DeleteFile = -$0048
DetermineFile = -42
DisplayAlert = -90
DoIORoutine = -456
Examine = -102
ExNext = -108
FreeCInfo = -36
FreeMem = -210
FreeSignal = -336
FindName = -276
FindTask = -294
GetMsg = -372
Lock = -84
Open = -$001E
OpenDeviceRoutine = -444
OldOpenLibrary = -408
OpenWindow = -204
Read = -42
ReadBBBF = -$1E
RemPort = -360
Rename = -78
rlAllocTableMem = -$1E
rlFreeTableMem = -$24
rlGetFileVName = -$2A
rlGetMemVName = -$3C
rlKillMemV = -$42
SetProtection = -186
SetWindowTitles = -276
UnLock = -90
UnPack = -48
WaitIO = -474
WaitPort = -384
Write = -$0030
CloseLib: MACRO ;Macro
move.l ExecBase,a6 ;get ExecBase
move.l ?1(pc),a1 ;get LibBase
jsr CloseLibrary(a6) ;call subroutine
ENDM ;end of macro
Requester: MACRO ;Macro
lea AutoRequestTextPtr(pc),a0 ;get Ptr of AutoRequestText
move.l ?1,(a0) ;insert address of Outputtext in AutoRequestText
lea GadgetTextPtr(pc),a0 ;get Ptr of GadgetText
move.l ?2,(a0) ;insert address of OutputText in GadgetText
lea GadgetText2Ptr(pc),a0 ;get Ptr of next GadgetText
move.l ?3,(a0) ;insert address of OutputText in next Gadget
move.l #0,a0
lea AutoRequestText(pc),a1 ;get RequestText-structure
lea GadgetText(pc),a2 ;get GadgetText-structure
lea GadgetText2(pc),a3 ;get GadgetText2-structure
moveq #0,d0 ;no IDCMP-Flag
moveq #0,d1 ;no IDMCP-Flag
move.l ?4,d2 ;get Width for Request
move.l ?5,d3 ;get Height for Request
move.l Intuibase(pc),a6 ;get Intuibase
jsr AutoRequest(a6) ;call subroutine
ENDM ;end of macro
Requesterold: MACRO ;Macro
move.l #0,a0
lea ?1,a1 ;get RequestText-structure
lea ?2,a2 ;get GadgetText-structure
lea ?3,a3 ;get Gadget2Text-structure
moveq #0,d0 ;no IDCMP-Flag
moveq #0,d1 ;no IDCMP-Flag
move.l ?4,d2 ;get Width for Requester
move.l ?5,d3 ;get Heigth for Requester
move.l Intuibase(pc),a6 ;get Intuibase
jsr AutoRequest(a6) ;call subroutine
ENDM ;end of macro
move.l a0,ParamAddress ;get ParamAddress
move.l d0,ParamLength ;get ParamLength
;WBStartup-Head
;This routine tries to find out, if AntiCicloVir was
;called from the Workbench or from the Shell.
move.l ExecBase,a6 ;get ExecBase
suba.l a1,a1 ;get TaskName (=0)
jsr FindTask(a6) ;call subroutine
move.l d0,a4 ;write task-address to a4
tst.l 172(a4) ;CLI or WB ?
bne clicall ;was called from shell
lea 92(a4),a0 ;Ptr of MsgPort
jsr WaitPort(a6) ;call subroutine
lea 92(a4),a0 ;Ptr of MsgPort
jsr GetMsg(a6) ;call subroutine
bra WBcall ;was called from WB
clicall:
bsr CheckFirstMark ;branch to subroutine
move.l Paramaddress(pc),a0 ;get Paramaddress
cmp.b #"-",(a0)+ ;look for option-line
bne ScanFiles ;if <>0 branch to scanfiles
Option:
cmp.b #"c",(a0) ;look for option c
beq fastcheckset ;if yes, branch to fastcheckset
cmp.b #"m",(a0) ;look for option m
beq Clicall2 ;if yes, branch to Clicall2
fastcheckset:
move.b #$FF,fastcheck ;set fastcheck-flag
Clicall2:
move.b #$FF,StartupFlag ;set StartupFlag
WBcall:
; This one is a little color-cycling, to greet the
; user !
Colors:
add.l #$00070007,d0
cmp.l #$00FF00FF,d0
bge AntiCicloVir
move.w #1,d1
Colorcycling:
move.b $dff005,d2
ColorcyclingLoop:
move.l d0,$dff180
move.l d0,$dff184
cmp.b $dff005,d2
beq.s ColorcyclingLoop
dbra d1,ColorCycling
bra Colors
AntiCicloVir:
bsr OpenDos ;open DosLib
cmp.l #0,d0 ;error ?
beq Ende ;Yes, end it !
move.l d0,Dosbase ;No, get DosBase
bsr OpenIntui ;open IntuiLib
cmp.l #0,d0 ;error ?
beq CloseDos ;Yes, close DosLib
move.l d0,Intuibase ;No, get Intuibase
bsr OpenBBBFLib ;open BBBFLib
move.l d0,BBBFBase ;get BBBFBase
bsr BBBFLibErrorCheck ;branch to BBBFLibErrorCheck
bsr OpenBrainFile ;open BrainFile
bsr BrainFileErrorCheck ;branch to BrainFileErrorCheck
bsr OpenRLLib ;open RLLib
move.l d0,RLBase ;get RLBase
bsr RLLibErrorCheck ;branch to RLLibErrorCheck
clr.l d0 ;clear d0
bsr AllocTableMem ;allocate memory for table
move.l d0,RLStructPtr ;get RLStructPtr
cmp.b #$FF,StartupFlag ;was Startup-flag set ?
bne WBStart ;No, branch to WBStart
bsr OpenWin ;open DOS-window
cmp.l #0,d0 ;error ?
beq CloseDos ;Yes, close DosLib
move.l d0,Handle ;No, get Handle
WBStart:
bsr vectors_table ;show system-vectors
cmp.b #$FF,StartupFlag ;was Startup-flag set ?
bne WBStart2 ;No, branch to WBStart2
bsr Print ;print my message
WBStart2:
bsr CheckMem ;check memory for viruses
cmp.b #$FF,StartupFlag ;was Startup-flag set ?
bne WBStart3 ;No, branch to WBStart3
bsr CloseWin ;close DOS-Window
WBStart3:
bsr FreeTableMem ;free memory for table
bsr CloseRLLib ;close RLLib
bsr CloseBBBFLib ;close BBBFLib
bsr CloseIntui ;close IntuiLib
bra CloseDos ;close DosLib
ScanFiles:
bsr OpenDos ;open DosLib
cmp.l #0,d0 ;error ?
beq Ende ;Yes, and good bye !
move.l d0,Dosbase ;No, get DosBase
bsr OpenIntui ;open IntuiLib
cmp.l #0,d0 ;error ?
beq CloseDos ;Yes, end it !
move.l d0,Intuibase ;No, get Intuibase
bsr OpenRLLib ;open RLLib
move.l d0,RLBase ;get RLBase
bsr RLLibErrorCheck ;branch to RLLibErrorCheck
clr.l d0 ;clear d0
bsr AllocTableMem ;allocate memory for table
move.l d0,RLStructPtr ;get RLStructPtr
bsr OpenUnPackLib ;open UnPackLib
move.l d0,UPBase ;get UPBase
bsr UnPackLibErrorCheck ;branch to UnPackLibErrorCheck
clr.l d0 ;clear d0
bsr DoAllocCInfo ;allocate memory for CInfo-structure
move.l d0,UPInfo ;get UPInfo
bsr OpenWin ;open DOS-window
cmp.l #0,d0 ;error ?
beq CloseDos ;Yes, close DosLib
move.l d0,Handle ;No, get Handle
bsr Print ;print my message
bsr PrintScan ;print scan-path
move.b #$FF,fastcheck ;set fastcheck-flag
bsr CheckMem ;check memory for viruses
move.l ExecBase,a6 ;get ExecBase
move.l #MEMF_CHIP!MEMF_CLEAR!MEMF_LARGEST,d1
move.l #260,d0 ;allocate 260 Bytes
jsr AllocMem(a6) ;connected CHIP-RAM !
tst.l d0 ;error ?
beq notenough ;Yes, print notenough
move.l d0,FileInfoBlockMem ;No, get MemPtr
move.l ExecBase,a6 ;get ExecBase
move.l #MEMF_CHIP!MEMF_LARGEST,d1;allocate $5000 bytes
move.l #$5000,d0 ;connected CHIP-RAM !
jsr AllocMem(a6) ;call subroutine
tst.l d0 ;error ?
beq notenough ;Yes, print notenough
move.l d0,FileMem ;No, get MemPtr
bsr GetLock ;branch to GetLock
cmp.l #0,d0 ;error ?
beq ScanFilesEnd ;Yes, end all !
move.l d0,LockHandle ;No, get Lock
bsr ExamineIt ;examine file
cmp.l #0,d0 ;error ?
beq FileTestEnd ;Yes, branch to FileTestEnd
cmp.b #$FE,FileFlag ;check all ?
beq DirectoryTest ;Yes, checking directories
move.l FileInfoBlockMem(pc),a0 ;No, get FileInfoBlock
cmp.l #0,4(a0) ;directory ?
ble FileTest ;No, branch to filetest
DirectoryTest: ;Yes !
bsr MakeCurrentDir ;branch to MakeCurrentDir
move.l d0,OldLock ;get old Lock
cmp.b #$FE,FileFlag ;check all ?
beq SeekII2 ;Yes, branch to SeekII2 !
bra Seek2 ;branch to Seek2
Seek:
bsr CheckFile ;branch to CheckFile
Seek2:
bsr ExNextIt ;get next FIB-datas
cmp.l #0,d0 ;more datas ?
bne Seek ;Yes, branch to Seek
bsr UnLockIt ;No, unlock it
bsr OldCurrentDir ;branch to OldCurrentDir
bra ScanFilesEnd ;end scanfiles
SeekII:
bsr CheckAllDirectories ;branch to CheckAllDirectories
move.l FileInfoBlockMem(pc),a0 ;get FIB-structure
cmp.l #0,4(a0) ;Directory ?
ble SeekII2 ;No, branch to SeekII2
move.l LockHandle(pc),-(sp) ;save old lock
move.l FileInfoBlockMem(pc),-(sp);save old FIB-structure-address
add.l #1,subdirgen ;count up !
move.l Dosbase(pc),a6 ;get DosBase
move.l FileInfoBlockmem(pc),a0 ;get FIB-structure
add.l #8,a0 ;get filename
move.l a0,d1 ;write address of filename to d1
move.l #72,d2 ;use the read mode
jsr Lock(a6) ;call subroutine
move.l d0,Lockhandle ;get new Lockhandle
bsr MakeCurrentDir ;branch to MakeCurrentDir
move.l ExecBase,a6 ;get ExecBase
move.l #MEMF_CHIP!MEMF_CLEAR!MEMF_LARGEST,d1
move.l #260,d0 ;allocate 260 bytes
jsr AllocMem(a6) ;call subroutine
move.l d0,FileInfoBlockMem ;get MemPtr
bsr ExamineIt ;branch to ExamineIt
SeekII2:
bsr ExNextIt ;get next FIB-datas
cmp.l #0,d0 ;more datas ?
bne SeekII ;Yes, branch to SeekII
cmp.l #0,subdirgen ;any more subdirectories ?
beq SeekII3 ;No, branch to SeekII3
sub.l #1,subdirgen ;count down !
move.l ExecBase,a6 ;get ExecBase
move.l FileInfoBlockMem(pc),a1 ;get FileInfoBlockMemPtr
move.l #260,d0 ;deallocate 260 bytes
jsr FreeMem(a6) ;call subroutine
move.l (sp)+,FileInfoBlockMem ;get back address of old FIB-structure
bsr UnLockIt ;branch to UnLockIt
move.l (sp)+,Lockhandle ;get back address of old lockhandle
bsr MakeCurrentDir ;branch to MakeCurrentDir
bra SeekII2 ;continue the Seek-loop !
SeekII3:
bsr UnLockIt ;No, unlock it
bsr OldCurrentDir ;branch to OldCurrentDir
bra ScanFilesEnd ;end scanfiles
FileTest:
lea Directory(pc),a0 ;get Directory
move.l ParamLength(pc),d0 ;get ParamLength
PathLoop:
cmp.b #":",(a0) ;look for :
beq GetDirectoryname ;Yes, get directoryname
cmp.b #"/",(a0)+ ;look for /
beq GetDirectoryname ;Yes, get directoryname
sub.l #1,d0 ;count down
cmp.l #0,d0 ;zero ?
bne PathLoop ;No, continue loop !
bra FileTest2 ;Yes, branch to FileTest2
GetDirectoryName:
move.b #$FF,FileFlag ;set FileFlag
lea Directory(pc),a0 ;get Directory
move.l ParamLength(pc),d0 ;get ParamLength
add.l d0,a0 ;add lentgh to address of Directory
DirectoryNameLoop:
cmp.b #":",(a0) ;look for :
beq MakeCurrentPath ;Yes, branch to MakeCurrentPath
cmp.b #"/",(a0) ;look for /
beq MakeCurrentPath ;Yes, branch to MakeCurrentPath
sub.l #1,a0 ;count down
sub.l #1,d0 ;count down
cmp.l #0,d0 ;zero ?
bne DirectoryNameLoop ;No, continue loop !
bra FileTest2 ;Yes, branch to FileTest2
MakeCurrentPath:
move.b #00,1(a0) ;clear last byte
bsr GetLock ;get lock
cmp.l #0,d0 ;error ?
beq FileTestEnd ;Yes, end FileTest
move.l d0,FileLockHandle ;No, get Lock
bsr MakeCurrentFileDir ;branch to MakeCurrentFileDir
move.l d0,OldLock ;get old Lock
FileTest2:
bsr CheckFile ;branch to CheckFile
cmp.b #$FF,FileFlag ;was FileFlag set ?
bne FileTestEnd ;No, end FileTest
bsr UnLockFilePath ;Yes, unlock filepath
bsr OldCurrentDir ;branch to OldCurrentDir
FileTestEnd:
bsr UnLockIt ;unlock file
bra ScanFilesEnd ;end scanfiles
CheckFirstMark:
move.l Paramaddress(pc),a0 ;get Paramaddress
cmp.b #$22,(a0) ;inverted commas ?
beq GetPara2 ;Yes, branch to GetPara2
bra GetPara ;No, branch to GetPara
GetPara:
move.l Paramaddress(pc),a0 ;get Paramaddress
lea Directory(pc),a1 ;get Directory-address
ParaLoop:
move.b (a0)+,(a1)+ ;copy Parameter to Directory
cmp.b #" ",(a0) ;Spacecode ?
beq ParaLoopEnde ;Yes, end the loop!
cmp.b #$0A,(a0) ;Returncode
beq ParaLoopEndeII ;Yes, end the loop !
bra ParaLoop ;No, continue loop !
ParaLoopEnde:
add.l #1,a0 ;count up !
move.b #0,(a1) ;remove spacecode !
bsr GetOption ;branch to subroutine
rts ;return from subroutine
ParaLoopEndeII:
move.b #0,(a1) ;remove returncode !
rts ;return from subroutine
GetPara2:
move.l Paramaddress(pc),a0 ;get Paramaddress
add.l #1,a0 ;count up !
lea Directory(pc),a1 ;get Directory-address
Para2Loop:
move.b (a0)+,(a1)+ ;copy Parameter to Directory
cmp.b #$22,(a0) ;inverted commas ?
bne Para2Loop ;No, continue the loop !
Para2LoopEnde:
add.l #1,a0 ;count up !
bsr GetOption ;branch to subroutine
rts ;return from subroutine
GetOption:
lea All(pc),a1 ;get option-def-address
cmp.b #"-",(a0) ;hyphen ?
bne GetOptionLoopEnd ;No, end the GetOptionLoop !
clr.l d0 ;clear d0 !
move.l #5, d1 ;set count in d1 !
GetOptionLoop:
sub.l #1,d1 ;count down !
cmp.l #0,d1 ;zero ?
beq GetOptionLoopSet ;Yes, end GetOptionLoop !
move.b (a1)+,d0 ;get one byte from option-def in d0
cmp.b (a0)+,d0 ;option-def = option ??
bne GetOptionLoopEnd ;No, end the loop !
bra GetOptionLoop ;Continue the loop !
GetOptionLoopSet:
move.b #$FE,FileFlag ;set FileFlag !
GetOptionLoopEnd:
rts ;return from subroutine
OpenDos:
move.l ExecBase,a6 ;get ExecBase
lea Dosname(pc),a1 ;get LibName
move.l #0,d0 ;get version
jsr OldOpenLibrary(a6) ;call subroutine
rts ;return from subroutine
OpenIntui:
move.l ExecBase,a6 ;get ExecBase
lea Intuiname(pc),a1 ;get LibName
move.l #0,d0 ;get version
jsr OldOpenLibrary(a6) ;call subroutine
rts ;return from subroutine
OpenBBBFLib:
move.l ExecBase,a6 ;get ExecBase
lea BBBFName(pc),a1 ;get LibName
move.l #0,d0 ;get version
jsr OldOpenLibrary(a6) ;call subroutine
rts ;return from subroutine
BBBFLibErrorCheck:
cmp.l #0,BBBFBase ;error ?
beq BBBFLibErrDisplay ;Yes, display it !
rts ;return from subroutine
OpenBrainFile:
cmp.l #0,BBBFBase ;BBBFBase available ?
beq OpenBrainFileEnd ;No, branch to OpenBrainFileEnd
move.l BBBFBase(pc),a6 ;get BBBFBase
lea BrainFileName(pc),a0 ;get BrainFileName
clr.l d0 ;clear d0
jsr ReadBBBF(a6) ;call subroutine
OpenBrainFileEnd:
rts ;return from subroutine
OpenRLLib:
move.l ExecBase,a6 ;get ExecBase
lea RLName(pc),a1 ;get LibName
move.l #32,d0 ;get version
jsr OldOpenLibrary(a6) ;call subroutine
rts ;return from subroutine
RLLibErrorCheck:
cmp.l #0,RLBase ;error ?
beq RLLibErrDisplay ;Yes, display it !
rts ;return from subroutine
OpenUnPackLib:
move.l ExecBase,a6 ;get ExecBase
lea UnPackName(pc),a1 ;get LibName
move.l #0,d0 ;get version
jsr OldOpenLibrary(a6) ;call subroutine
rts ;return from subroutine
UnPackLibErrorCheck:
cmp.l #0,UPBase ;error ?
beq UnPackErrDisplay ;Yes, display it !
rts ;return from subroutine
OpenWin:
move.l Dosbase(pc),a6 ;get DosBase
move.l #DOSWin,d1 ;get Windowdef-address
move.l #1006,d2 ;use the new mode
jsr Open(a6) ;call subroutine
rts ;return from subroutine
Print:
move.l #Text,d2 ;get Text-Startaddress
move.l #Textende,d3 ;get Text-Endaddress
bsr PrintDOSText ;branch to subroutine
rts ;return from subroutine
PrintScan:
move.l #ScanText,d2 ;get ScanText-Startaddress
move.l #ScanTextend,d3 ;get ScanText-Endaddress
bsr PrintDOSText ;branch to subroutine
rts ;return from subroutine
notenough:
move.l #notenoughText,d2 ;get Text-Startaddress
move.l #notenoughTextende,d3 ;get Text-Endaddress
bsr PrintDOSText ;branch to subroutine
rts ;return from subroutine
AllocTableMem:
cmp.l #0,RLBase ;RLBase available ?
beq AllocTableMemEnd ;No, branch to AllocTableMemEnd
move.l RLBase(pc),a6 ;get RLBase
jsr rlAllocTableMem(a6) ;call subroutine
AllocTableMemEnd:
rts ;return from subroutine
DoAllocCInfo:
cmp.l #0,UPBase ;UPBase available ?
beq DoAllocCInfoEnd ;No, branch to DoAllocCInfoEnd
move.l UPBase(pc),a6 ;get UPBase
jsr AllocCInfo(a6) ;call subroutine
DoAllocCInfoEnd:
rts ;return from subroutine
FreeTableMem:
cmp.l #0,RLStructPtr ;RLStruct available ?
beq FreeTableMemEnd ;No, branch to FreeTableMemEnd
move.l RLBase(pc),a6 ;get RLBase
move.l RLStructPtr(pc),a0 ;get RLStructPtr
jsr rlFreeTableMem(a6) ;call subroutine
FreeTableMemEnd:
rts ;return from subroutine
DoFreeCInfo:
cmp.l #0,UPInfo ;UPInfo available ?
beq DoFreeCInfoEnd ;No, branch to DoFreeCInfoEnd
move.l UPBase(pc),a6 ;get UPBase
move.l UPInfo(pc),a0 ;get UPInfo
jsr FreeCInfo(a6) ;call subroutine
DoFreeCInfoEnd:
rts ;return from subroutine
NoMemAlert:
move.l Intuibase(pc),a6 ;get Intuibase
move.l #40,d1 ;get Alert-Heigth
lea string(pc),a0 ;get string-address
jsr DisplayAlert(a6) ;call subroutine
rts ;return from subroutine
BBBFLibErrDisplay:
move.l Intuibase(pc),a6 ;get Intuibase
move.l #40,d1 ;get Alert-Heigth
lea BBBFstring(pc),a0 ;get string-address
jsr DisplayAlert(a6) ;call subroutine
rts ;return from subroutine
RLLibErrDisplay:
move.l Intuibase(pc),a6 ;get Intuibase
move.l #40,d1 ;get Alert-Heigth
lea RemoveLinkstring(pc),a0 ;get string-address
jsr DisplayAlert(a6) ;call subroutine
rts ;return from subroutine
UnPackErrDisplay:
move.l Intuibase(pc),a6 ;get Intuibase
move.l #40,d1 ;get Alert-Heigth
lea UnPackstring(pc),a0 ;get sting-address
jsr DisplayAlert(a6) ;call subroutine
rts ;return from subroutine
BrainFileErrorCheck:
cmp.l #0,d0 ;error ?
blt DisplayBrainFileError ;Yes, branch to DisplayBrainFileError
rts ;return from subroutine
DisplayBrainFileError:
lea BBBFErrList(pc),a0 ;get BBBFErrList-address
move.l #-1,d1 ;get counter
DisplayBrainFileErrorLoop:
cmp.l d1,d0 ;d1 = d0 ?
beq DisplayBrainFileErrorAlert ;display error !
sub.l #1,d1 ;count down !
cmp.l #0,(a0)+ ;count up !
cmp.l #-5,d1 ;more than four loop ?
bne DisplayBrainFileErrorLoop ;continue the loop !
rts ;return from subroutine
DisplayBrainFileErrorAlert:
move.l Intuibase(pc),a6 ;get Intuibase
move.l #40,d1 ;get Alert-Height
move.l (a0),a0 ;get string-address
jsr DisplayAlert(a6) ;call subroutine
rts ;return from subroutine
UPErr:
move.l UPInfo(pc),a0 ;get UPInfo
move.l 24(a0),d0 ;get ErrorNum
move.l #1,d1 ;get counter
lea UnPackErrlist(pc),a0 ;get UnPackErrlist-startaddress
UPErrLoop:
cmp.l d0,d1 ;d0 = d1 ?
beq DisplayUPErr ;Yes, DisplayUPErr !
add.l #1,d1 ;count up !
cmp.l #0,(a0)+ ;count up !
cmp.l #17,d1 ;more than 16 loops ?
bne UPErrLoop ;No, continue the loop !
bra FileVirusCheck ;branch to subroutine
DisplayUPErr:
move.l (a0),d0
Requester d0,#ContinueText,#ContinueText,#610,#70
bra FileVirusCheck ;branch to subroutine
CloseWin:
move.l Handle(pc),d1 ;get Handle
move.l Dosbase(pc),a6 ;get DosBase
jsr Close(a6) ;call subroutine
rts ;return from subroutine
CloseUnPackLib:
cmp.l #0,UPBase ;UPBase opened ?
beq CloseUnPackLibEnd ;No, do not close it !
CloseLib UPBase ;Yes, close it !
CloseUnPackLibEnd:
rts ;return from subroutine
CloseRLLib:
cmp.l #0,RLBase ;RLBase opened ?
beq CloseRLLibEnd ;No, do not close it !
CloseLib RLBase ;Yes, close it !
CloseRLLibEnd:
rts ;return from subroutine
CloseBBBFLib:
cmp.l #0,BBBFBase ;BBBFBase opened ?
beq CloseBBBFBaseEnd ;No, do not close it !
CloseLib BBBFBase ;Yes, close it !
CloseBBBFBaseEnd:
rts ;return from subroutine
CloseIntui:
CloseLib Intuibase ;close IntuiLib
rts ;return from subroutine
CloseDos:
CloseLib DosBase ;close DosLib
clr.l d0 ;clear d0
Ende:
rts ;return from subroutine
GetLock:
move.l Dosbase(pc),a6 ;get DosBase
move.l #Directory,d1 ;get Directory
move.l #72,d2 ;use the read mode
jsr Lock(a6) ;call subroutine
rts ;return from subroutine
MakeCurrentDir:
move.l Dosbase(pc),a6 ;get DosBase
move.l LockHandle(pc),d1 ;get Lock
jsr CurrentDir(a6) ;call subroutine
rts ;return from subroutine
MakeCurrentFileDir:
move.l Dosbase(pc),a6 ;get DosBase
move.l FileLockHandle(pc),d1 ;get Lock
jsr CurrentDir(a6) ;call subroutine
rts ;return from subroutine
ExamineIt:
move.l Dosbase(pc),a6 ;get DosBase
move.l LockHandle(pc),d1 ;get Lock
move.l FileInfoBlockMem(pc),d2 ;get FileInfoBlock-structure
jsr Examine(a6) ;call subroutine
rts ;return from subroutine
ExNextIt:
move.l Dosbase(pc),a6 ;get DosBase
move.l LockHandle(pc),d1 ;get Lock
move.l FileInfoBlockMem(pc),d2 ;get FileInfoBlock-structure
jsr ExNext(a6) ;call subroutine
rts ;return from subroutine
UnLockIt:
move.l Dosbase(pc),a6 ;get DosBase
move.l LockHandle(pc),d1 ;get Lock
jsr UnLock(a6) ;call subroutine
rts ;return from subroutine
UnLockFilePath:
move.l Dosbase(pc),a6 ;get DosBase
move.l FileLockHandle(pc),d1 ;get FileInfoBlock-structure
jsr UnLock(a6) ;call subroutine
rts ;return from subroutine
OldCurrentDir:
move.l Dosbase(pc),a6 ;get DosBase
move.l OldLock(pc),d1 ;get old lock
jsr CurrentDir(a6) ;call subroutine
rts ;return from subroutine
ScanFilesEnd:
move.l ExecBase,a6 ;get ExecBase
move.l #260,d0 ;deallocate 260 Bytes
move.l FileInfoBlockMem(pc),a1 ;memory from the
jsr FreeMem(a6) ;FileInfoBlock-structure
move.l ExecBase,a6 ;get ExecBase
move.l #$5000,d0 ;deallocate $5000 Bytes
move.l FileMem(pc),a1 ;memory from the
jsr Freemem(a6) ;filebuffer
bsr CloseWin ;close DOS-window
bsr FreeTableMem ;free Table-Memory
bsr DoFreeCInfo ;free CInfo-Memory
bsr CloseUnPackLib ;close UnPackLib
bsr CloseRLLib ;close RLLib
bsr CloseIntui ;close IntuiLib
bra CloseDos ;close DosLib
even
string:
dc.b 0,200,10,` NOT ENOUGH MEMORY !`,0
dc.b 0,0,0,0
even
BBBFstring:
dc.b 0,200,10,` Can not open Bootblock.library !`,0
dc.b 0,0,0,0
even
BBBFErrList:
dc.l BBBFErr1String
dc.l BBBFErr2String
dc.l BBBFErr3String
dc.l BBBFErr4String
even
BBBFErr1string:
dc.b 0,200,10,` Can not open brainfile !!!`,0
dc.b 0,0,0,0
even
BBBFErr2string:
dc.b 0,200,10,` Brainfile corrupt error !`,0
dc.b 0,0,0,0
even
BBBFErr3string:
dc.b 0,200,10,` Brainfile already loaded !`,0
dc.b 0,0,0,0
even
BBBFErr4string:
dc.b 0,200,10,` Not enough memory for brainfile !`,0
dc.b 0,0,0,0
even
RemoveLinkstring:
dc.b 0,200,10,` Can not open removelink.library !`,0
dc.b 0,0,0,0
even
Unpackstring:
dc.b 0,200,10,` Can not open unpack.library !`,0
dc.b 0,0,0,0
even
Dosname:
dc.b `dos.library`,0
even
Intuiname:
dc.b `intuition.library`,0
even
BBBFName:
dc.b `Bootblock.library`,0
even
RLName:
dc.b `removelink.library`,0
even
UnpackName:
dc.b `unpack.library`,0
even
BrainFileName:
dc.b `:L/Bootblock.brainfile`,0
even
Dosbase:
dc.l 0
Intuibase:
dc.l 0
BBBFBase:
dc.l 0
RLBase:
dc.l 0
RLStructPtr:
dc.l 0
UPBase:
dc.l 0
UPInfo:
dc.l 0
Handle:
dc.l 0
DateiHandle:
dc.l 0
LockHandle:
dc.l 0
FileLockHandle:
dc.l 0
OldLock:
dc.l 0
FileInfoBlockMem:
dc.l 0
FIBBackup:
dc.l 0
FileMem:
dc.l 0
HunkPos:
dc.l 0
Paramaddress:
dc.l 0
ParamLength:
dc.l 0
subdirgen:
dc.l 0
ScanText:
dc.b $9b,`3;31m`
dc.b `... scanning `
even
Directory:
blk.b 500,0
dc.b ` for link-, file- & diskvalidator-viruses, trojans an
d bombs:`,10,10,10
dc.b $9b,`0;31m`
ScanTextend:
even
Space:
blk.b 80,0
Sign:
dc.b 0
fastcheck:
dc.b 0
StartupFlag:
dc.b 0
FileFlag:
dc.b 0
even
All:
dc.b `-all`,10
even
DOSWin:
dc.b `*`,0
even
Text:
dc.b ` `,10
dc.b $9b,`1;31m`
dc.b ` AntiCicloVir `
dc.b $9b,`3;31m`
dc.b `- Virus-Statikum Version 2.4`,10
dc.b ` (C) 1992-1994 by Matthias Gutt, Kantstr.16 , 21335 Lüneburg , Germany`,10
dc.b ` `,10
dc.b $9b,`0;33m`
dc.b `KNOWN VIRUSES COUNT:`,10
dc.b `Bootblock-Viruses : 188 + Bootblock.library`,10
dc.b `Linkviruses : 15 + removelink.library`,10
dc.b `Fileviruses : 28 + removelink.library`,10
dc.b `Disk-Validator-Viruses: 7 + removelink.library`,10
dc.b `Trojans : 11 + removelink.library`,10
dc.b `Bombs : 17 + removelink.library`,10
dc.b `---------------------------`,10
dc.b `ENEMIES (TOTAL) : 266 + SHI known viruses`,10
dc.b `Usage: AntiCicloVir [pathname [-all]]/[-c]/[-m]`,10
dc.b `OPTIONS TABLE:`,10
dc.b `-c = fast memorycheck`,10
dc.b `-m = memorycheck + installing background task for looking`,10
dc.b ` on every inserted disk for Bootblock- + Disk-Validator-viruses`,10
dc.b ` `,10
dc.b $9b,`0;31m`
Textende:
even
notenoughText:
dc.b ` `,10
dc.b ` Not enough memory !`,10
notenoughTextende:
even
CheckAllDirectories:
cmp.l #0,subdirgen ;parent dir ?
beq CheckAllDirectories2 ;Yes, branch to CheckAllDirectories2
move.l subdirgen(pc),d0 ;get subdirgen
mulu #4,d0 ;multiplicate subdirgen
move.l Dosbase(pc),a6 ;get Dosbase
move.l Handle(pc),d1 ;get Handle
lea Space(pc),a0 ;get Space-address
move.l a0,d2 ;copy a0 to d2
Spaceloop:
move.b #" ",(a0)+ ;write spaces !
sub.l #1,d0 ;count down !
cmp.l #0,d0 ;zero ?
bne Spaceloop ;No, continue the loop !
sub.l d2,a0 ;subtract startaddress of Space from its endaddress
move.l a0,d3 ;get size
jsr Write(a6) ;call subroutine
CheckAllDirectories2:
move.l Dosbase(pc),a6 ;get Dosbase
move.l Handle(pc),d1 ;get Handle
move.l FileInfoBlockMem(pc),d2 ;get FIB-structure
add.l #8,d2 ;get filename
move.l d2,a0 ;copy d2 to a0
TextLoop2:
cmp.b #$00,(a0)+ ;zerobyte ?
bne TextLoop2 ;No, continue the loop !
sub.l d2,a0 ;Yes, subtract end from startaddress
move.l a0,d3 ;get Textlength
jsr Write(a6) ;call subroutine
bra Loadfile ;branch to Loadfile !
CheckFile:
move.l #30,d0 ;get counter
lea FileNameText(pc),a0 ;get FileNameText-address
ClearFileNameTextLoop:
move.b #$20,(a0)+ ;clear all bytes with spaces
sub.l #1,d0 ;count down
cmp.l #0,d0 ;zero ?
bne ClearFileNameTextLoop ;No, continue loop !
move.l FileInfoBlockMem(pc),a0 ;get FIB-structure
add.l #8,a0 ;get filename
lea FileNameText(pc),a1 ;get address of FileNamebuffer
move.l #30,d0 ;create counter
NameLoop:
move.b (a0)+,(a1)+ ;write filename to filenamebuffer
cmp.b #00,(a0) ;look for zero
beq NameLoopEnd ;Yes, end the loop !
sub.l #1,d0 ;count down
cmp.l #0,d0 ;zero ?
bne NameLoop ;No, continue the loop !
NameLoopEnd:
move.l #FileNameText,d2 ;get FileNamebuffer-Startaddress
move.l #FileNameTextende,d3 ;get FileNamebuffer-Endaddress
bsr PrintDOSText ;branch to subroutine
move.l FileInfoBlockMem(pc),a0 ;get FIB-structure
cmp.l #0,4(a0) ;Directory ?
ble Sizehex ;No, get filesize
move.l #DirText,d2 ;get DirText-Startaddress
move.l #DirTextende,d3 ;get DirText-Endaddress
bsr PrintDOSText ;branch to subroutine
bra Protection ;branch to Protection
Sizehex:
move.l FileInfoBlockMem(pc),a6 ;get FIB-structure
move.l 124(a6),d2 ;get Size-address
lea Length(pc),a0 ;get Sizebuffer-address
bsr hex ;hex it !
move.l #SizeText,d2 ;get SizeText-Startaddress
move.l #SizeTextende,d3 ;get SizeText-Endaddress
bsr PrintDOSText ;branch to subroutine
Protection:
move.l PBits(pc),ProtectText ;write Protectionbits to the buffer
lea ProtectText(pc),a0 ;get ProtectText-Startaddress
move.l FileInfoBlockMem(pc),a6 ;get FIB-structure
move.l #03,d0 ;create counter
ProtectionLoop:
btst d0,116(a6) ;is Protectionbit set ?
bne SetLine ;Yes, write line !
ProtectionLoop2:
cmp.b #0,(a0)+ ;count up
sub.l #1,d0 ;count down
cmp.l #0,d0 ;lower than zero ?
bge ProtectionLoop ;No, continue the loop !
bra ShowPBits ;Yes, show Protectionbits
SetLine:
move.b #`-`,(a0) ;write line
bra ProtectionLoop2 ;branch back to loop !
ShowPBits:
move.l Dosbase(pc),a6 ;get DosBase
move.l Handle(pc),d1 ;get Handle
move.l #ProtectText,d2 ;get ProtectText-Startaddress
move.l #8,d3 ;get Textlength
jsr Write(a6) ;call subroutine
move.l Dosbase(pc),a6 ;get DosBase
move.l Handle(pc),d1 ;get Handle
move.l FileInfoBlockMem(pc),d2 ;get FIB-structure
add.l #144,d2 ;get CommentText-address
move.l d2,a0 ;copy d2 to a0
TextLoop:
cmp.b #$00,(a0)+ ;zerobyte ?
bne TextLoop ;No, continue the loop !
sub.l d2,a0 ;Yes, subtract end- from startaddress
move.l a0,d3 ;get Textlength
jsr Write(a6) ;call subroutine
Loadfile:
move.l Dosbase(pc),a6 ;get DosBase
move.l FileInfoBlockMem(pc),d1 ;get FIB-structure
add.l #8,d1 ;get filename
move.l #1005,d2 ;use the old mode
jsr Open(a6) ;call subroutine
cmp.l #0,d0 ;error ?
beq OK2 ;Yes, end CheckFile
move.l d0,Dateihandle ;No, get Dateihandle
move.l Dosbase(pc),a6 ;get DosBase
move.l Dateihandle(pc),d1 ;get Dateihandle
move.l FileMem(pc),d2 ;get Filebuffer
move.l #$5000,d3 ;read $5000 bytes
jsr Read(a6) ;call subroutine
cmp.l #0,UPBase ;UPBase available ?
beq FileVirusCheck ;No, branch to FileVirusCheck
move.l UPBase(pc),a6 ;get UPBase
cmp.l #0,UPInfo ;UPInfo available ?
beq FileVirusCheck ;No, branch to FileVirusCheck
move.l UPInfo(pc),a0 ;get UPInfo
move.l FileInfoBlockMem(pc),a1 ;get FIB-structure
add.l #8,a1 ;get filename
jsr DetermineFile(a6) ;call subroutine
cmp.l #0,d0 ;error ?
beq UPErr ;Yes, branch to UPErr
move.l UPInfo(pc),a0 ;get UPInfo
cmp.l #0,12(a0) ;cruncher ?
beq FileVirusCheck ;No, branch to FileVirusCheck
lea CruncherName(pc),a1 ;get CruncherName-Startaddress
move.l #40,d0 ;get counter
ClearCruncherNameLoop:
move.b #00,(a1)+ ;clear the buffer !
sub.l #1,d0 ;count down !
cmp.l #0,d0 ;zero ?
bne ClearCruncherNameLoop ;No, continue the loop !
move.l 12(a0),a0 ;get CruncherName-Startaddress
;from UPInfo
lea CruncherName(pc),a1 ;get CruncherName-Bufferaddress
CruncherNameLoop:
move.b (a0)+,(a1)+ ;write CruncherName to buffer
cmp.b #00,(a0) ;any more byte ?
bne CruncherNameLoop ;Yes, continue the loop !
move.l #CruncherText,d2 ;get CruncherText-Startaddress
move.l #CruncherTextende,d3 ;get CruncherText-Endaddress
bsr PrintDOSText ;branch to subroutine
move.l UPBase(pc),a6 ;get UPBase
move.l UPInfo(pc),a0 ;get UPInfo
lea 8(a0),a3 ;get UPJump-address
lea UPJump(pc),a4 ;get own jump-address
move.l a4,(a3) ;insert own jump-address in UPJump
jsr UnPack(a6) ;call subroutine
cmp.l #0,d0 ;error ?
beq UPErr ;Yes, branch to UPErr
rts ;return from subroutine
UPJump:
bsr CopyCrunched ;branch to virusscan
rts ;return to unpack
CopyCrunched:
move.l ExecBase,a6 ;get ExecBase
move.l UPInfo(pc),a0 ;get UPInfo
move.l 16(a0),a0 ;get Decrunch-address from UPInfo
move.l FileMem(pc),a1 ;get FileMem-address
move.l #$5000,d0 ;get size
jsr CopyMem(a6) ;call subroutine
FileVirusCheck:
move.l #53,d0 ;get counter
lea FileVirusOffsetlist(pc),a0 ;get offsetlist
lea Filevirustestbyteslist(pc),a1;get testbyteslist
lea FilevirusNameList(pc),a3 ;get FileVirusNamelist
CompareFileLoop:
move.l (a0)+,d1 ;get offset
add.l FileMem(pc),d1 ;add filebuffer-address
move.l d1,a2 ;write d1 to a2
move.l (a2),d1 ;get one longword from filebuffer
cmp.l (a1)+,d1 ;is this longword = testbytes ?
beq Filevirus ;Yes, branch to Filevirus
cmp.l #0,(a3)+ ;count FilevirusNamelist
sub.l #1,d0 ;count down
cmp.l #0,d0 ;zero ?
bne CompareFileLoop ;No, continue the loop !
SpecialVirus:
move.l #4,d0 ;get counter
lea SpecialVirusOffsetList(pc),a0; get offsetlist
lea SpecialVirusTestbytesList(pc),a1;get testbyteslist
lea SpecialVirusNameList(pc),a3 ;get SpecialVirusNameList
lea SpecialVirusInvisibleNameList(pc),a5
CompareSpecialVirusLoop:
move.l (a0)+,d1 ;get offset
add.l FileMem(pc),d1 ;add filebufferaddress to offset
move.l d1,a2 ;write d1 to a2
move.l (a2),d1 ;get one longword from filebuffer
cmp.l (a1)+,d1 ;is this longword = testbytes ?
beq KillSpecialVirus ;Yes, branch to KillSpecialVirus
cmp.l #0,(a3)+ ;count SpecialVirusNameList
cmp.l #0,(a5)+ ;count SpecialVirusInvisibleNameList
sub.l #1,d0 ;count down
cmp.l #0,d0 ;zero ?
bne CompareSpecialVirusLoop ;No, continue the loop !
CheckFile2:
move.l FileMem(pc),a0 ;get filebuffer
cmp.l #$60040000,$24(a0) ;RoLe-Virus ?
beq ReturnFile ;Yes, branch to ReturnFile
cmp.l #"-lh5",$2(a0) ;lha-archive ?
beq LHA5 ;Yes, branch to LHA5 !
cmp.l #"PP20",(a0) ;PP-Data ?
beq PPData ;Yes, branch to PPData
move.l FileInfoBlockMem(pc),d0 ;get FIB-structure
add.l #8,d0 ;get filename
move.l d0,a0 ;copy d0 to a0
InvisibleLoop:
cmp.b #$A0,(a0)+ ;Invisible sign in filename ?
beq InvisibleFile ;Yes, branch to InvisibleFile
cmp.b #$00,(a0) ;any more byte ?
bne InvisibleLoop ;Yes, continue the loop !
move.l FileMem(pc),a0 ;get filebuffer
cmp.l #$000003F3,(a0) ;executable ?
bne OK ;No, end CheckFile
LinkLoop:
cmp.l #$000003E9,(a0)+ ;looking for first hunk
bne LinkLoop ;No, continue the loop !
move.l a0,HunkPos ;get Hunk-Startposition
move.l #12,d0 ;get counter
lea LinkvirusOffsetList(pc),a0 ;get offsetlist
lea LinkvirusTestbytesList(pc),a1;get testbyteslist
lea LinkvirusNameList(pc),a3 ;get LinkvirusNameList
CompareLinkLoop:
move.l (a0)+,d1 ;get offset
add.l HunkPos(pc),d1 ;add Hunkposition to offset
move.l d1,a2 ;write d1 to a2
move.l (a2),d1 ;get one longword from hunk
cmp.l (a1)+,d1 ;is this longword = testbytes ?
beq Linkvirus ;Yes, branch to Linkvirus
cmp.l #0,(a3)+ ;count LinkvirusNameList
sub.l #1,d0 ;count down
cmp.l #0,d0 ;zero ?
bne CompareLinkLoop ;No, continue the loop !
CheckFile3:
move.l HunkPos(pc),a0 ;get fisrt Hunkposition
cmp.l #$024D4558,$6CC(a0) ;HQCCruncher ?
beq HQCFile ;Yes, branch to HQCFile
cmp.l #"powe",$60(a0) ;PowerPacker ?
beq PowerPackerFile ;Yes, branch to PowerPackerFile
cmp.l #"xplo",$30(a0) ;Imploder
beq ImploderFile ;Yes, branch to ImploderFile
cmp.l #0,RLBase ;RLBase available ?
beq HunkCheck ;No, branch to HunkCheck
move.l RLBase(pc),a6 ;get RLBase
cmp.l #0,RLStructPtr ;RLStruct available ?
beq HunkCheck ;No, branch to HunkCheck
move.l RLStructPtr(pc),a0 ;get RLStructPtr
lea 26(a0),a3 ;get BufferPtr
move.l FileMem(pc),(a3) ;get FileMem-address
jsr rlGetFileVName(a6) ;call subroutine
move.l RLStructPtr(pc),a0 ;get RLStructPtr
cmp.l #0,(a0) ;filevirus ?
beq HunkCheck ;No, branch to HunkCheck
move.l (a0),a0 ;get address of FileInfection-structure
lea 4(a0),a3 ;get virusname-address
lea 20(a0),a5 ;get origin filename-address
cmp.w #0,16(a0) ;linkvirus ?
beq Linkvirus ;Yes, branch to Linkvirus
cmp.w #1,16(a0) ;filevirus ?
beq Filevirus ;Yes, branch to Filevirus
cmp.w #2,16(a0) ;SpecialVirus ?
beq KillSpecialVirus ;Yes, branch to KillSpecialVirus
HunkCheck:
move.l FileMem(pc),a0 ;get filebuffer
cmp.l #$000003F3,(a0) ;executable ?
beq EXECUTABLEFile ;Yes, branch to ExecutableFile
OK:
move.l Dosbase(pc),a6 ;get DosBase
move.l Dateihandle(pc),d1 ;get Dateihandle
jsr Close(a6) ;call subroutine
OK2:
move.l #FileText2,d2 ;get FileText-Startaddress
move.l #FileText2ende,d3 ;get FileText-Endaddress
bsr PrintDOSText ;branch to subroutine
rts ;return from subroutine
PrintDOSText:
move.l Dosbase(pc),a6 ;get DosBase
move.l Handle(pc),d1 ;get Handle
sub.l d2,d3 ;get Textlength
jsr Write(a6) ;call subroutine
rts ;return from subroutine
FileVirusNameLoop:
move.l #40,d0 ;get counter
lea FileVirusName(pc),a0 ;get FileVirusNamebuffer
ClearFileVirusNameLoop:
move.b #$00,(a0)+ ;clear all bytes
sub.l #1,d0 ;count down
cmp.l #0,d0 ;zero ?
bne ClearFileVirusNameLoop ;No, continue the Loop !
move.l #FileText,d2 ;get FileText-Startaddress
move.l #FileTextende,d3 ;get FileText-Endaddress
lea FileVirusName(pc),a0 ;get FileVirusNamebuffer
FileVirusNameLoopLoop:
move.b (a1)+,(a0)+ ;write Virusname to Filevirusbuffer
cmp.b #$00,(a1) ;zero ?
bne FileVirusNameLoopLoop ;No, continue the loop !
bsr PrintDOSText ;branch to subroutine
rts ;return from subroutine
FileVirus:
clr.l (a2) ;clear testbytes in filebuffer
move.l (a3),a1 ;get VirusText-Address
bsr FileVirusNameLoop ;branch to FileVirusNameLoop
move.l FileInfoBlockMem(pc),d4 ;get FIB-structure
add.l #8,d4 ;get filename
bsr KillFileVirus ;branch to subroutine
bra OK2 ;end CheckFile
ReturnFile:
clr.l $24(a0) ;clear testbytes in filebuffer
lea ReturnoftheLamerExterminatorText(pc),a1
bsr FileVirusNameLoop ;branch to FileVirusNameLoop
move.l FileInfoBlockMem(pc),d4 ;get FIB-structure
add.l #8,d4 ;get filename
bsr KillFileVirus3 ;branch to subroutine
bra OK2 ;end CheckFile
HQCFile:
clr.l $6CC(a0) ;clear testbytes in filebuffer
move.l #HQCCruncherText,d2 ;get HQCCruncherText-StartAddress
move.l #HQCCruncherTextende,d3 ;get HQCCruncherText-Endaddress
bsr PrintDOSText ;branch to subroutine
bra OK ;end CheckFile
PowerPackerFile:
clr.l $60(a0) ;clear testbytes in filebuffer
move.l #PowerPackerText,d2 ;get PowerPackerText-Startaddress
move.l #PowerPackerTextende,d3 ;get PowerPackerText-Endaddress
bsr PrintDOSText ;branch to subroutine
bra OK ;end CheckFile
ImploderFile:
clr.l $30(a0) ;clear the testbytes in filebuffer
move.l #ImploderText,d2 ;get ImploderText-Startaddress
move.l #ImploderTextende,d3 ;get ImploderText-Endaddress
bsr PrintDOSText ;branch to subroutine
bra OK ;end CheckFile
LHA5:
clr.l $2(a0) ;clear the testbytes
move.l #LHA5Text,d2 ;get LHA5Text-Startaddress
move.l #LHA5Textende,d3 ;get LHA5Text-Endaddress
bsr PrintDOSText ;branch to subroutine
bra OK ;end CheckFile
PPData:
clr.l (a0) ;clear the testbytes
move.l #PPDataText,d2 ;get PPDataText-Startaddress
move.l #PPDataTextende,d3 ;get PPDataText-Endaddress
bsr PrintDOSText ;branch to subroutine
bra OK ;end CheckFile
EXECUTABLEFile:
move.l #ExecutableText,d2 ;get ExecutableText-Startaddress
move.l #ExecutableTextende,d3 ;get ExecutableText-Endaddress
bsr PrintDOSText ;branch to subroutine
bra OK ;end CheckFile
InvisibleFile:
move.l #InvisibleFileText,d2 ;get InvisibleText-Startaddress
move.l #InvisibleFileTextende,d3;get InvisibleText-Endaddress
bsr PrintDOSText ;branch to subroutine
move.l FileInfoBlockMem(pc),d4 ;get FIB-structure
add.l #8,d4 ;get filename
bsr KillFileVirus4 ;branch to subroutine
bra OK2 ;end CheckFile
LinkvirusNameLoop:
move.l #40,d0 ;get counter
lea LinkvirusName(pc),a0 ;get LinkvirusNamebuffer-address
ClearLinkvirusNameLoop:
move.b #$00,(a0)+ ;clear the buffer
sub.l #1,d0 ;count down
cmp.l #0,d0 ;zero ?
bne ClearLinkvirusNameLoop ;No, continue the loop !
move.l #LinkText,d2 ;get LinkText-Startaddress
move.l #LinkTextende,d3 ;get LinkText-Endaddress
lea LinkVirusName(pc),a0 ;get Linkvirusnamebuffer-address
LinkVirusNameLoopLoop:
move.b (a1)+,(a0)+ ;write Virusname to LinkvirusNamebuffer
cmp.b #$00,(a1) ;zero ?
bne LinkVirusNameLoopLoop ;No, continue the loop !
bsr PrintDOSText ;branch to subroutine
rts ;return from subroutine
Linkvirus:
clr.l (a2) ;clear testbytes from filebuffer
move.l (a3),a1 ;get VirusText-Address
bsr LinkvirusNameLoop ;branch to LinkvirusLoop
bra OK2 ;end CheckFile
CloseVirus:
move.l Dosbase(pc),a6 ;get DosBase
move.l Dateihandle(pc),d1 ;get Dateihandle
jsr Close(a6) ;call subroutine
rts ;return from subroutine
KillFileVirus:
bsr CloseVirus ;branch to subroutine
KillFileVirus2:
Requester #KillFileTexten,#Yes,#No,#310,#80
cmp.l #0,d0 ;Zero ?
beq KillFileVirusNext ;Yes, do not kill the filevirus
DeleteVirus:
move.l Dosbase(pc),a6 ;get DosBase
move.l d4,d1 ;get filename
move.l #%00000000,d2 ;unprotect
jsr SetProtection(a6) ;call subroutine
move.l Dosbase(pc),a6 ;get DosBase
move.l d4,d1 ;get filename
jsr DeleteFile(a6) ;call subroutine
KillFileVirusNext:
rts ;return from subroutine
RenameVirus:
move.l Dosbase(pc),a6 ;get DosBase
move.l d4,d2 ;get new filename
jsr Rename(a6) ;call subroutine
rts ;return from subroutine
KillSpecialVirus:
clr.l (a2) ;clear testbytes in filebuffer
lea SpecialVirusName(pc),a0 ;get SpecialVirusNamebuffer-address
move.l #40,d0 ;get counter
ClearSpecialVirusNameLoop:
move.b #00,(a0)+ ;clear the buffer
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne ClearSpecialVirusNameLoop ;No, continue the loop !
lea SpecialVirusName(pc),a0 ;get SpecialVirusNamebuffer-address
move.l (a3),a1 ;get Virusname-Address
SpecialVirusNameLoop:
move.b (a1)+,(a0)+ ;write VirusName to SpecialVirusNamebuffer
cmp.b #0,(a1) ;Zero ?
bne SpecialVirusNameLoop ;No, continue the loop !
bsr CloseVirus ;branch to subroutine
Requester #KillSpecialVirusText,#Yes,#No,#610,#70
cmp.l #0,d0 ;Zero ?
beq KillSpecialVirusNext ;Yes, do not kill the filevirus
move.l FileInfoBlockMem(pc),d4 ;get FIB-structure
add.l #8,d4 ;get filename
bsr DeleteVirus ;branch to subroutine
KillSpecialVirusNext:
Requester #SpecialVirusOrigText,#Yes,#No,#610,#70
cmp.l #0,d0 ;Zero ?
beq KillSpecialVirusNextNext ;Yes, do not rename the original
move.l (a5),d1 ;No, get original-filename-address
move.l FileInfoBlockMem(pc),d4 ;get FIB-structure
add.l #8,d4 ;get filename
bsr RenameVirus ;branch to subroutine
KillSpecialVirusNextNext:
bra OK2 ;end CheckFile
KillFileVirus3:
bsr CloseVirus ;branch to subroutine
Requester #RenameFileTexten,#Yes,#No,#400,#70
cmp.l #0,d0 ;Zero ?
beq KillFileVirus3Next ;Yes, do not rename the file
move.l Dosbase(pc),a6 ;get DosBase
move.l d4,d1 ;get old filename
move.l #RETURN,d2 ;get new filename
jsr Rename(a6) ;call subroutine
KillFileVirus3Next:
rts ;return from subroutine
KillFileVirus4:
bsr CloseVirus ;branch to subroutine
Requester #RenameInvisibleFileText,#Yes,#No,#350,#70
cmp.l #0,d0 ;Zero ?
beq KillFileVirus4Next
move.l Dosbase(pc),a6 ;get DosBase
move.l d4,d1 ;get old filename
move.l #CRITICAL,d2 ;get new filename
jsr Rename(a6) ;call subroutine
KillFileVirus4Next:
rts ;return from subroutine
even
AutoRequestText:
dc.b 0,2
dc.b 0
even
dc.w 20,20
dc.l 0
AutoRequestTextPtr:
dc.l 0
dc.l 0
even
KillFileTexten:
dc.b `Shall I delete this File ?`,0
even
KillSpecialVirusText:
dc.b `Shall I delete the filevirus `
SpecialVirusName: blk.b 40,0
even
SpecialVirusOrigText:
dc.b `Shall I rename the original file ?`,0
even
RenameFileTexten:
dc.b `Shall I rename the Disk-Validator ?`,0
even
RenameInvisibleFileText:
dc.b `Shall I rename this file ?`,0
even
GadgetText:
dc.b 0,2
dc.b 0
even
dc.w 4,4
dc.l 0
GadgetTextPtr:
dc.l 0
dc.l 0
even
GadgetText2:
dc.b 0,2
dc.b 0
even
dc.w 4,4
dc.l 0
GadgetText2Ptr:
dc.l 0
dc.l 0
even
Yes:
dc.b `Yes !`,0
even
No:
dc.b `No !`,0
even
ContinueText:
dc.b ` OK `,0
even
ContinueText2:
dc.b 0,2
dc.b 0
even
dc.w 4,4
dc.l 0
dc.l ContinueText
dc.l 0
dc.l 0
even
UnPackErrList:
dc.l OpenErr
dc.l ReadWriteErr
dc.l MemoryErr
dc.l DetermineErr
dc.l PasswordErr
dc.l HunkErr
dc.l ExternErr
dc.l CorruptErr
dc.l DeviceErr
dc.l DevOpenErr
dc.l CRCErr
dc.l CheckSumErr
dc.l OldErr
dc.l DevErrErr
dc.l ProtectErr
dc.l OutputErr
even
OpenErr:
dc.b `Can not open file !`,0
even
ReadWriteErr:
dc.b `Read/Write Error !`,0
even
MemoryErr:
dc.b `not enough memory !`,0
even
DetermineErr:
dc.b `Can not determine file !`,0
even
PassWordErr:
dc.b `Illegal Password !`,0
even
HunkErr:
dc.b `Hunk-Error !`,0
even
ExternErr:
dc.b `Extern File Error !`,0
even
CorruptErr:
dc.b `Crunched file is corrupt !`,0
even
DeviceErr:
dc.b `Illegal Device !`,0
even
DevOpenErr:
dc.b `Could not open device or create port !`,0
even
CRCErr:
dc.b `CRC CheckSum Error !`,0
even
CheckSumErr:
dc.b `CheckSum Error !`,0
even
OldErr:
dc.b `Decruncher In Lib. Too Old !`,0
even
DevErrErr:
dc.b `Error from device !`,0
even
ProtectErr:
dc.b `Could not set Protectionbits !`,0
even
OutputErr:
dc.b `Output File Error !`,0
even
RETURN:
dc.b `:L/LAMER-Virus`,0
even
CRITICAL:
dc.b `:CRITICAL-Virus`,0
even
SpecialVirusNameList:
dc.l BGS9Text
dc.l BGS9IIText
dc.l TerroristsText
dc.l NaSTText
even
SpecialVirusTestbytesList:
dc.l `TTV1`
dc.l `TTV1`
dc.l `TTV1`
dc.l `NaST`
even
SpecialVirusOffsetlist:
dc.l $00000A04
dc.l $00000A04
dc.l $00000620
dc.l $0000007A
even
SpecialVirusInvisibleNameList:
dc.l BGS9Invisible
dc.l BGS9Invisible2
dc.l TerroristsInvisible
dc.l NaSTInvisible
even
BGS9Invisible:
dc.b `:DEVS/ `,0
even
BGS9Invisible2:
dc.b `:DEVS/ é `,0
even
TerroristsInvisible:
dc.b `: `,0
even
NaSTInvisible:
dc.b `:c/ `,0
even
FileNameText: dc.b ` `,0
FileNameTextende:
even
SizeText:
dc.b ` : $`
Length: dc.b `00000000 `,0
SizeTextende:
even
ExecutableText:
dc.b ` :EXECUTABLE `,0
ExecutableTextende:
even
PBits:
dc.b `rwed`,0
even
ProtectText:
dc.b ` `,0
ProtectTextende:
even
FileText2:
dc.b ` : OK`,10
FileText2ende:
even
DirText:
dc.b ` <DIR> `,0
DirTextende:
even
HQCCruncherText:
dc.b $9b,`1;33m`
dc.b ` uses HQC-Cruncher !`,0
dc.b $9b,`0;31m`
HQCCruncherTextende:
even
PowerPackerText:
dc.b $9b,`1;33m`
dc.b ` uses powerpacker-Cruncher !`,0
dc.b $9b,`0;31m`
PowerPackerTextende:
even
ImploderText:
dc.b $9b,`1;33m`
dc.b ` uses implode.library !`,0
dc.b $9b,`0;31m`
ImploderTextende:
even
LHA5Text:
dc.b $9b,`1;33m`
dc.b ` uses lha5-archive !`,0
dc.b $9b,`0;31m`
LHA5Textende:
even
PPDataText:
dc.b $9b,`1;33m`
dc.b ` contains PowerPacker datas !`,0
dc.b $9b,`0;31m`
PPDataTextende:
even
InvisibleFileText:
dc.b $9b,`1;33m`
dc.b ` : ... filename contains invisible signs ! Possibility: FILEVIRUS !!!`,10
dc.b $9b,`0;31m`
InvisibleFileTextende:
even
CruncherText:
dc.b $9b,`1;33m`
dc.b ` :... file is `
CruncherName: blk.b 40,0
dc.b ` crunched !!!`,10
dc.b $9b,`0;31m`
CruncherTextende:
even
FileText:
dc.b $9b,`1;33m`
dc.b ` : ... contains `
FileVirusname: blk.b 40,0
dc.b ` Filevirus !!!`,10
dc.b $9b,`0;31m`
FileTextende:
even
LinkText:
dc.b $9b,`1;33m`
dc.b ` : ... includes `
LinkVirusname: blk.b 40,0
dc.b ` Linkvirus !!!`,10
dc.b $9b,`0;31m`
LinkTextende:
even
LinkvirusNameList:
dc.l AntiChristText
dc.l BestialDevastationText
dc.l CCCPText
dc.l GotchaLamerText
dc.l HochofenText
dc.l IRQText
dc.l QRDLText
dc.l RedOctoberText
dc.l SmilyCancerText
dc.l TravelingJackText
dc.l TravelingJack2Text
dc.l XenoText
even
LinkvirusTestbytesList:
dc.l $00000250
dc.l `VAST`
dc.l `CCCP`
dc.l `tcha`
dc.l `hofe`
dc.l $000003EC
dc.l $60000342
dc.l `devi`
dc.l $60026068
dc.l $48E7FFFE
dc.l $48E7FFFE
dc.l `Nudo`
even
LinkvirusOffsetList:
dc.l $00000788
dc.l $00000070
dc.l $0000004C
dc.l $0000013C
dc.l $00000B90
dc.l $000000A4
dc.l $00000008
dc.l $00000484
dc.l $00000004
dc.l $00000010
dc.l $00000014
dc.l $00000414
even
FilevirusNameList:
dc.l AmigaKnightText
dc.l AntiChristTextText
dc.l BeethovenText
dc.l BlueboxText
dc.l BretHawnesText
dc.l ColorText
dc.l CommodoreText
dc.l CompuPhagozyteText
dc.l CompuPhagozyte2Text
dc.l CompuPhagozyteIIText
dc.l CompuPhagozyteIIIText
dc.l CompuPhagozyteIIIBCText
dc.l CompuPhagozyteIVText
dc.l DStructureText
dc.l DAGCreatorText
dc.l DarthVaderText
dc.l DisasterMasterText
dc.l DiskKillerText
dc.l DisktroyerV10Text
dc.l DisktroyerV20Text
dc.l DiskVal1234Text
dc.l DMTrashText
dc.l DriveInfoText
dc.l ExcrementCreatorText
dc.l FreedomText
dc.l GotchaLamerCreatorText
dc.l GZUSText
dc.l INTELText
dc.l JeffBUTONICV131Text
dc.l JeffBUTONICV300Text
dc.l LamerLoadWBText
dc.l LamerVirusXText
dc.l Liberatorv121Text
dc.l Liberatorv30Text
dc.l Liberatorv501Text
dc.l ModemCheckerText
dc.l ModemCheckerloadWBText
dc.l NANOoldText
dc.l NanonewText
dc.l NoGuruv20Text
dc.l PPBombText
dc.l RevengeOfTheLAMERExterminatorText
dc.l SADDAMText
dc.l SEPULTURAText
dc.l ShowSysopText
dc.l SmilyCancerLoadWBText
dc.l SnoopDosText
dc.l TelecomText
dc.l TFCRevengeLoadWBText
dc.l TimeBombV09Text
dc.l TravelingJackTextText
dc.l VirusConstructionSetText
dc.l xprzspeedV32Text
even
FilevirusTestbytesList:
dc.l `STAR`
dc.l `ntic`
dc.l `Beet`
dc.l `inpu`
dc.l `BRET`
dc.l `TURK`
dc.l `COMM`
dc.l ` Com`
dc.l `The `
dc.l `COMP`
dc.l `agoz`
dc.l `gozy`
dc.l `agoz`
dc.l `Stru`
dc.l $00000510
dc.l `DART`
dc.l $610002FA
dc.l `DISK`
dc.l `iskt`
dc.l `iskt`
dc.l `trac`
dc.l `user`
dc.l $4EAEFF3A
dc.l `EXCR`
dc.l `Free`
dc.l ` LAM`
dc.l `-Zus`
dc.l `oadw`
dc.l `DASA`
dc.l $4E714E71
dc.l `LAME`
dc.l `MER `
dc.l `erat`
dc.l `Libe`
dc.l `Libe`
dc.l `HECK`
dc.l `FUCK`
dc.l `N A `
dc.l `Nano`
dc.l `FNNF`
dc.l `egam`
dc.l $60040000
dc.l `BitM`
dc.l $4E716100
dc.l `SPOS`
dc.l `=WO/`
dc.l `oopD`
dc.l `brar`
dc.l `Fana`
dc.l `VIRU`
dc.l ` Jac`
dc.l `Star`
dc.l `Spee`
even
FilevirusOffsetList:
dc.l $00000342
dc.l $00000008
dc.l $00000044
dc.l $000001A0
dc.l $00000028
dc.l $00000260
dc.l $0000010E
dc.l $00000460
dc.l $00000380
dc.l $000001B0
dc.l $0000035C
dc.l $00000030
dc.l $00000030
dc.l $00000168
dc.l $00000710
dc.l $00000300
dc.l $00000028
dc.l $00000162
dc.l $00000220
dc.l $00000224
dc.l $000006C0
dc.l $000004C2
dc.l $0000002C
dc.l $000000C8
dc.l $0000054E
dc.l $000002F0
dc.l $0000361C
dc.l $0000027C
dc.l $00000206
dc.l $00000088
dc.l $00000448
dc.l $00000460
dc.l $0000129C
dc.l $00002784
dc.l $00003E80
dc.l $000033F0
dc.l $0000054C
dc.l $00000492
dc.l $0000003A
dc.l $000002F0
dc.l $00000410
dc.l $00000020
dc.l $00000702
dc.l $00000180
dc.l $000003D0
dc.l $00000C00
dc.l $000006B0
dc.l $00000290
dc.l $00000050
dc.l $000007C0
dc.l $00000010
dc.l $00000050
dc.l $000023F0
vectors_table:
bsr OpenTable ;open table-window
cmp.l #0,d0 ;error ?
beq vectorsend ;Yes, end vectors_table
move.l d0,vectorshandle ;No, get handle
bsr vectors ;show vectors
bsr vectorswait ;delay vectors
bra vectorsend ;close vectors_table
OpenTable:
move.l Dosbase(pc),a6 ;get ExecBase
move.l #Table,d1 ;get DOSWindowDef-Address
move.l #1006,d2 ;use the mode new
jsr Open(a6) ;call subroutine
rts ;return from subroutine
vectors:
move.l #17,d0 ;get counter
lea ExecVectorsList(pc),a3 ;get vectorslist
lea ExecVectorsNameList(pc),a4 ;get ExecVectorsNameList
ExecVectorsLoop:
move.l (a3)+,d4 ;get offset
move.l 4,a6 ;get ExecBase
add.l d4,a6 ;add offset to ExecBase
move.l (a6),d2 ;write ROM-address to d2
move.l (a4)+,a0 ;get vectorbuffer
bsr hex ;hex !!!
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne ExecVectorsLoop ;No, continue the loop !
bsr FindTrackDisk ;get TrackDiskBase
move.l a1,a6 ;write TrackDiskBase to a6
move.l #2,d0 ;get counter
lea TrackDiskVectorsList(pc),a3 ;get offsetlist
lea TrackDiskVectorsNameList(pc),a4;get TrackDiskVectorsNameList
TrackDiskVectorsLoop:
move.l a6,a1 ;get TrackDiskBase
add.l (a3)+,a1 ;add offset to TrackDiskBase
move.l (a1),d2 ;write ROM-address to d2
move.l (a4)+,a0 ;get vectorbuffer
bsr hex ;hex !!!
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne TrackDiskVectorsLoop ;No, continue the loop !
bsr Findkeyboard ;get KeyBoardBase
move.l -$0000001C(a1),d2 ;get offset
lea BeginIOVec(pc),a0 ;get vectorbuffer
bsr hex ;hex !!!
move.l #4,d0 ;get counter
lea DOSVectorsList(pc),a3 ;get offsetlist
lea DOSVectorsNameList(pc),a4 ;get DOSVectorsNameList
DOSVectorsLoop:
move.l DosBase(pc),a6 ;get DosBase
add.l (a3)+,a6 ;add offset to DosBase
move.l (a6),d2 ;write ROM-address to d2
move.l (a4)+,a0 ;get vectorbuffer
bsr hex ;hex !!!
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne DOSVectorsLoop ;No, continue the loop !
move.l #2,d0 ;get counter
lea IntuitionVectorsList(pc),a3 ;get offsetlist
lea IntuitionVectorsNameList(pc),a4;get IntuitionVectorsNameList
IntuitionLoop:
move.l Intuibase(pc),a6 ;get IntuiBase
add.l (a3)+,a6 ;add offset to Intuibase
move.l (a6),d2 ;write ROM-address to d2
move.l (a4)+,a0 ;get vectorbuffer
bsr hex ;hex !!!
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne IntuitionLoop ;No, continue the loop !
move.l #Systemvectorstabletext,d2;get Systemvectorstabletext-Startaddress
move.l #Systemvectorstableend,d3;get Systemvectorstable-Endaddress
bsr PrintDOSText2 ;branch to subroutine
rts ;return from subroutine
hex:
;this routine converts the ROM-addresses to hexadecimal
;numbers
move.l #8,d1 ;get counter
HexaLoop:
rol.l #4,d2 ;rotate 4 bits left
move.l d2,d3 ;get byte
and.b #$0f,d3 ;get nibble
add.b #$30,d3 ;get ciphers
cmp.b #$39,d3 ;d3 > 9 ?
ble display ;No, diplay hexa-cipher
add.b #7,d3 ;Yes, get letter A-F
Display:
move.b d3,(a0)+ ;display one byte
sub.l #1,d1 ;count down
cmp.l #0,d1 ;Zero ?
bne HexaLoop ;No, continue the loop !
rts ;return from subroutine
vectorswait:
move.l Dosbase(pc),a6 ;get DosBase
move.l #300,d1 ;value for Delay
jsr Delay(a6) ;call subroutine
CloseTable:
move.l Dosbase(pc),a6 ;get DosBase
move.l vectorshandle(pc),d1 ;get handle
jsr Close(a6) ;call subroutine
rts ;return from subroutine
PrintDOSText2:
move.l Dosbase(pc),a6 ;get DosBase
move.l vectorshandle(pc),d1 ;get handle
sub.l d2,d3 ;calculate textlength
jsr Write(a6) ;call subroutine
rts ;return from subroutine
vectorsend:
rts ;return from subroutine
even
Table:
dc.b `CON:0/0/600/200/System-Vectors-Table:`,0
even
Vectorshandle:
dc.l 0
even
ExecVectorsNameList:
dc.l ColdCapture
dc.l CoolCapture
dc.l WarmCapture
dc.l CHKSumVec
dc.l KickCheckSum
dc.l DoIO
dc.l KickMemPtr
dc.l KickTagPtr
dc.l RasterBeamVec
dc.l OldOpenLibraryVec
dc.l OpenLibr
dc.l SKD
dc.l AlertVec
dc.l AllocMemVec
dc.l FreeMemVec
dc.l PutMsgVec
dc.l OpenDeviceVec
even
ExecVectorsList:
dc.l 42
dc.l 46
dc.l 50
dc.l 82
dc.l 554
dc.l -454
dc.l 546
dc.l 550
dc.l $90
dc.l -406
dc.l -550
dc.l -610
dc.l -106
dc.l -196
dc.l -208
dc.l -364
dc.l -442
even
TrackDiskVectorsNameList:
dc.l BeginIO
dc.l CloseVec
even
TrackDiskVectorsList:
dc.l -$0000001C
dc.l -$0000000A
even
DOSVectorsNameList:
dc.l OP
dc.l LoadSeg
dc.l WriteVec
dc.l LockVec
even
DOSVectorsList:
dc.l -28
dc.l -148
dc.l -46
dc.l -82
even
IntuitionVectorsNameList:
dc.l WindowOpen
dc.l DisplayAlertVec
even
IntuitionVectorsList:
dc.l -202
dc.l -88
even
Systemvectorstabletext:
dc.b ` ExecBase:`,10
dc.b ` ColdCapture: $`
ColdCapture: dc.b `00000000`,0
dc.b ` CoolCapture: $`
CoolCapture: dc.b `00000000`,10
dc.b ` WarmCapture: $`
WarmCapture: dc.b `00000000`,0
dc.b ` ChkSum: $`
CHKSumVec: dc.b `00000000`,10
dc.b ` KickMemPtr: $`
KickMemPtr: dc.b `00000000`,0
dc.b ` KickTagPtr: $`
KickTagPtr: dc.b `00000000`,10
dc.b ` KickCheckSum: $`
KickCheckSum: dc.b `00000000`,0
dc.b ` RasterBeam Int.$`
RasterBeamVec: dc.b `00000000`,10
dc.b ` exec.library:`,10
dc.b ` Alert: $`
AlertVec: dc.b `00000000`,0
dc.b ` AllocMem: $`
AllocMemVec: dc.b `00000000`,10
dc.b ` FreeMem: $`
FreeMemVec: dc.b `00000000`,0
dc.b ` PutMsg: $`
PutMsgVec: dc.b `00000000`,10
dc.b ` OldOpenLibrary: $`
OldOpenLibraryVec: dc.b `00000000`,0
dc.b ` OpenDevice: $`
OpenDeviceVec: dc.b `00000000`,10
dc.b ` DoIO: $`
DoIO: dc.b `00000000`,0
dc.b ` OpenLibrary: $`
OpenLibr: dc.b `00000000`,10
dc.b ` SumKickData: $`
SKD: dc.b `00000000`,10
dc.b ` dos.library:`,10
dc.b ` Open: $`
OP: dc.b `00000000`,0
dc.b ` Write: $`
WriteVec: dc.b `00000000`,10
dc.b ` Lock: $`
LockVec: dc.b `00000000`,0
dc.b ` LoadSeg: $`
LoadSeg: dc.b `00000000`,10
dc.b ` intuition.library:`,10
dc.b ` DisplayAlert: $`
DisplayAlertVec: dc.b `00000000`,0
dc.b ` OpenWindow: $`
WindowOpen: dc.b `00000000`,10
dc.b ` trackdisk.device:`,10
dc.b ` BeginIO: $`
BeginIO: dc.b `00000000`,0
dc.b ` Close: $`
CloseVec: dc.b `00000000`,10
dc.b ` keyboard.device:`,10
dc.b ` BeginIO: $`
BeginIOVec: dc.b `00000000`,10
Systemvectorstableend:
even
CheckMem:
move.l #129,d0
lea AbsoluteMemoryPositionVirusOffsetList(pc),a0
lea AbsoluteMemoryPositionVirusTestbytesList(pc),a1
lea AbsoluteMemoryPositionVirusNameList(pc),a3
CompareAbsMemLoop:
move.l (a0)+,a2 ;get offset
move.l (a2),d1 ;get longword from offset-position
cmp.l (a1)+,d1 ;is this longword = testbytes ?
beq AMIGAMemoryVirus ;Yes, branch to AMIGAMemoryVirus
cmp.l #0,(a3)+ ;count AbsoluteMemoryPositionVirusNameList
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne CompareAbsMemLoop ;No, continue the loop !
ColdRelativeMemoryPosition:
move.l #8,d0
lea ColdRelativeMemoryPositionVirusOffsetList(pc),a0
lea ColdRelativeMemoryPositionVirusTestbytesList(pc),a1
lea ColdRelativeMemoryPositionVirusNameList(pc),a3
CompareColdRelativeMemoryPositionLoop:
move.l (a0)+,d1 ;get offset
move.l ExecBase,a6 ;get ExecBase
move.l 42(a6),d2 ;get ColdCapture-Startaddress
add.l d2,d1 ;add offset to this Startaddress
move.l d1,a2 ;write d1 to a2
move.l (a2),d1 ;write longword from memory to d1
cmp.l (a1)+,d1 ;is this longword = testbytes ?
beq AMIGAMemoryVirus ;Yes, branch to AMIGAMemoryVirus
cmp.l #0,(a3)+ ;count ColdRelativeMemoryPositionVirusNameList
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne CompareColdRelativeMemoryPositionLoop;No, continue the loop !
CoolRelativeMemoryPosition:
move.l #23,d0
lea CoolRelativeMemoryPositionVirusOffsetList(pc),a0
lea CoolRelativeMemoryPositionVirusTestbytesList(pc),a1
lea CoolRelativeMemoryPositionVirusNameList(pc),a3
CompareCoolRelativeMemoryPositionLoop:
move.l (a0)+,d1 ;get offset
move.l ExecBase,a6 ;get ExecBase
move.l 46(a6),d2 ;get CoolCapture-Startaddress
add.l d2,d1 ;add offset to this Startaddress
move.l d1,a2 ;write d1 to a2
move.l (a2),d1 ;write longword from memory to d1
cmp.l (a1)+,d1 ;is this longword = testbytes ?
beq AMIGAMemoryVirus ;Yes, branch to AMIGAMemoryVirus
cmp.l #0,(a3)+ ;count CoolRelativeMemoryPositionVirusNameList
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne CompareCoolRelativeMemoryPositionLoop;No, continue the loop !
move.l ExecBase,a6 ;get ExecBase
move.l 550(a6),ROMTag ;get first ROMTag
KickTagRelativeMemoryPosition:
move.l #56,d0
lea KickTagRelativeMemoryPositionVirusOffsetList(pc),a0
lea KickTagRelativeMemoryPositionVirusTestbytesList(pc),a1
lea KickTagRelativeMemoryPositionVirusNameList(pc),a3
CompareKickTagRelativeMemoryPositionLoop:
move.l (a0)+,d1 ;get offset
move.l ROMTag(pc),d2 ;get ROMTag-Startaddress
add.l d2,d1 ;add offset to this Startaddress
move.l d1,a2 ;write d1 to a2
move.l (a2),d1 ;write longword from memory to d1
cmp.l (a1)+,d1 ;is this longword = testbytes ?
beq AMIGAMemoryVirus ;Yes, branch to AMIGAMemoryVirus
cmp.l #0,(a3)+ ;count KickTagRelativeMemoryPositionVirusNameList
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne CompareKickTagRelativeMemoryPositionLoop;No, continue the loop !
move.l ROMTag(pc),a0 ;get next ROMTag
cmp.l #0,4(a0) ;any more lists ?
beq CheckMemNext ;No, branch to CheckMemNext
move.l 4(a0),ROMTag ;get next ROMTag
sub.l #$80000000,ROMTag ;remove bit
bra KickTagRelativeMemoryPosition;scan the next ROMTag !
CheckMemNext:
lea HochofenName(pc),a1 ;get HochofenName-Address
bsr Task ;branch to subroutine
cmp.l #0,d0 ;Zero ?
bne Hochofen ;No, its the Hochofen-virus
lea ModemCheckerName(pc),a1 ;get ModemCheckerName-Address
bsr Task ;branch to subroutine
cmp.l #0,d0 ;Zero ?
bne ModemChecker ;No, its the ModemChecker-virus
cmp.l #0,RLBase ;RLBase available ?
beq KillMem ;No, branch to KillMem
move.l RLBase(pc),a6 ;get RLBase
cmp.l #0,RLStructPtr ;RLStruct available ?
beq KillMem ;No, branch to KillMem
move.l RLStructPtr(pc),a0 ;get RLStructPtr
jsr rlKillMemV(a6) ;call subroutine
move.l RLStructPtr(pc),a0 ;get RLStruct
cmp.l #0,4(a0) ;virus in memory ?
beq KillMem ;no, branch to KillMem
move.l 4(a0),a0 ;get MemoryInfection-structure
lea 4(a0),a3 ;get VirusNamePtr
bra AMIGAMemoryVirus ;branch to subroutine
Task:
move.l ExecBase,a6 ;get ExecBase
jsr FindTask(a6) ;call subroutine
rts ;return from subroutine
KillMem:
move.l ExecBase,a6 ;get ExecBase
cmp.l #0,42(a6) ;is ColdCapture at zero ?
bne AskColdCapture ;No, branch to AskColdCapture
KillMemII:
move.l ExecBase,a6 ;get ExecBase
cmp.l #0,46(a6) ;is CoolCapture at zero ?
bne AskCoolCapture ;No, branch to AskCoolCapture
KillMemIII:
move.l ExecBase,a6 ;get ExecBase
cmp.l #0,550(a6) ;is KickTagPtr at zero ?
bne AskKickTagPtr ;No, branch to KickTagPtr
KillMem2:
bra NoAMIGAMemoryVirus ;branch to NoAMIGAMemoryVirus
AskColdCapture:
Requester #AColdText,#Yes,#No,#360,#70
cmp.l #1,d0 ;was Yes-Gadget touched ?
beq KillColdCapture ;Yes, KillColdCapture
bra KillMemII ;No, branch to KillMemII
AskCoolCapture:
Requester #ACoolText,#Yes,#No,#360,#70
cmp.l #1,d0 ;was Yes-Gadaget touched ?
beq KillCoolCapture ;Yes, KillCoolCapture
bra KillMemIII ;No, branch to KillMemIII
AskKickTagPtr:
Requester #AKickText,#Yes,#No,#360,#70
cmp.l #1,d0 ;was Yes-Gadget touched
beq KillKickTagPtr ;Yes, KillKickTagPtr
bra NoAMIGAMemoryVirus ;No, branch to NoAMIGAMemoryVirus
KillColdCapture:
move.l 4,a6 ;get ExecBase
clr.l 42(a6) ;clear ColdCapture
bsr ChkSum ;calculate new ChkSum
bra KillMemII ;branch to KillMemII
KillCoolCapture:
move.l 4,a6 ;get ExecBase
clr.l 46(a6) ;clear CoolCapture
bsr ChkSum ;calculate new ChkSum
bra KillMemIII ;branch to KillMemIII
ChkSum:
clr.w 82(a6) ;clear old ChkSum
lea 34(a6),a0 ;get Versionnumber
clr.l d0 ;clear d0
moveq #23,d0 ;get counter
clr.w d1 ;clear d1
ChkSumLoop:
add.w (a0)+,d1 ;add the lower words
;of the ExecBase-structure
dbf d0,ChkSumLoop ;until d0 is count down
not.w d1 ;invert this sum
move.w d1,82(a6) ;get new ChkSum
clr.l d0 ;clear d0
rts ;return from subroutine
KillKickMemPtr:
move.l 4,a6 ;get ExecBase
move.l 546(a6),a0 ;get KickMemPtr
move.l (a0),d0 ;get successor
move.l d0,546(a6) ;enter address of successor
;to KickMemPtr
bsr KillKickCheckSum ;calculate new KickCheckSum
rts ;return from subroutine
KillKickTagPtr:
move.l 4,a6 ;get ExecBase
move.l 550(a6),a0 ;get KickTagPtr
move.l 4(a0),d0 ;get successor
move.l d0,550(a6) ;enter address of successor
;to KickTagPtr
cmp.l #0,550(a6) ;new entry ?
beq NoAMIGAMemoryVirus ;No, branch to NoAMIGAMemoryVirus
sub.l #$80000000,550(a6) ;remove bit
bsr KillKickCheckSum ;calculate new KickCheckSum
bra NoAMIGAMemoryVirus ;branch to NoAMIGAMemoryVirus
KillKickCheckSum:
move.l 4,a6 ;get ExecBase
jsr -612(a6) ;call subroutine
move.l d0,554(a6) ;enter new KickCheckSum
;to KickCheckSum
rts ;return from subroutine
FindTrackDisk:
move.l ExecBase,a6 ;get ExecBase
lea $0000015E(a6),a0 ;get ListPtr
lea TrackName(pc),a1 ;get DevName
jsr FindName(a6) ;call subroutine
move.l d0,a1 ;get address of TrackDisk
rts ;return from subroutine
Findkeyboard:
move.l ExecBase,a6 ;get ExecBase
lea $0000015E(a6),a0 ;get ListPtr
lea KeyName(pc),a1 ;get DevName
jsr FindName(a6) ;call subroutine
move.l d0,a1 ;get address of Keyboard
rts ;return from subroutine
returntoSystem:
rts ;return from subroutine
even
ROMTag:
dc.l 0
even
AColdText:
dc.b `Shall I restore ColdCapture ?`,0
even
ACoolText:
dc.b `Shall I restore CoolCapture ?`,0
even
AKickText:
dc.b `Shall I restore KickTagPtr ?`,0
even
TrackName:
dc.b `trackdisk.device`,0
even
KeyName:
dc.b `keyboard.device`,0
even
Hochofenname:
dc.b `Greetings to Hochofen`,0
even
ModemCheckerName:
dc.b `Diskdriver.proc`,0
even
AbsoluteMemoryPositionVirusNameList:
dc.l The16BitCrewText
dc.l The2001Text
dc.l AEKText
dc.l AIDSText
dc.l AlienNewBeatText
dc.l AmigaMasterText
dc.l ASSText
dc.l ASVText
dc.l AsylantText
dc.l BamigaSectorOneText
dc.l BBProtText
dc.l BeethovenText
dc.l BigBossText
dc.l BlackflashText
dc.l BladeRunnersText
dc.l BLFText
dc.l BlowJobText
dc.l BretHawnesText
dc.l ButonicText
dc.l ByteVoyagerText
dc.l ByteVoyagerIIText
dc.l CascadeText
dc.l ClonkText
dc.l CodersNightmareText
dc.l ColorText
dc.l CompuPhagozyteText
dc.l CompuPhagozyte2Text
dc.l CompuPhagozyteIIText
dc.l CompuPhagozyteIIIText
dc.l CompuPhagozyteIIIBCText
dc.l CompuPhagozyteIVText
dc.l DStructureText
dc.l DAGText
dc.l DAT89Text
dc.l DATACRIMEText
dc.l DigitalEmotionsText
dc.l DisgustText
dc.l DiskguardText
dc.l DiskHerpesText
dc.l DiskTerminatorText
dc.l DottyText
dc.l DUMDUMText
dc.l ExcrementText
dc.l ExecutorsText
dc.l FASTText
dc.l FastEddieText
dc.l GadaffiText
dc.l GlasnostText
dc.l GoldenRiderText
dc.l GraffitiText
dc.l GremlinText
dc.l GXTeamText
dc.l GyrosText
dc.l HCSText
dc.l HCSIIText
dc.l HillyText
dc.l HODENText
dc.l IceText
dc.l IndianaJonesText
dc.l InfectorText
dc.l InfluenzaText
dc.l INGOText
dc.l JITRText
dc.l JulieText
dc.l KaukiText
dc.l KefrensText
dc.l KilledText
dc.l LADSText
dc.l LoverboySexmachineText
dc.l LSDText
dc.l MADIIText
dc.l MEXXText
dc.l MGM89Text
dc.l MOSHText
dc.l MOSH2Text
dc.l MutilatorText
dc.l NANOoldText
dc.l NANOnewText
dc.l NastyNastyText
dc.l NorthStarText
dc.l NorthStarIIText
dc.l OverkillText
dc.l PARATAXIText
dc.l PARATAXIIIText
dc.l PayDayText
dc.l PentagonSlayerText
dc.l PentagonSlayer2Text
dc.l PentagonSlayer3Text
dc.l PlastiqueText
dc.l REPText
dc.l REVENGEText
dc.l SachsenText
dc.l SADDAMHUSSEINText
dc.l SaoPauloText
dc.l SATANText
dc.l SCAText
dc.l SendarionText
dc.l SherlockText
dc.l SmilyCancerText
dc.l SSText
dc.l SSIIText
dc.l SuicideMachineText
dc.l SuperboyText
dc.l SupplyTeamText
dc.l SystemZV30Text
dc.l SystemZV40Text
dc.l SystemZV50Text
dc.l SystemZV51Text
dc.l SystemZV53Text
dc.l SystemZV54Text
dc.l SystemZV61Text
dc.l TargetText
dc.l TelStarText
dc.l TermigatorText
dc.l TIMEBOMBText
dc.l TNKText
dc.l TomatesGentechnic10Text
dc.l TomatesGentechnic20text
dc.l TURKText
dc.l UltrafoxText
dc.l USSR492Text
dc.l VirusConstructionSetBootblockText
dc.l VirusSlayerText
dc.l VirusV1Text
dc.l WahnfriedText
dc.l WARHAWKText
dc.l ZaccessV10Text
dc.l ZLXText
dc.l ZombiText
even
AbsoluteMemoryPositionVirusTestbytesList:
dc.l $43726577
dc.l $30303132
dc.l ` AEK`
dc.l $48495621
dc.l `ALIE`
dc.l `Mast`
dc.l `ROTE`
dc.l `SV!A`
dc.l `ASYL`
dc.l `BS1!`
dc.l `B-Pr`
dc.l `BETH`
dc.l `A!BI`
dc.l `blac`
dc.l `lade`
dc.l `trac`
dc.l `cato`
dc.l `BRET`
dc.l `BAHA`
dc.l `VOYA`
dc.l `oyag`
dc.l `Casc`
dc.l `LONK`
dc.l `oder`
dc.l `TURK`
dc.l `gozy`
dc.l `The `
dc.l `COMP`
dc.l `agoz`
dc.l `gozy`
dc.l `agoz`
dc.l `Stru`
dc.l `from`
dc.l `T '8`
dc.l `DATA`
dc.l `EMOT`
dc.l `Viru`
dc.l `DISK`
dc.l ` H e`
dc.l `isk-`
dc.l `Dott`
dc.l `MDUM`
dc.l `EXCR`
dc.l `XECU`
dc.l `ains`
dc.l `EDDI`
dc.l $47414441
dc.l `Glas`
dc.l `Gold`
dc.l `fiti`
dc.l `grap`
dc.l `libr`
dc.l `GYRO`
dc.l $482E432E
dc.l `H.C.`
dc.l `dos.`
dc.l `HODE`
dc.l `INC!`
dc.l `ndia`
dc.l `INFE`
dc.l `I N `
dc.l `INGO`
dc.l `JITR`
dc.l `dos.`
dc.l `dos.`
dc.l `efre`
dc.l `Kill`
dc.l `LADS`
dc.l `Love`
dc.l $4C534421
dc.l $004D4144
dc.l `MEXX`
dc.l `MGM8`
dc.l `MOSH`
dc.l `MOSH`
dc.l `grap`
dc.l `N A `
dc.l `Nano`
dc.l `Nast`
dc.l $4E4F5254
dc.l $57726974
dc.l `Over`
dc.l `PARA`
dc.l `PARA`
dc.l `PayD`
dc.l $656E7461
dc.l `enta`
dc.l `enta`
dc.l ` L A`
dc.l `REP!`
dc.l $52657665
dc.l `ACHS`
dc.l `2000`
dc.l `PAUL`
dc.l `ATAN`
dc.l $53434121
dc.l `Send`
dc.l `ORSI`
dc.l $52494F4E
dc.l `!SS!`
dc.l `HEIL`
dc.l `uici`
dc.l `Supe`
dc.l `uppl`
dc.l ` V3.`
dc.l ` V4.`
dc.l ` V5.`
dc.l `5.1 `
dc.l `V5.3`
dc.l `V5.4`
dc.l `V6.1`
dc.l $43524E00
dc.l `grap`
dc.l `NsAx`
dc.l $424F4D42
dc.l `TNK!`
dc.l `OMAT`
dc.l `Toma`
dc.l `TURK`
dc.l `NuNu`
dc.l `Sent`
dc.l $00BFE001
dc.l `VIRU`
dc.l `sind`
dc.l `AHNF`
dc.l `WARH`
dc.l `ZACC`
dc.l `ZLX!`
dc.l `bi I`
even
AbsoluteMemorypositionVirusOffsetList:
dc.l $0007EDE0
dc.l $0007EFE8
dc.l $0007EFD0
dc.l $0007EFF0
dc.l $00020240
dc.l $0007EF30
dc.l $0007F4B2
dc.l $0007DF00
dc.l $0007EF30
dc.l $0007EFE8
dc.l $0007A338
dc.l $0007F008
dc.l $0007EFE2
dc.l $0007F010
dc.l $0007EF30
dc.l $0007F31A
dc.l $0007F02E
dc.l $0007F004
dc.l $0007EF2C
dc.l $0007F330
dc.l $0007F2E2
dc.l $0007E3E2
dc.l $0007D398
dc.l $0007FA5C
dc.l $00070260
dc.l $0007C400
dc.l $0007C380
dc.l $0007C1B0
dc.l $0007C35C
dc.l $0007C030
dc.l $0007C030
dc.l $0007C168
dc.l $0007EFB6
dc.l $0007FAC0
dc.l $0007DDC6
dc.l $0007EE80
dc.l $0007EDB8
dc.l $0007FCF4
dc.l $0007EF90
dc.l $0007EF24
dc.l $0007F018
dc.l $0007FA10
dc.l $0007F454
dc.l $0007EF48
dc.l $0007F240
dc.l $0007F3D4
dc.l $0007FB40
dc.l $0007F730
dc.l $0007C34C
dc.l $0007EF90
dc.l $0007F760
dc.l $0007F8C0
dc.l $0007EE3E
dc.l $0007EF44
dc.l $0007EF4E
dc.l $0007F440
dc.l $0007F2D4
dc.l $0007EFE4
dc.l $0007E91E
dc.l $0007F310
dc.l $0007F3D2
dc.l $0007F408
dc.l $0007EC18
dc.l $0007F826
dc.l $0007EE98
dc.l $0007EFAC
dc.l $0007EE64
dc.l $0007F408
dc.l $0007EDD6
dc.l $0007EFE4
dc.l $0007FB72
dc.l $0007EFE4
dc.l $0007E582
dc.l $0007C016
dc.l $0007C016
dc.l $0007CD4C
dc.l $0007C492
dc.l $0007C03A
dc.l $0007F1D6
dc.l $0007EF84
dc.l $0007EF9A
dc.l $0007F722
dc.l $0007EFCC
dc.l $0007EE82
dc.l $0007EC10
dc.l $0007FD86
dc.l $0007F368
dc.l $0007E2DA
dc.l $0007EE12
dc.l $0007EFE4
dc.l $0007E3E2
dc.l $000782D8
dc.l $0007F012
dc.l $0007FEF0
dc.l $0007CF26
dc.l $0007EFE8
dc.l $0007E3E2
dc.l $0007FCF6
dc.l $0007FB00
dc.l $0007C012
dc.l $0007C01A
dc.l $0007E424
dc.l $0007EEE2
dc.l $0007F2C8
dc.l $0007F42A
dc.l $0007F42A
dc.l $0007F42A
dc.l $0007F42C
dc.l $0007F42A
dc.l $0007F42A
dc.l $0007F42A
dc.l $0007ED9C
dc.l $0007FED4
dc.l $0007F712
dc.l $00070346
dc.l $0007EFE4
dc.l $00070182
dc.l $0007F640
dc.l $0007F066
dc.l $0007EDB0
dc.l $0007F454
dc.l $0007F146
dc.l $0007FA10
dc.l $0007EF22
dc.l $0007F312
dc.l $0007E966
dc.l $0007EDD6
dc.l $0007EFE4
dc.l $0007A18C
even
ColdRelativeMemoryPositionVirusNameList:
dc.l DestructorText
dc.l DiskVal1234Text
dc.l HARDEXText
dc.l Joshua2Text
dc.l LAMEText
dc.l LOOMText
dc.l RISCText
dc.l SADDAMText
even
ColdRelativeMemoryPositionVirusTestbytesList:
dc.l `estr`
dc.l $0C681234
dc.l `RDEX`
dc.l `trac`
dc.l `LAME`
dc.l `LOOO`
dc.l `ISC `
dc.l `libr`
even
ColdRelativeMemoryPositionVirusOffsetList:
dc.l $00000180
dc.l $00000148
dc.l $0000057E
dc.l $00000242
dc.l $0000014A
dc.l $0000057C
dc.l $0000057E
dc.l $00000560
even
CoolRelativeMemoryPositionVirusNameList:
dc.l AIDS2Text
dc.l AngelText
dc.l AustralianParasiteText
dc.l BadBytesText
dc.l BlizzProV31Text
dc.l BlizzProV33Text
dc.l CCCPText
dc.l CrackerExterminatorText
dc.l Crime2Text
dc.l CrimePlusText
dc.l DarthVaderText
dc.l DiskDoktorsText
dc.l DISKFurunkelText
dc.l DivinaExterminatorText
dc.l ExcrementText
dc.l LameBlameText
dc.l MICROSYSTEMSText
dc.l MOSH2Text
dc.l ObeliskText
dc.l PARATAXIIText
dc.l QRDLText
dc.l USSR492Text
dc.l WAFTText
even
CoolRelativeMemoryPositionVirusTestbytesList:
dc.l `A'e*`
dc.l `Ange`
dc.l `Aust`
dc.b `TTS `
dc.l `Bliz`
dc.l `Bliz`
dc.l `CCCP`
dc.l `CRAC`
dc.l `Crim`
dc.l `rime`
dc.l `DART`
dc.l `Dokt`
dc.l `DISK`
dc.l `IVIN`
dc.l `EXCR`
dc.l `ameB`
dc.l `MICR`
dc.l `MOSH`
dc.l `GURU`
dc.l `ARAT`
dc.l `QRDL`
dc.l `Sent`
dc.l `est-`
even
CoolRelativeMemoryPositionVirusOffsetList:
dc.l $0000033E
dc.l $00000262
dc.l $000002DE
dc.l $00000310
dc.l -$00000222
dc.l -$00000238
dc.l -$00000030
dc.l -$00000096
dc.l $00000346
dc.l $000002B8
dc.l $00000268
dc.l $0000017C
dc.l $0000035C
dc.l $000002EA
dc.l -$00000026
dc.l $00000050
dc.l $0000032C
dc.l -$00000072
dc.l -$00000034
dc.l $0000013C
dc.l $00000190
dc.l -$00000026
dc.l $000002DE
even
KickTagRelativeMemoryPositionVirusNameList:
dc.l AmigaFreakText
dc.l AmigaKnightText
dc.l BGS9Text
dc.l BootXText
dc.l ByteBanditText
dc.l ByteBanditPlusText
dc.l ByteBandit2Text
dc.l ByteBanditturboText
dc.l ByteWarriorText
dc.l CobraText
dc.l DetlefText
dc.l DisasterMasterText
dc.l ElectroVisionText
dc.l EuropeanText
dc.l ExtremeText
dc.l FICAText
dc.l ForpibText
dc.l FrityText
dc.l GermanyText
dc.l GuardiansBootAidsText
dc.l HaukeText
dc.l IncognitoText
dc.l IngerIQText
dc.l IngosReturnText
dc.l IRQText
dc.l JeffBUTONICV131Text
dc.l JeffBUTONICV300Text
dc.l JoshuaText
dc.l LamerExterminatoroldIIIText
dc.l LamerExterminatornewText
dc.l LamerExterminatorIText
dc.l LamerExterminatorIIText
dc.l LamerExterminatorIVVText
dc.l LamerExterminatorVIText
dc.l LamerExterminatorVIIText
dc.l LamerExterminatorVIIIText
dc.l NaSTText
dc.l Obelisk2Text
dc.l OPAPAText
dc.l ReturnoftheLamerExterminatorText
dc.l RevengeBootloaderText
dc.l RevengeOfTheLAMERExterminatorText
dc.l RevengeOfTheLAMERExterminatorText
dc.l SCARFACEText
dc.l SEPULTURAText
dc.l ShitText
dc.l SonjaText
dc.l SystemZV64Text
dc.l SystemZV65Text
dc.l TerroristsText
dc.l TFCRevengeText
dc.l UKLamerStyleText
dc.l VIPHSText
dc.l WarsawAvengerText
dc.l ZaccessV20Text
dc.l ZaccessV30Text
even
KickTagRelativeMemoryPositionVirusTestbytesList:
dc.l `AMIG`
dc.l `STAR`
dc.l `TTV1`
dc.l `Boot`
dc.l $42616E64
dc.l `NqNq`
dc.l `dos.`
dc.l `trac`
dc.l `Viru`
dc.l `OBRA`
dc.l `intu`
dc.l `-seq`
dc.l `ELEC`
dc.l `Euro`
dc.l `XTRE`
dc.l `F.I.`
dc.l `FORP`
dc.l `rity`
dc.l `Germ`
dc.l `-aid`
dc.l `Hauk`
dc.l `dos.`
dc.l `nger`
dc.l `INGO`
dc.l `RQ-T`
dc.l `JEFF`
dc.l `DASA`
dc.l `trac`
dc.l `LAME`
dc.l `LAME`
dc.l `AMER`
dc.l `LAME`
dc.l `AMER`
dc.l `AMER`
dc.l `LAME`
dc.l `LAME`
dc.l `NaST`
dc.l `BELI`
dc.l `PARA`
dc.l `amer`
dc.l `Reve`
dc.l $38204F63
dc.l `1986`
dc.l `SCAR`
dc.l `brar`
dc.l `SHIT`
dc.l `onja`
dc.l `V6.4`
dc.l `V6.5`
dc.l `TTV1`
dc.l `anat`
dc.l `devi`
dc.l `VIPH`
dc.l `rsaw`
dc.l `ZACC`
dc.l `ACCE`
even
KickTagRelativeMemoryPositionVirusOffsetList:
dc.l -$000003C4
dc.l $00000242
dc.l $00000A26
dc.l -$00000184
dc.l -$000003C2
dc.l -$0000013C
dc.l -$000003BC
dc.l -$0000002A
dc.l $000002B4
dc.l -$00000052
dc.l $00000218
dc.l $00000562
dc.l -$000003D2
dc.l -$000003D2
dc.l -$000001A2
dc.l $000004CA
dc.l -$000003C8
dc.l -$000003CA
dc.l -$000003D2
dc.l -$00000024
dc.l -$000003D2
dc.l -$000003BE
dc.l -$000003CE
dc.l -$0000002A
dc.l -$00000348
dc.l $0000099C
dc.l $000001A6
dc.l $000000EA
dc.l -$0000002E
dc.l -$00000028
dc.l -$00000022
dc.l -$0000002A
dc.l -$00000026
dc.l -$00000028
dc.l -$00000090
dc.l -$00000064
dc.l $0000009C
dc.l -$0000009C
dc.l -$00000098
dc.l -$000000DC
dc.l -$000003B8
dc.l -$00000834
dc.l -$0000082A
dc.l -$0000003E
dc.l $00000698
dc.l -$0000017C
dc.l -$0000001E
dc.l -$000003DA
dc.l -$000003DA
dc.l $0000007A
dc.l -$00000126
dc.l -$000000E0
dc.l -$00000398
dc.l -$00000370
dc.l -$000003CC
dc.l -$0000019C
NoAMIGAMemoryVirus:
cmp.b #$FF,fastcheck ;was fastcheck-flag set ?
beq returntoSystem ;Yes, returntoSystem
move.l ExecBase,a6 ;get ExecBase
move.l #MEMF_LARGEST,d1 ;want connected memory
move.l #$5000,d0 ;want $5000 bytes
jsr AllocMem(a6) ;call subroutine
move.l d0,DiskValMem ;get MemPtr
tst.l d0 ;error ?
beq NoMemAlert ;Yes, branch to NoMemAlert
clr.b TrackdiskFlag ;clear TrackDiskFlag
clr.l AddressCounter ;clear AddressCounter
clr.l DriveCounter ;clear DriveCounter
clr.l DriveLoopCounter ;clear DriveLoopCounter
clr.l OpenDriveCount ;clear OpenDriveCount
OpenDrivesLoop:
bsr BootblockStart ;open TrackDiskDevice
cmp.b #$FF,TrackdiskFlag ;No more drives ?
beq OpenDrivesLoopEnd ;Yes, end the loop
add.l #4,AddressCounter ;count up AddressCounter
add.l #1,DriveCounter ;count up DriveCounter
add.l #1,OpenDriveCount ;count up OpenDriveCount
cmp.l #4,OpenDriveCount ;all floopydisks opened ?
bne OpenDrivesLoop
OpenDrivesLoopEnd:
cmp.l #0,OpenDriveCount ;TrackDisk-Error ?
beq IntuiEnde2 ;Yes, branch to IntuiEnde2
sub.l #4,AddressCounter ;correct AddressCounter
sub.l #1,DriveCounter ;correct DriveCounter
move.l Intuibase(pc),a6 ;get Intuibase
lea NewWindow(pc),a0 ;get NewWindow-structure
jsr OpenWindow(a6) ;call subroutine
move.l d0,Winhandle ;get Winhandle
bra IntuiWait3 ;branch to IntuiWait3
IntuiWait:
move.l Winhandle(pc),a0 ;get Winhandle
move.l ExecBase,a6 ;get ExecBase
move.l 86(a0),a0 ;get Message
jsr GetMsg(a6) ;call subroutine
IntuiWait3:
move.l Winhandle(pc),a0 ;get Winhandle
move.l 86(a0),a0 ;get Message
move.l ExecBase,a6 ;get ExecBase
jsr WaitPort(a6) ;call subroutine
move.l d0,a1 ;get Message
move.l 20(a1),d1 ;write Message to d1
cmp.l #$8000,d1 ;Diskinserted ?
beq VirusCheck ;Yes, branch to VirusCheck
IntuiPart2:
cmp.l #$200,d1 ;WindowClosed ?
beq IntuiEnde ;Yes, end Intui
bra IntuiWait ;branch to IntuiWait
IntuiEnde:
move.l Winhandle(pc),a0 ;get Winhandle
move.l Intuibase(pc),a6 ;get Intuibase
jsr CloseWindow(a6) ;call subroutine
clr.l AddressCounter ;clear AddressCounter
clr.l DriveCounter ;clear DriveCounter
clr.l DriveLoopCounter ;clear DriveLoopCounter
CloseDriveLoop:
add.l #1,DriveLoopCounter ;count up DriveLoopCounter
bsr BootblockEnde ;close TrackDiskDevice
add.l #4,AddressCounter ;count up AddressCounter
add.l #1,DriveCounter ;count up DriveCounter
move.l DriveLoopCounter(pc),d0 ;get DriveLoopCounter
cmp.l OpenDriveCount,d0 ;all drives closed ?
bne CloseDriveLoop ;No, continue the loop
IntuiEnde2:
move.l ExecBase,a6 ;get ExecBase
move.l DiskValMem(pc),a1 ;get DiskValMemPtr
move.l #$5000,d0 ;deallocate $5000 bytes
jsr FreeMem(a6) ;call subroutine
rts ;return from subroutine
Even
NewWindow:
dc.w 100
dc.w 0
dc.w 400
dc.w 10
dc.b 0
dc.b 1
dc.l $200!$8000
dc.l $1000!1!2!4!8
dc.l 0
dc.l 0
dc.l Windowtitle
dc.l 0
dc.l 0
dc.w 300
dc.w 10
dc.w 300
dc.w 10
dc.w 1
even
WindowTitle:
dc.b `AntiCicloVir V2.4 by Matthias Gutt`,0
even
Winhandle:
dc.l 0
BootblockStart:
move.l ExecBase,a6 ;get ExecBase
move.l #MEMF_CHIP!MEMF_LARGEST,d1;get connected CHIP-RAM
move.l #$2048,d0 ;want $2048 bytes
jsr AllocMem(a6) ;call subroutine
tst.l d0 ;error ?
beq BootblockCheckEnde ;Yes, end BootblockCheck
lea Sectorbuffer(pc),a0 ;get Sectorbufferbase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l d0,(a0) ;No, get Sectorbufferaddress
move.l d0,TrackSecBuffer ;get Sectorbuffer in TrackDiskIOStdReq-structure
cmp.l #0,DriveCounter ;first floopydisk ?
bne BootblockStart2 ;No, skip to BootBlockStart2
move.l #0,a1 ;my task
bsr Task ;branch to subroutine
move.l d0,AntiCicloTask ;get TaskPtr
move.l ExecBase,a6 ;get ExecBase
move.l #-1,d0 ;allocate free signal
jsr AllocSignal(a6) ;call subroutine
cmp.l #0,d0 ;error ?
ble BootblockCheckEnde ;Yes, end the BootblockCheck
clr.l d7 ;No, clear d7
move.l d0,d7 ;get Signalbit
move.b d0,Sigbit ;get Signalbit in MsgPort-Structure
BootblockStart2:
move.l ExecBase,a6 ;get ExecBase
move.l #MEMF_PUBLIC!MEMF_CHIP!MEMF_CLEAR!MEMF_LARGEST,d1
move.l #100,d0 ;need 100 bytes
jsr AllocMem(a6) ;call subroutine
tst.l d0 ;error ?
beq FreeSignalIt ;Yes, end BootBlockCheck
lea DeviceMem(pc),a0 ;get DeviceMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l d0,(a0) ;get DeviceMemPtr
move.l d0,TrackDeviceMem ;get DeviceMemPtr in TrackDiskIOStdReq-structure
move.l ExecBase,a6 ;get ExecBase
lea DeviceMem(pc),a0 ;get DeviceMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get DeviceMemPtr
lea Device(pc),a0 ;get Device-structure
move.l #40,d0 ;get size
jsr CopyMem(a6) ;call subroutine
move.l ExecBase,a6 ;get ExecBase
move.l #MEMF_PUBLIC!MEMF_CHIP!MEMF_CLEAR!MEMF_LARGEST,d1
move.l #100,d0 ;need 100 bytes
jsr AllocMem(a6) ;call subroutine
tst.l d0 ;error ?
beq BootblockCheckEnde2 ;Yes, end BootBlockCheck
lea UnitMem(pc),a0 ;get UnitMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l d0,(a0) ;get UnitMemPtr
move.l d0,TrackUnitMem ;get UnitMem in TrackDiskIOStdReq-structure
move.l ExecBase,a6 ;get ExecBase
lea UnitMem(pc),a0 ;get UnitMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get UnitMemPtr
lea Unit(pc),a0 ;get Unit-structure
move.l #40,d0 ;get size
jsr CopyMem(a6) ;call subroutine
lea UnitMem(pc),a0 ;get UnitMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a0 ;get UnitMemPtr
add.l #20,a0 ;get UnitMsgList
move.l a0,(a0) ;get lh_Head
move.l a0,8(a0) ;get lh_TailPred
add.l #4,(a0) ;get lh_Tail
cmp.l #0,DriveCounter ;first floppydisk
bne BootBlockStart3 ;No, branch to BootBlockStart3
move.l ExecBase,a6 ;get ExecBase
move.l #MEMF_PUBLIC!MEMF_CHIP!MEMF_CLEAR!MEMF_LARGEST,d1
move.l #1000,d0 ;want 1000 bytes
jsr AllocMem(a6) ;call subroutine
tst.l d0 ;error ?
beq BootBlockCheckEnde3 ;Yes, end the BootblockCheck !
move.l d0,MsgPortMem ;No, get MsgPortMemPtr
move.l ExecBase,a6 ;get ExecBase
lea MsgPortStructure(pc),a0 ;get MsgPort-structure
move.l MsgPortMem(pc),a1 ;get MsgPortMemPtr
move.l #34,d0 ;get size
jsr CopyMem(a6) ;call subroutine
move.l MsgPortMem(pc),a0 ;get MsgPortMemPtr
add.l #20,a0 ;get MsgList
move.l a0,(a0) ;get lh_Head
move.l a0,8(a0) ;get lh_TailPred
add.l #4,(a0) ;get lh_Tail
move.l ExecBase,a6 ;get ExecBase
move.l MsgPortMem(pc),a1 ;get MsgPortMemPtr
jsr AddPort(a6) ;call subroutine
BootBlockStart3:
move.l MsgPortMem(pc),d0 ;get MsgPortMemPtr
move.l d0,TrackDiskMsgPortMem ;insert MsgPortMemPtr in TrackDiskIOStd-Req-structure
move.l ExecBase,a6 ;get ExecBase
move.l #MEMF_PUBLIC!MEMF_CHIP!MEMF_CLEAR!MEMF_LARGEST,d1
move.l #100,d0 ;need only 100 bytes
jsr AllocMem(a6) ;call subroutine
tst.l d0 ;error ?
beq BootblockCheckEnde4 ;Yes, end BootblockCheck
lea TrackDiskIOSTDRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l d0,(a0) ;get TrackDiskIOStd-ReqMemPtr
move.l ExecBase,a6 ;get ExecBase
lea TrackDiskIOSTdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TDIOStdReqMem-Ptr
lea TrackdiskIOStdRequest(pc),a0;get TDIOStdReq-structure
move.l #100,d0 ;get size
jsr CopyMem(a6) ;call subroutine
move.l ExecBase,a6 ;get ExecBase
lea TrackDiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TDIOStdReqMem-Ptr
lea TrackName(PC),a0 ;get TrackName
move.l DriveCounter(pc),d0 ;use drive unit x
move.l #0,d1 ;no flags
jsr OpenDeviceRoutine(a6) ;call subroutine
move.b #$FE,TrackDiskFlag ;set Control Flag
tst.l d0 ;error ?
bne BootBlockCheckEnde5 ;Yes, end BootBlockCheck !
clr.b TrackDiskFlag ;clear TrackDiskFlag
rts ;return from subroutine
ReadBootBlock:
bsr DisplayCheck ;branch to DisplayCheck
lea TrackDiskIOStdRequestMem(pc),a0;Get TDIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIOStdReqMem-Ptr
move.w #02,28(a1) ;enter read-command to TrackDiskIOStdReqMemPtr
move.l #2048,$24(a1) ;enter 2048 bytes to TrackDiskIOStdReqMemPtr
bsr BootBlockCheck ;branch to subroutine
lea TrackDiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIOStdReqMem-Ptr
move.w #09,28(a1) ;turn off motor
move.l #0,$24(a1) ;turn off motor
bsr BootBlockCheck ;branch to subroutine
bsr CheckTDError ;branch to subroutine
bsr CheckBootMem ;branch to subroutine
rts ;return from subroutine
CheckTDError:
lea TrackDiskIOStdRequestMem(pc),a0;get TrackDiskIOStdRequestMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIORequestMem-Ptr
clr.l d1 ;clear d1
move.b $1F(a1),d1 ;get Error-flag
sub.b #20,d1 ;subtract error-flag
lea TDErrorlist(pc),a5 ;get TDErrorlist
clr.l d0 ;clear d0
CheckTDErrorLoop:
cmp.b d0,d1 ;is counter = error-flag ?
beq TDError ;Yes, branch to TDError !
cmp.l #0,(a5)+ ;No, count up TDErrorlist !
add.l #1,d0 ;count up !
cmp.l #16,d0 ;more than 15 loops ?
bne CheckTDErrorLoop ;No, continue the loop !
rts ;return from subroutine
DisplayCheck:
move.b DriveCounter(pc),d0 ;get DriveCounter
add.b d0,DriveNumber ;add DriveCounter to DriveNumber
move.l Intuibase(pc),a6 ;get Intuibase
move.l Winhandle(pc),a0 ;get Winhandle
lea CheckWindowTitle(pc),a1 ;get CheckWindowTitle-address
move.l #-1,a2 ;no new screen-title
jsr SetWindowTitles(a6) ;call subroutine
move.b #$30,DriveNumber ;set old DriveNumber
rts ;return from subroutine
DisplayWindowTitle:
move.l Intuibase(pc),a6 ;get Intuibase
move.l Winhandle(pc),a0 ;get Winhandle
lea WindowTitle(pc),a1 ;get WindowTitle-address
move.l #-1,a2 ;no new screen-title
jsr SetWindowTitles(a6) ;call subroutine
rts ;return from subroutine
BootblockCheck:
move.l ExecBase,a6 ;get ExecBase
lea TrackdiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIOStdReqMem-Ptr
jsr DoIORoutine(a6) ;call subroutine
move.l ExecBase,a6 ;get ExecBase
lea TrackdiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIOStdReqMem-Ptr
jsr WaitIO(a6) ;call subroutine
move.l ExecBase,a6 ;get ExecBase
move.l MsgPortMem(pc),a0 ;get MsgPortMemPtr
jsr GetMsg(a6) ;call subroutine
move.l d0,TrackDiskMessage ;get TrackDiskMessage
rts ;return from subroutine
WriteBootBlock:
move.l ExecBase,a6 ;get ExecBase
lea Sectorbuffer(pc),a0 ;get Sectorbufferbase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get Sectorbuffer-Ptr
add.l #4,a1 ;use old DOS-name
lea Bootblock(pc),a0 ;get Bootblockprg-Address
clr.l d0 ;clear d0
move.b -1(a1),d0 ;calculate new BootChecksum
sub.l d0,start ;enter new BootCheckSum
move.l #1020,d0 ;get size
jsr CopyMem(a6) ;call subroutine
lea TrackDiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIOStdReqMemPtr
move.w #03,28(a1) ;enter write-command
move.l #1024,$24(a1) ;enter 1024 bytes to write
bsr BootBlockCheck ;branch to subroutine
lea TrackDiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIOStdReqMemPtr
move.w #04,28(a1) ;enter update-command
bsr BootblockCheck ;branch to subroutine
bsr CheckTDError ;branch to subroutine
lea TrackDiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIOStdReqMem-Ptr
move.w #09,28(a1) ;turn off motor
move.l #0,$24(a1) ;turn off motor
bsr BootBlockCheck ;branch to subroutine
rts ;return from subroutine
TDError:
lea TrackDiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIOStdReqMem-Ptr
move.w #09,28(a1) ;turn off motor
clr.b $1F(a1) ;clear error-flag
move.l #0,$24(a1) ;turn off motor
bsr BootBlockCheck ;branch to subroutine
lea AutoRequestTextPtr(pc),a0 ;get RequestTextPtr
move.l (a5),(a0) ;insert OutputText in RequestTextPtr
lea GadgetTextPtr(pc),a0 ;get GadgetTextPtr
move.l #ContinueText,(a0) ;insert OutputText in GadgetTextPtr
lea GadgetText2Ptr(pc),a0 ;get next GadgetTextPtr
move.l #ContinueText,(a0) ;insert OutputText in next GadgetTextPtr
move.l #0,a0
lea AutoRequestText(pc),a1 ;get RequestText-structure
lea GadgetText(pc),a2 ;get GadgetText-structure
lea GadgetText2(pc),a3 ;get GadgetText2-structure
moveq #0,d0 ;no IDCMP-Flag
moveq #0,d1 ;no IDMCP-Flag
move.l #610,d2 ;get Width for Request
move.l #70,d3 ;get Height for Request
move.l Intuibase(pc),a6 ;get Intuibase
jsr AutoRequest(a6) ;call subroutine
rts ;return from subroutine
BootblockEnde:
move.l ExecBase,a6 ;get ExecBase
lea TrackDiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIOStdReqMem-Ptr
jsr CloseDevice(a6) ;call subroutine
cmp.l #0,DriveCounter ;first floppydisk ?
bne BootblockEnde2 ;No, branch to BootblockEnde2
move.l ExecBase,a6 ;get ExecBase
move.l MsgPortMem(pc),a1 ;get MsgPortMemPtr
jsr RemPort(a6) ;call subroutine
move.l MsgPortMem(pc),a0 ;get MsgPortMemPtr
move.b #$FF,$8(a0) ;remove listtype
move.l #-1,$14(a0) ;remove flag
move.l ExecBase,a6 ;get ExecBase
move.l MsgPortMem(pc),a1 ;get MsgPortMemPtr
move.l #1000,d0 ;get size
jsr FreeMem(a6) ;call subroutine
BootBlockEnde2:
lea TrackdiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a0 ;get TrackDiskIOStdReqMem-Ptr
move.b #$FF,$8(a0) ;remove listtype
move.l #$FFFFFFFF,$14(a0) ;remove DevicePtr
move.l #$FFFFFFFF,$18(a0) ;remove UnitPtr
move.l ExecBase,a6 ;get ExecBase
lea TrackDiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMem-Ptr
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIOStdReqMem-Ptr
move.l #100,d0 ;get size
jsr FreeMem(a6) ;call subroutine
move.l ExecBase,a6 ;get ExecBase
lea DeviceMem(pc),a0 ;get DeviceMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get DeviceMemPtr
move.l #100,d0 ;get size
jsr FreeMem(a6) ;call subroutine
move.l ExecBase,a6 ;get ExecBase
lea UnitMem(pc),a0 ;get UnitMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get UnitMemPtr
move.l #100,d0 ;get size
jsr FreeMem(a6) ;call subroutine
cmp.l #0,DriveCounter ;first floppydisk
bne BootBlockEnde3 ;No, branch to BootBlockEnde3
move.l ExecBase,a6 ;get ExecBase
move.l d7,d0 ;get Signalbit
jsr FreeSignal(a6) ;call subroutine
BootBlockEnde3:
move.l ExecBase,a6 ;get ExecBase
lea Sectorbuffer(pc),a0 ;get SectorbufferBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get SectorbufferMem-Ptr
move.l #$2048,d0 ;get size
jsr FreeMem(a6) ;call subroutine
rts ;return from subroutine
CheckBootMem:
bsr DisplayWindowTitle ;branch to DisplayWindowTitle
move.l #185,d0
lea BootblockVirusOffsetlist(pc),a0
lea BootblockVirusTestbytesList(pc),a1
lea BootblockVirusNameList(pc),a3
lea Sectorbuffer(pc),a4 ;get SectorbufferBase
add.l AddressCounter(pc),a4 ;get AddressCounter
CompareBootblockLoop:
move.l (a0)+,d1 ;get offset
add.l (a4),d1 ;add offset to Sectorbuffer
move.l d1,a2 ;write d1 to a2
move.l (a2),d1 ;write longword from sectorbuffer to d1
cmp.l (a1)+,d1 ;is this longword = testbytes ?
beq BootblockVirus ;Yes, branch to BootBlockVirus
cmp.l #0,(a3)+ ;count BootblockVirusNameList
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne CompareBootblockLoop ;No, continue the loop !
cmp.l #0,BBBFBase ;BBBFBase available ?
beq CompareBootBlockLoopEnd ;No, branch to CompareBootBlockLoopEnd
move.l BBBFBase(pc),a6 ;get BBBFBase
lea Sectorbuffer(pc),a0 ;get SectorbufferBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a0 ;get SectorbufferMem-Ptr
lea status(pc),a1 ;get status
jsr CheckBoot(a6) ;call subroutine
cmp.l #1,status ;virus ?
beq BBBFBootblockVirus ;Yes, branch to BBBFBootblockVirus
cmp.l #2,status ;not bootable ?
beq NotBootAble ;Yes, branch to NotBootAble
CompareBootBlockLoopEnd:
rts ;return from subroutine
BBBFBootblockVirus:
lea Directory(pc),a3 ;get Directory-address
add.l #4,d0 ;count to BootBlockVirusText-Startaddress
move.l d0,(a3) ;get BootBlockVirus-Text-Startaddress
BootblockVirus:
lea BootblockVirusName(pc),a0 ;get BootblockVirusNamebuffer
move.l #40,d0 ;get counter
ClearBootblockVirusNameLoop2:
move.b #00,(a0)+ ;clear the buffer
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne ClearBootblockVirusNameLoop2;No, continue the loop !
lea BootblockVirusName(pc),a0 ;get BootblockVirusNamebuffer
move.l (a3),a1 ;get VirusText-Address
BootblockVirusNameLoop:
move.b (a1)+,(a0)+ ;write VirusName to BootblockVirusNamebuffer
cmp.b #0,(a1) ;Zero ?
bne BootblockVirusNameLoop ;No, continue the loop !
BootRequester:
Requesterold BootReqText,Install,Continuetext2,#610,#70
cmp.l #1,d0 ;was Gadget touched ?
beq WriteBootblock ;Yes, WriteBootblock
rts ;return from subroutine
NotBootable:
Requesterold NotBootableReq,Continuetext2,Continuetext2,#610,#70
rts
BootblockCheckEnde:
bsr NoMemAlert ;branch to subroutine
move.b #$FF,TrackdiskFlag ;set TrackDiskFlag
rts ;return from subroutine
BootblockCheckEnde5:
lea TrackdiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a0 ;get TrackDiskIOStdReqMem-Ptr
move.b #$FF,$8(a0) ;remove listtype
move.l #$FFFFFFFF,$14(a0) ;remove Devicestructure
move.l #$FFFFFFFF,$18(a0) ;remove UnitStructure
move.l ExecBase,a6 ;get ExecBase
lea TrackdiskIOStdRequestMem(pc),a0;get TrackDiskIOStdReqMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get TrackDiskIOStdReqMem-Ptr
move.l #100,d0 ;get size
jsr FreeMem(a6) ;call subroutine
BootblockCheckEnde4:
cmp.l #0,DriveCounter ;first floppydisk ?
bne BootblockCheckEnde3 ;Yes, branch to BootblockCheckEnde3
move.l ExecBase,a6 ;get ExecBase
move.l MsgPortMem(pc),a1 ;get MsgPortMemPtr
jsr RemPort(a6) ;call subroutine
move.l MsgPortMem(pc),a0 ;get MsgPortMemPtr
move.b #$FF,$8(a0) ;remove listtype
move.l #-1,$14(a0) ;remove flags
move.l ExecBase,a6 ;get ExecBase
move.l MsgPortMem(pc),a1 ;get MsgPortMemPtr
move.l #1000,d0 ;get size
jsr FreeMem(a6) ;call subroutine
BootblockCheckEnde3:
move.l ExecBase,a6 ;get ExecBase
lea UnitMem(pc),a0 ;get UnitMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get UnitMemPtr
move.l #100,d0 ;get size
jsr FreeMem(a6) ;call subroutine
BootBlockCheckEnde2:
move.l ExecBase,a6 ;get ExecBase
lea DeviceMem(pc),a0 ;get DeviceMemBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get DeviceMemPtr
move.l #100,d0 ;get size
jsr FreeMem(a6) ;call subroutine
FreeSignalIt:
move.l ExecBase,a6 ;get ExecBase
lea Sectorbuffer(pc),a0 ;get SectorbufferBase
add.l AddressCounter(pc),a0 ;get AddressCounter
move.l (a0),a1 ;get SectorBufferMem-Ptr
move.l #$2048,d0 ;get size
jsr FreeMem(a6) ;call subroutine
cmp.l #0,DriveCounter ;first floopydisk ?
bne BootBlockCheckEnde0 ;Yes, branch to BootBlockCheckEnde0
move.l ExecBase,a6 ;get ExecBase
move.l d7,d0 ;get Signalbit
jsr FreeSignal(a6) ;call subroutine
BootBlockCheckEnde0:
cmp.b #$FE,TrackDiskFlag ;only no more drives ?
beq BootBlockCheckEnde00 ;display NO alert !
bsr NoMemAlert ;branch to subroutine
BootBlockCheckEnde00:
move.b #$FF,TrackdiskFlag ;set TrackDiskFlag
rts ;return from subroutine
even
BootReqText:
dc.b 0,2
dc.b 0
even
dc.w 20,20
dc.l 0
dc.l BootText
dc.l 0
even
Install:
dc.b 0,2
dc.b 0
even
dc.w 12,4
dc.l 0
dc.l InstallText
dc.l 0
InstallText:
dc.b ` Install `,0
even
TDErrorlist:
dc.l NotSpecified
dc.l NoSecHdr
dc.l BadSecPreamble
dc.l BadSecId
dc.l BadHdrSum
dc.l BadSecSum
dc.l TooFewSecs
dc.l BadSecHdr
dc.l WriteProt
dc.l DiskChanged
dc.l SeekError
dc.l NoMem
dc.l BadUnitNum
dc.l BadDriveType
dc.l DriveInUse
dc.l PostReset
even
NotSpecified:
dc.b `Error not specified !`,0
even
NoSecHdr:
dc.b `Sector-head not found !`,0
even
BadSecPreamble:
dc.b `Error in sector-preamble !`,0
even
BadSecID:
dc.b `Error in sector-ID !`,0
even
BadHdrSum:
dc.b `CheckSum-error in header !`,0
even
BadSecSum:
dc.b `CheckSum-error in sector !`,0
even
TooFewSecs:
dc.b `Not enough sectors on track !`,0
even
BadsecHdr:
dc.b `Sector-head unreadable !`,0
even
WriteProt:
dc.b `Disk write-protected !`,0
even
DiskChanged:
dc.b `No disk in drive !`,0
even
SeekError:
dc.b `ReadHeader-position wrong !`,0
even
NoMem:
dc.b `Not enough memory !`,0
even
BadUnitNum:
dc.b `Called floppydrive not connected !`,0
even
BadDriveType:
dc.b `wrong floppydrive !`,0
even
DriveInUse:
dc.b `Drive already will be used !`,0
even
PostReset:
dc.b `No entry after postreset !`,0
even
MsgPortStructure:
dc.l 0
dc.l 0
dc.b 4
dc.b 0
dc.l PortName
dc.b 0
Sigbit:
dc.b 0
AntiCicloTask:
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.b 5
dc.b 0
even
TrackdiskIOStdRequest: ;IOStdRequest-structure
dc.l 0 ;Ptr of successor
dc.l 0 ;Ptr of predecessor
dc.b 6 ;messagetype
dc.b 0 ;priority
dc.l MessageName ;Ptr of Messagename
TrackDiskMsgPortMem:
dc.l 0 ;Ptr of MsgPort
dc.w 56 ;messagelength
TrackDeviceMem:
dc.l 0 ;Ptr to Device-structure
TrackUnitMem:
dc.l 0 ;Ptr to Unit-structure
dc.w 2 ;Command
dc.b 0 ;Flags
dc.b 0 ;Errorbyte
dc.l 0 ;Actualbyte
dc.l 2048 ;Number of Bytes
TrackSecbuffer:
dc.l 0 ;Buffer-address
dc.l 0 ;Sector-Nr.
dc.l 0 ;DiskChangeCount
dc.l 0 ;SecLabelBuffer
even
Device:
dc.l 0
dc.l 0
dc.b 3
dc.b 0
dc.l TrackName
dc.b 0
dc.b 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.l TrackName
dc.l 0
dc.w 0
even
Unit:
dc.l 0
dc.l 0
dc.b 4
dc.b 0
dc.l 0
dc.b 0
dc.b 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.b 5
dc.b 0
dc.b 0
dc.b 0
dc.w 0
even
CheckWindowTitle:
dc.b `checking floppydrive DF`
DriveNumber: dc.b `0: !!!`,0
even
MsgPortMem:
dc.l 0
TrackdiskIOStdRequestMem:
dc.l 0
dc.l 0
dc.l 0
dc.l 0
DeviceMem:
dc.l 0
dc.l 0
dc.l 0
dc.l 0
UnitMem:
dc.l 0
dc.l 0
dc.l 0
dc.l 0
TrackDiskMessage:
dc.l 0
Sectorbuffer:
dc.l 0
dc.l 0
dc.l 0
dc.l 0
status:
dc.l 0
TrackdiskFlag:
dc.b 0
even
OpenDriveCount:
dc.l 0
even
DriveCounter:
dc.l 0
even
DriveLoopCounter:
dc.l 0
even
AddressCounter:
dc.l 0
even
MessageName:
dc.b `AntiCicloVir.message`,0
even
PortName:
dc.b `AntiCicloVir.port`,0
even
BootText:
dc.b `VIRUS in Bootsectors: `
Bootblockvirusname: blk.b 40,0
NotBootableReq:
dc.b 0,2
dc.b 0
even
dc.w 20,20
dc.l 0
dc.l NotBootAbleText
dc.l 0
even
NotBootableText:
dc.b `Disk is not bootable !!!`,0
even
BootblockvirusNameList:
dc.l The16BitCrewText
dc.l The2001Text
dc.l AEKText
dc.l AHCText
dc.l AIDSText
dc.l AIDS2Text
dc.l AlienNewBeatText
dc.l AmigaFreakText
dc.l AmigaMasterText
dc.l AngelText
dc.l ASSText
dc.l ASVText
dc.l AsylantText
dc.l AustralianParasiteText
dc.l BadBytesText
dc.l BamigaSectorOneText
dc.l BBProtText
dc.l BigBossText
dc.l BlackflashText
dc.l BladeRunnersText
dc.l BLFText
dc.l BlizzProV31Text
dc.l BlizzProV33Text
dc.l BlowJobText
dc.l BootXText
dc.l ButonicText
dc.l ByteBanditText
dc.l ByteBanditPlusText
dc.l ByteBandit2Text
dc.l ByteBanditturboText
dc.l ByteVoyagerText
dc.l ByteVoyagerIIText
dc.l ByteWarriorText
dc.l CascadeText
dc.l CCCPText
dc.l ClaasAbrahamText
dc.l ClonkText
dc.l CobraText
dc.l CodersNightmareText
dc.l CopyLockText
dc.l CrackerExterminatorText
dc.l DAGText
dc.l DAT89Text
dc.l DatacrimeText
dc.l DestructorText
dc.l DetlefText
dc.l DigitalEmotionsText
dc.l DisgustText
dc.l DiskDoktorsText
dc.l DISKFurunkelText
dc.l DiskGuardText
dc.l DiskHerpesText
dc.l DiskTerminatorText
dc.l DivinaExterminatorText
dc.l DottyText
dc.l DUMDUMText
dc.l ElectroVisionText
dc.l EuropeanText
dc.l ExcrementText
dc.l ExecutorsText
dc.l ExtremeText
dc.l FASTText
dc.l FastEddieText
dc.l FICAText
dc.l ForpibText
dc.l FrityText
dc.l fuckdeviceText
dc.l GadaffiText
dc.l GermanyText
dc.l GlasnostText
dc.l GraffitiText
dc.l GremlinText
dc.l GuardiansBootAidsText
dc.l GXTeamText
dc.l GyrosText
dc.l HaukeText
dc.l HCSText
dc.l HCSIIText
dc.l HighlanderText
dc.l HillyText
dc.l HODENText
dc.l IceText
dc.l IncognitoText
dc.l IndianaJonesText
dc.l InfectorText
dc.l InfluenzaText
dc.l IngerIQText
dc.l IngoText
dc.l JITRText
dc.l JoshuaText
dc.l JulieText
dc.l KaukiText
dc.l KefrensText
dc.l KilledText
dc.l LADSText
dc.l LameBlameText
dc.l LamerExterminatoroldText
dc.l LamerExterminatornewText
dc.l LamerExterminatorIText
dc.l LamerExterminatorIIText
dc.l LamerExterminatorIIIText
dc.l LamerExterminatorIVText
dc.l LamerExterminatorVText
dc.l LamerExterminatorVIText
dc.l LoverboySexmachineText
dc.l LSDText
dc.l MADText
dc.l MADIIText
dc.l MallanderText
dc.l MEXXText
dc.l MGM89Text
dc.l MICROSYSTEMSText
dc.l MOSHText
dc.l MOSH2Text
dc.l MutilatorText
dc.l NastyNastyText
dc.l NorthStarText
dc.l NorthStarIIText
dc.l ObeliskText
dc.l Obelisk2Text
dc.l OPAPAText
dc.l OverkillText
dc.l PARATAXIText
dc.l PARATAXIIText
dc.l PARATAXIIIText
dc.l PayDayText
dc.l PentagonSlayerText
dc.l PentagonSlayer2Text
dc.l PentagonSlayer3Text
dc.l PlastiqueText
dc.l REPText
dc.l RevengeBootloaderText
dc.l REVENGEText
dc.l SachsenText
dc.l SADDAMHUSSEINText
dc.l SaoPauloText
dc.l SATANText
dc.l SCAText
dc.l ScarfaceText
dc.l SendarionText
dc.l SherlockText
dc.l ShitText
dc.l SSText
dc.l SSIIText
dc.l SuicideMachineText
dc.l SuperboyText
dc.l SupplyTeamText
dc.l SystemZV30Text
dc.l SystemZV40Text
dc.l SystemZV50Text
dc.l SystemZV51Text
dc.l SystemZV53Text
dc.l SystemZV54Text
dc.l SystemZV61Text
dc.l SystemZV64Text
dc.l SystemZV65Text
dc.l TargetText
dc.l TelstarText
dc.l TermigatorText
dc.l TFCRevengeText
dc.l TimeBombText
dc.l TNKText
dc.l TomatesGentechnic10Text
dc.l TomatesGentechnic20Text
dc.l TURKText
dc.l UltrafoxText
dc.l UKLamerStyleText
dc.l USSR492Text
dc.l VCCofTNTText
dc.l VIPHSText
dc.l VirusConstructionSetBootblockText
dc.l VirusSlayerText
dc.l VirusV1Text
dc.l WAFTText
dc.l WahnfriedText
dc.l WARHAWKText
dc.l WarsawAvengerText
dc.l ZACCESSV10Text
dc.l ZACCESSV20Text
dc.l ZACCESSV30Text
dc.l ZenkerText
dc.l ZESTText
dc.l ZLXText
dc.l ZombiText
even
BootblockvirusTestbytesList:
dc.l `Crew`
dc.l `0012`
dc.l ` AEK`
dc.l `A.H.`
dc.l `HIV!`
dc.l ` Ken`
dc.l `ALIE`
dc.l `AMIG`
dc.l `Mast`
dc.l $4EAEFF3A
dc.l ` PRO`
dc.l `SV!A`
dc.l `ASYL`
dc.l `Aust`
dc.l `BOUT`
dc.l `BS1!`
dc.l `B-Pr`
dc.l `_BOS`
dc.l `blac`
dc.l `lade`
dc.l `dos.`
dc.l $332E3100
dc.l $332E3300
dc.l `Allo`
dc.l `Viru`
dc.l `BAHA`
dc.l `Band`
dc.l `NqNq`
dc.l `os.l`
dc.l `trac`
dc.l $61000336
dc.l $600002E6
dc.l `DASA`
dc.l `Casc`
dc.l `CCCP`
dc.l $B18536B7
dc.l `CLON`
dc.l ` COB`
dc.l `CODE`
dc.l $0007F000
dc.l `CRAC`
dc.l ` DAG`
dc.l `T '8`
dc.l `DATA`
dc.l `estr`
dc.l $41FA001A
dc.l `EMOT`
dc.l `Viru`
dc.l ` Dis`
dc.l `DISK`
dc.l `DISK`
dc.l ` H e`
dc.l `DISK`
dc.l `dos.`
dc.l `Dott`
dc.l `MDUM`
dc.l `ELEC`
dc.l `Euro`
dc.l `EXCR`
dc.l `XECU`
dc.l `XTRE`
dc.l $0007F000
dc.l $6000FC38
dc.l `F.I.`
dc.l `FORP`
dc.l `rity`
dc.l `fuck`
dc.l `GADA`
dc.l `Germ`
dc.l `Glas`
dc.l `fiti`
dc.l `grap`
dc.l `-aid`
dc.l `intu`
dc.l `GYRO`
dc.l `Hauk`
dc.l `H.C.`
dc.l `H.C.`
dc.l `HIGH`
dc.l $0007FF00
dc.l `HODE`
dc.l `INC!`
dc.l $2C790000
dc.l `iana`
dc.l $6000FC38
dc.l `FUCK`
dc.l `nger`
dc.l `INGO`
dc.l `JITR`
dc.l $00BFE001
dc.l $E0014E75
dc.l `dos.`
dc.l `efre`
dc.l `Kill`
dc.l `LADS`
dc.l $6100FFDE
dc.l $ABCD0000
dc.l $ABCD0000
dc.l $FEDC0000
dc.l $ABCD0000
dc.l $ABCD0000
dc.l $ABCD0000
dc.l $ABCD0000
dc.l $ABCD0000
dc.l ` Sex`
dc.l `LSD!`
dc.l `Infe`
dc.l `cker`
dc.l `DERK`
dc.l `MEXX`
dc.l `MGM8`
dc.l `MICR`
dc.l `MOSH`
dc.l `MOSH`
dc.l `dos.`
dc.l `Nast`
dc.l `Nort`
dc.l `Nort`
dc.l `GURU`
dc.l ` OBE`
dc.l ` OPA`
dc.l $4BF90007
dc.l `TAX `
dc.l `ATAX`
dc.l `ATAX`
dc.l `PayD`
dc.l `enta`
dc.l `Circ`
dc.l `enta`
dc.l ` P L`
dc.l `REP!`
dc.l `Reve`
dc.l `Reve`
dc.l $00078400
dc.l `2000`
dc.l `PAUL`
dc.l `SATA`
dc.l `SCA!`
dc.l `SCAR`
dc.l `Send`
dc.l `ORSI`
dc.l $6100000A
dc.l `!SS!`
dc.l `HEIL`
dc.l $2C790000
dc.l `Supe`
dc.l ` Sup`
dc.l `3.0 `
dc.l `4.0 `
dc.l `5.0 `
dc.l `5.1 `
dc.l `V5.3`
dc.l `V5.4`
dc.l `V6.1`
dc.l `V6.4`
dc.l `V6.5`
dc.l $43524E00
dc.l `6.0 `
dc.l `intu`
dc.l ` 199`
dc.l `IME `
dc.l `TNK!`
dc.l `OMAT`
dc.l `Toma`
dc.l `TURK`
dc.l $4EF900FC
dc.l $61000338
dc.l `Sent`
dc.l `grap`
dc.l `VIPH`
dc.l $00BFE001
dc.l `VIRU`
dc.l `sind`
dc.l $2C780004
dc.l `AHNF`
dc.l `WARH`
dc.l `Wars`
dc.l `ZACC`
dc.l `ZACC`
dc.l `ACCE`
dc.l `ZENK`
dc.l `Z.E.`
dc.l `ZLX!`
dc.l $075A6F6D
even
BootblockvirusOffsetList:
dc.l $000001E0
dc.l $000003F0
dc.l $000003D0
dc.l $000002FC
dc.l $000003F0
dc.l $000002D0
dc.l $00000240
dc.l $0000001E
dc.l $0000037A
dc.l $00000054
dc.l $00000344
dc.l $000002F0
dc.l $00000330
dc.l $0000036C
dc.l $000003A0
dc.l $000003F0
dc.l $00000338
dc.l $000003F0
dc.l $00000010
dc.l $00000330
dc.l $0000030E
dc.l $0000002A
dc.l $0000002A
dc.l $0000002A
dc.l $0000028E
dc.l $0000032C
dc.l $00000020
dc.l $000002A8
dc.l $000003C2
dc.l $00000320
dc.l $00000010
dc.l $0000000C
dc.l $000000C0
dc.l $000003E2
dc.l $00000054
dc.l $00000004
dc.l $000003B8
dc.l $00000306
dc.l $0000005A
dc.l $00000018
dc.l $00000014
dc.l $000003BA
dc.l $000002C0
dc.l $000001C6
dc.l $000001F4
dc.l $00000010
dc.l $00000280
dc.l $000001B8
dc.l $000003E8
dc.l $000003B2
dc.l $000002F4
dc.l $00000390
dc.l $000003C6
dc.l $00000096
dc.l $00000018
dc.l $00000010
dc.l $00000010
dc.l $00000010
dc.l $00000054
dc.l $00000348
dc.l $00000274
dc.l $00000044
dc.l $000003F8
dc.l $000003F2
dc.l $0000001A
dc.l $00000018
dc.l $000002DA
dc.l $00000040
dc.l $00000010
dc.l $00000730
dc.l $00000390
dc.l $00000360
dc.l $00000394
dc.l $000001E0
dc.l $0000023E
dc.l $00000010
dc.l $00000328
dc.l $0000034E
dc.l $0000025C
dc.l $0000009C
dc.l $000002D4
dc.l $000003F0
dc.l $00000120
dc.l $00000320
dc.l $000003F8
dc.l $00000066
dc.l $00000014
dc.l $00000008
dc.l $00000008
dc.l $000001F4
dc.l $00000334
dc.l $00000298
dc.l $000003AC
dc.l $00000264
dc.l $00000008
dc.l $00000058
dc.l $000003A6
dc.l $00000396
dc.l $00000342
dc.l $00000392
dc.l $000003F4
dc.l $000003AE
dc.l $000003AA
dc.l $00000396
dc.l $000001E0
dc.l $000003F0
dc.l $00000010
dc.l $000000A0
dc.l $00000008
dc.l $000003F0
dc.l $00000282
dc.l $000003F4
dc.l $00000016
dc.l $00000016
dc.l $000002A0
dc.l $000001D6
dc.l $00000010
dc.l $00000012
dc.l $00000038
dc.l $00000370
dc.l $00000368
dc.l $00000014
dc.l $000003F0
dc.l $000003B0
dc.l $00000220
dc.l $00000010
dc.l $00000286
dc.l $00000370
dc.l $000002DA
dc.l $00000210
dc.l $000003F0
dc.l $00000010
dc.l $000003E2
dc.l $00000038
dc.l $00000012
dc.l $000002F0
dc.l $00000280
dc.l $000003F0
dc.l $00000308
dc.l $000003E2
dc.l $000002F6
dc.l $00000010
dc.l $00000012
dc.l $0000001A
dc.l $0000032C
dc.l $000002E2
dc.l $00000324
dc.l $0000002C
dc.l $0000002C
dc.l $0000002C
dc.l $0000002C
dc.l $0000002A
dc.l $0000002A
dc.l $0000002A
dc.l $0000002A
dc.l $0000002A
dc.l $0000019C
dc.l $00000024
dc.l $000003EC
dc.l $0000002C
dc.l $00000342
dc.l $000003F0
dc.l $00000182
dc.l $00000040
dc.l $00000066
dc.l $00000036
dc.l $00000368
dc.l $00000054
dc.l $00000168
dc.l $00000022
dc.l $00000146
dc.l $00000010
dc.l $00000322
dc.l $00000050
dc.l $00000312
dc.l $00000366
dc.l $00000386
dc.l $000001D6
dc.l $00000016
dc.l $0000027A
dc.l $00000252
dc.l $00000332
dc.l $000003F0
dc.l $00000184
CPUCrashDummy:
dc.l $00000000
even
BootBlock:
start:
dc.l $4B75D060
dc.l 880
main: lea dosname2(PC),a1
jsr -96(a6)
tst.l d0
beq.S error
move.l d0,a0
move.l $16(a0),a0
moveq #0,d0
halt: rts
error: moveq #-1,d0
bra.S halt
dosname2: dc.b 'dos.library',0
dc.b `Disk installed by AntiCicloVir V2.4`,0
dc.b `Send new viruses to Matthias Gutt * Kantstr. 16 `,0
dc.b `* 21335 Lueneburg * Germany`,0
blk.b 900,0
even
VirusCheck:
move.l DiskValMem(pc),a5 ;get DiskValMemPtr
move.l #SADDAM,d4 ;get pathname
move.l Dosbase(pc),a6 ;get DosBase
move.l #SADDAM,d1 ;get filename
move.l #1005,d2 ;use the mode old
jsr Open(a6) ;call subroutine
cmp.l #0,d0 ;Error ?
beq VirusCheckEnde ;Yes, branch to VirusCheckEnde
move.l d0,DiskValHandle ;No, get DiskValHandle
move.l Dosbase(pc),a6 ;get DosBase
move.l DiskValHandle(pc),d1 ;get DiskValHandle
move.l a5,d2 ;get filebuffer
move.l #1848,d3 ;get size
jsr Read(a6) ;call subroutine
move.l Dosbase(pc),a6 ;get DosBase
move.l DiskValHandle(pc),d1 ;get DiskValHandle
jsr Close(a6) ;call subroutine
cmp.l #"BitM",$00000702(a5) ;SADDAM-Virus ?
beq SADDAMRequest ;Yes !
cmp.l #$60040000,$00000024(a5) ;RoLE-Virus ?
beq ReturnRequest ;Yes !
cmp.l #"trac",$000006C0(a5) ;DiskVal1234-Virus ?
beq DiskVal1234Request ;Yes !
VirusCheckEnde:
clr.l DriveLoopCounter ;clear DriveLoopCounter
clr.l DriveCounter ;clear DriveCounter
clr.l AddressCounter ;clear AddressCounter
DriveLoop:
bsr ReadBootblock ;branch to subroutine
add.l #1,DriveLoopCounter ;count up
add.l #1,DriveCounter ;count up
add.l #4,AddressCounter ;count up
move.l DriveLoopCounter,d0 ;get DriveLoopCounter
cmp.l OpenDriveCount,d0 ;all floppydisks read ?
bne DriveLoop ;No, continue the loop !
DriveLoopEnd:
sub.l #4,AddressCounter ;correct AddressCounter
sub.l #1,DriveCounter ;correct DriveCounter
bra IntuiWait ;branch to IntuiWait
SADDAMRequest:
Requester #SADDAMReq,#ContinueText,#ContinueText,#610,#70
bsr KillFileVirus2 ;branch to subroutine
bra VirusCheckEnde ;end VirusCheck
ReturnRequest:
Requester #ReturnReq,#ContinueText,#ContinueText,#610,#70
move.l #SADDAM,d4 ;get pathname
bsr KillFileVirus3 ;branch to subroutine
bra VirusCheckEnde ;end VirusCheck
DiskVal1234Request:
Requester #DiskVal1234Req,#ContinueText,#ContinueText,#610,#70
bsr KillFileVirus2 ;branch to subroutine
bra VirusCheckEnde ;end VirusCheck
Hochofen:
lea HochofenText(pc),a0 ;get HochofenTextaddress
move.l a0,(a3)
bra AMIGAMemoryVirus ;branch to subroutine
ModemChecker:
lea ModemCheckerText(pc),a0 ;get ModemCheckerTextaddress
move.l a0,(a3)
bra AMIGAMemoryVirus ;branch to subroutine
even
SADDAMReq:
dc.b `Disk-Validator: SADDAM Virus !!!`,0
even
ReturnReq:
dc.b `Disk-Validator: Return of the Lamer Exterminator virus !!!`,0
even
DiskVal1234Req:
dc.b `Disk-Validator: DiskVal1234 virus !!!`,0
DiskValHandle:
dc.l 0
DiskValMem:
dc.l 0
even
SADDAM:
dc.b `:l/Disk-Validator`,0
AMIGAMemoryVirus:
move.l Intuibase(pc),a6 ;get Intuibase
lea NewWindow(pc),a0 ;get NewWindow-structure-address
jsr OpenWindow(a6) ;call subroutine
move.l d0,Winhandle ;get Winhandle
move.l #40,d0 ;get counter
lea VirusName(pc),a0 ;get VirusNamebuffer
ClearVirusNameLoop:
move.b #00,(a0)+ ;clear the buffer
sub.l #1,d0 ;count down
cmp.l #0,d0 ;Zero ?
bne ClearVirusNameLoop ;No, continue the loop !
lea VirusName(pc),a0 ;get VirusNameBuffer
move.l (a3),a1 ;get VirusNameText-Address
AMIGAMemoryVirusNameLoop:
move.b (a1)+,(a0)+ ;write VirusNameText to VirusNameBuffer
cmp.b #0,(a1) ;Zero ?
bne AMIGAMemoryVirusNameLoop ;No, continue the loop !
AMIGAMemoryVirusRequest:
Requester #MemoryText,#ContinueText,#ContinueText,#610,#70
move.l Winhandle(pc),a0 ;get Winhandle
move.l Intuibase(pc),a6 ;get Intuibase
jsr CloseWindow(a6) ;call subroutine
bra KillMem ;branch to subroutine
even
MemoryText:
dc.b `VIRUS IS STILL in memory: `
Virusname: blk.b 40,0
even
VirusNameList:
The16BitCrewText:
dc.b `16 Bit Crew`,0
even
The2001Text:
dc.b `2001`,0
even
AEKText:
dc.b `AEK`,0
even
AHCText:
dc.b `A.H.C.`,0
even
AIDSText:
dc.b `AIDS (SCA)`,0
even
AIDS2Text:
dc.b `AIDS (VKill)`,0
even
AlienNewBeatText:
dc.b `Alien New Beat V1.0`,0
even
AmigaFreakText:
dc.b `AMIGA Freak`,0
even
AmigaKnightText:
dc.b `AMIGA Knight`,0
even
AmigaMasterText:
dc.b `AMIGA Master`,0
even
AngelText:
dc.b `Angel`,0
even
AntiChristText:
dc.b `AntiChrist`,0
even
AntiChristTextText:
dc.b `AntiChrist-Text`,0
even
ASSText:
dc.b `ASS Virusprotector V1.0`,0
even
ASVText:
dc.b `ASV V0.000123`,0
even
AsylantText:
dc.b `Asylant`,0
even
AustralianParasiteText:
dc.b `Australian Parasite`,0
even
BadBytesText:
dc.b `Bad Bytes`,0
even
BamigaSectorOneText:
dc.b `Bamiga Sector One`,0
even
BBProtText:
dc.b `BB-Prot`,0
even
BeethovenText:
dc.b `Beethoven`,0
even
BestialDevastationText:
dc.b `Bestial Devastation`,0
even
BGS9Text:
dc.b `BGS 9`,0
even
BGS9IIText:
dc.b `BGS 9 II`,0
even
BigBossText:
dc.b `Big Boss`,0
even
BlackflashText:
dc.b `Blackflash V2.0`,0
even
BladeRunnersText:
dc.b `Blade Runners`,0
even
BLFText:
dc.b `BLF`,0
even
BlizzProV31Text:
dc.b `Blizz Pro V3.1`,0
even
BlizzProV33Text:
dc.b `Blizz Pro V3.3`,0
even
BlowJobText:
dc.b `BlowJob`,0
even
BlueboxText:
dc.b `BlueBox.icon.library`,0
even
BootXText:
dc.b `BootX`,0
even
BretHawnesText:
dc.b `Bret Hawnes`,0
even
ButonicText:
dc.b `Butonic 1.1`,0
even
ByteBanditText:
dc.b `Byte Bandit`,0
even
ByteBanditPlusText:
dc.b `Byte Bandit +`,0
even
ByteBandit2Text:
dc.b `Byte Bandit 2`,0
even
ByteBanditturboText:
dc.b `Byte Bandit turbo`,0
even
ByteVoyagerText:
dc.b `BYTE VOYAGER`,0
even
ByteVoyagerIIText:
dc.b `Byte Voyager II`,0
even
ByteWarriorText:
dc.b `Byte Warrior`,0
even
CascadeText:
dc.b `Cascade`,0
even
CCCPText:
dc.b `CCCP`,0
even
ClaasAbrahamText:
dc.b `Claas Abraham`,0
even
ClonkText:
dc.b `CLONK`,0
even
COBRAText:
dc.b `COBRA`,0
even
CodersNightmareText:
dc.b `Coders Nightmare`,0
even
CommodoreText:
dc.b `Commodore`,0
even
CopyLockText:
dc.b `CopyLock`,0
even
ColorText:
dc.b `Color (TURK V1.3)`,0
even
CompuPhagozyteText:
dc.b `CompuPhagozyte`,0
even
CompuPhagozyte2Text:
dc.b `CompuPhagozyte 2`,0
even
CompuPhagozyteIIText:
dc.b `COMPUPhagozyte II`,0
even
CompuPhagozyteIIIText:
dc.b `CompuPhagozyte III A`,0
even
CompuPhagozyteIIIBCText:
dc.b `CompuPhagozyte III B/C`,0
even
CompuPhagozyteIVText:
dc.b `CompuPhagozyte IV`,0
even
CrackerExterminatorText:
dc.b `Cracker Exterminator`,0
even
Crime2Text:
dc.b `Crime 2`,0
even
CrimePlusText:
dc.b `Crime!++`,0
even
DStructureText:
dc.b `D-Structure`,0
even
DAGText:
dc.b `DAG`,0
even
DAGCreatorText:
dc.b `DAG-Creator`,0
even
DarthVaderText:
dc.b `DARTH VADER 1.1`,0
even
DAT89Text:
dc.b `DAT '89`,0
even
DatacrimeText:
dc.b `Datacrime`,0
even
DestructorText:
dc.b `Destructor V1.2`,0
even
DetlefText:
dc.b `Detlef`,0
even
DigitalEmotionsText:
dc.b `DIGITAL EMOTIONS`,0
even
DisasterMasterText:
dc.b `DISASTER-MASTER V2`,0
even
DisgustText:
dc.b `Disgust`,0
even
DiskDoktorsText:
dc.b `Disk-Doktors`,0
even
DISKFurunkelText:
dc.b `DISK-Furunkel`,0
even
DiskguardText:
dc.b `DISK GUARD V1.0`,0
even
DiskHerpesText:
dc.b `Disk-Herpes`,0
even
DiskKillerText:
dc.b `DISK-KILLER V1.0`,0
even
DiskTerminatorText:
dc.b `Disk-Terminator`,0
even
DisktroyerV10Text:
dc.b `Disktroyer V1.0`,0
even
DisktroyerV20Text:
dc.b `Disktroyer V2.0`,0
even
DiskVal1234Text:
dc.b `Disk-Val1234`,0
even
DivinaExterminatorText:
dc.b `Divina Exterminator`,0
even
DMTrashText:
dc.b `DM-Trash`,0
even
DottyText:
dc.b `Dotty`,0
even
DriveInfoText:
dc.b `Drive Info(Crime!Linkvirus)`,0
even
DUMDUMText:
dc.b `DUMDUM`,0
even
ElectroVisionText:
dc.b `ELECTRO.VISION`,0
even
EuropeanText:
dc.b `European`,0
even
ExcrementText:
dc.b `EXCREMENT`,0
even
ExcrementCreatorText:
dc.b `EXCREMENT Creator`,0
even
ExecutorsText:
dc.b `EXECUTORS`,0
even
ExtremeText:
dc.b `EXTREME`,0
even
FASTText:
dc.b `F.A.S.T`,0
even
FastEddieText:
dc.b `Fast Eddie`,0
even
FICAText:
dc.b `FICA`,0
even
ForpibText:
dc.b `FORPIB`,0
even
FreedomText:
dc.b `Freedom!`,0
even
FrityText:
dc.b `Frity`,0
even
fuckdeviceText:
dc.b `fuck.device`,0
even
GadaffiText:
dc.b `GADAFFI`,0
even
GermanyText:
dc.b `Germany`,0
even
GlasnostText:
dc.b `GLASNOST`,0
even
GoldenRiderText:
dc.b `Golden Rider`,0
even
GotchaLamerText:
dc.b `Gotcha Lamer`,0
even
GotchaLamerCreatorText:
dc.b `Gotcha Lamer Creator`,0
even
GraffitiText:
dc.b `Graffiti`,0
even
GremlinText:
dc.b `Gremlin`,0
even
GuardiansBootAidsText:
dc.b `Guardians BootAids`,0
even
GXTeamText:
dc.b `GX.Team`,0
even
GyrosText:
dc.b `GYROS`,0
even
GZUSText:
dc.b `G-Zus`,0
even
HARDEXText:
dc.b `HARDEX`,0
even
HaukeText:
dc.b `Hauke`,0
even
HCSText:
dc.b `H.C.S`,0
even
HCSIIText:
dc.b `H.C.S II`,0
even
HighlanderText:
dc.b `HIGHLANDER`,0
even
HillyText:
dc.b `Hilly`,0
even
HochofenText:
dc.b `Hochofen`,0
even
HODENText:
dc.b `HODEN V33.17`,0
even
IceText:
dc.b `ICE`,0
even
IncognitoText:
dc.b `Incognito`,0
even
IndianaJonesText:
dc.b `Indiana Jones`,0
even
InfectorText:
dc.b `Infector`,0
even
InfluenzaText:
dc.b `INFLUENZA`,0
even
IngerIQText:
dc.b `Inger IQ`,0
even
IngoText:
dc.b `INGO`,0
even
IngosReturnText:
dc.b `INGOs Return`,0
even
IntelText:
dc.b `INTEL`,0
even
IRQText:
dc.b `IRQ`,0
even
JeffBUTONICV131Text:
dc.b `Jeff BUTONIC V1.31`,0
even
JeffBUTONICV300Text:
dc.b `Jeff BUTONIC V3.00`,0
even
JITRText:
dc.b `JITR`,0
even
JoshuaText:
dc.b `Joshua`,0
even
Joshua2Text:
dc.b `Joshua 2`,0
even
JulieText:
dc.b `Julie`,0
even
KaukiText:
dc.b `Kauki`,0
even
KefrensText:
dc.b `Kefrens`,0
even
KilledText:
dc.b `Killed`,0
even
LADSText:
dc.b `LADS`,0
even
LAMEText:
dc.b `LAME`,0
even
LameBlameText:
dc.b `Lame Blame!`,0
even
LamerExterminatoroldText:
dc.b `old LAMER Exterminator`,0
even
LamerExterminatoroldIIIText:
dc.b `(old) LAMER Exterminator (III)`,0
even
LamerExterminatornewText:
dc.b `new Lamer Exterminator`,0
even
LamerExterminatorIText:
dc.b `LAMER Exterminator I`,0
even
LamerExterminatorIIText:
dc.b `LAMER Exterminator II`,0
even
LamerExterminatorIIIText:
dc.b `LAMER Exterminator III`,0
even
LamerExterminatorIVText:
dc.b `LAMER Exterminator IV`,0
even
LamerExterminatorIVVText:
dc.b `LAMER Exterminator IV or V`,0
even
LamerExterminatorVText:
dc.b `LAMER Exterminator V`,0
even
LamerExterminatorVIText:
dc.b `LAMER Exterminator VI`,0
even
LamerExterminatorVIItext:
dc.b `LAMER Exterminator VII`,0
even
LamerExterminatorVIIIText:
dc.b `LAMER Exterminator VIII`,0
even
LamerLoadWBText:
dc.b `LAMER LoadWB`,0
even
LamerVirusXText:
dc.b `LAMER VirusX`,0
even
Liberatorv121Text:
dc.b `Liberator v1.21`,0
even
Liberatorv30Text:
dc.b `Liberator v3.0`,0
even
Liberatorv501Text:
dc.b `Liberator v5.01`,0
even
LOOMText:
dc.b `LOOM`,0
even
LoverboySexmachineText:
dc.b `Loverboy & Sexmachine`,0
even
LSDText:
dc.b `LSD`,0
even
MADText:
dc.b `MAD`,0
even
MADIIText:
dc.b `MAD II`,0
even
MallanderText:
dc.b `MALLANDER V1.0`,0
even
MENEMSREVENGEText:
dc.b `MENEMs REVENGE`,0
even
MEXXText:
dc.b `MEXX`,0
even
MGM89Text:
dc.b `MGM 89`,0
even
MICROSYSTEMSText:
dc.b `MICROSYSTEMS`,0
even
ModemCheckerText:
dc.b `MODEMCHECKER`,0
even
ModemCheckerLoadWBText:
dc.b `MODEMCHECKER LoadWB`,0
even
MOSHText:
dc.b `MOSH`,0
even
MOSH2Text:
dc.b `MOSH 2`,0
even
MutilatorText:
dc.b `Mutilator`,0
even
NANOoldText:
dc.b `old NANO`,0
even
NanonewText:
dc.b `Nano (new)`,0
even
NaSTText:
dc.b `NaST`,0
even
NastyNastyText:
dc.b `Nasty-nasty`,0
even
NoGuruV20Text:
dc.b `No Guru V2.0`,0
even
NorthStarText:
dc.b `NORTH STAR`,0
even
NorthStarIIText:
dc.b `NORTH STAR II`,0
even
ObeliskText:
dc.b `OBELISK`,0
even
Obelisk2Text:
dc.b `OBELISK 2`,0
even
OPAPAText:
dc.b `OPAPA`,0
even
OverkillText:
dc.b `Overkill`,0
even
PARATAXIText:
dc.b `PARATAX I`,0
even
PARATAXIIText:
dc.b `PARATAX II`,0
even
PARATAXIIIText:
dc.b `PARATAX III`,0
even
PayDayText:
dc.b `PayDay`,0
even
PentagonSlayerText:
dc.b `Pentagon-Slayer`,0
even
PentagonSlayer2Text:
dc.b `Pentagon-Slayer 2`,0
even
PentagonSlayer3Text:
dc.b `Pentagon-Slayer 3`,0
even
PlastiqueText:
dc.b `Plastique`,0
even
PPBombText:
dc.b `PP-Bomb`,0
even
QRDLText:
dc.b `QRDL 1.1`,0
even
RedOctoberText:
dc.b `Red October 1.7`,0
even
REPText:
dc.b `REP!`,0
even
ReturnoftheLamerExterminatorText:
dc.b `Return of the Lamer Exterminator`,0
even
RevengeBootloaderText:
dc.b `Revenge Bootloader`,0
even
RevengeOfTheLamerExterminatorText:
dc.b `Revenge Of The LAMER Exterminator`,0
even
RevengeOfTheLamerExterminator2Text:
dc.b `Revenge Of The LAMER Exterminator 2`,0
even
REVENGEText:
dc.b `REVENGE V1.2`,0
even
RISCText:
dc.b `RISC`,0
even
SachsenText:
dc.b `SACHSEN No.1`,0
even
SADDAMText:
dc.b `SADDAM`,0
even
SADDAMHUSSEINText:
dc.b `SADDAM HUSSEIN`,0
even
SaoPauloText:
dc.b `Sao Paulo`,0
even
SATANText:
dc.b `SATAN`,0
even
SCAText:
dc.b `SCA`,0
even
SCARFACEText:
dc.b `SCARFACE`,0
even
SendarionText:
dc.b `Sendarion #1`,0
even
SEPULTURAText:
dc.b `SEPULTURA`,0
even
SherlockText:
dc.b `Sherlock2.0`,0
even
ShitText:
dc.b `Shit`,0
even
ShowSysopText:
dc.b `ShowSysop`,0
even
SmilyCancerText:
dc.b `Smily Cancer`,0
even
SmilyCancerLoadWBText:
dc.b `Smily Cancer LoadWB`,0
even
SnoopDosText:
dc.b `SnoopDos 1.6`,0
even
SonjaText:
dc.b `Sonja`,0
even
SSText:
dc.b `SS`,0
even
SSIIText:
dc.b `SS II`,0
even
SuicideMachineText:
dc.b `Suicide Machine`,0
even
SuperboyText:
dc.b `Superboy`,0
even
SupplyTeamText:
dc.b `Supply Team`,0
even
SystemZV30Text:
dc.b `System Z V3.0`,0
even
systemZV40Text:
dc.b `System Z V4.0`,0
even
SystemZV50Text:
dc.b `System Z V5.0`,0
even
SystemZV51Text:
dc.b `System Z V5.1`,0
even
SystemZV53Text:
dc.b `System Z V5.3`,0
even
SystemZV54Text:
dc.b `System Z V5.4`,0
even
SystemZV61Text:
dc.b `System Z V6.1`,0
even
SystemZV64Text:
dc.b `System Z V6.4`,0
even
SystemZV65Text:
dc.b `System Z V6.5`,0
even
TargetText:
dc.b `TARGET`,0
even
TelecomText:
dc.b `Telecom`,0
even
TelStarText:
dc.b `TelStar`,0
even
TermigatorText:
dc.b `Termigator`,0
even
TerroristsText:
dc.b `Terrorists`,0
even
TFCRevengeText:
dc.b `T.F.C. Revenge`,0
even
TFCRevengeLoadWBText:
dc.b `T.F.C. Revenge LoadWB`,0
even
TimeBombText:
dc.b `TIME BOMB 1.0`,0
even
TimeBombV09Text:
dc.b `TIME BOMB V0.9`,0
even
TNKText:
dc.b `TNK!`,0
even
TomatesGentechnic10Text:
dc.b `TOMATES GENTECHNIC 1.0`,0
even
TomatesGentechnic20Text:
dc.b `TOMATES GENTECHNIC 2.0`,0
even
TravelingJackText:
dc.b `Traveling Jack`,0
even
TravelingJack2Text:
dc.b `Traveling Jack 2`,0
even
TravelingJackTextText:
dc.b `Traveling Jack-Text`,0
even
TURKText:
dc.b `TURK V1.3`,0
even
UltrafoxText:
dc.b `Ultrafox`,0
even
UKLamerStyleText:
dc.b `UK Lamer Style`,0
even
USSR492Text:
dc.b `USSR 492`,0
even
VCCofTNTText:
dc.b `VCC of TNT`,0
even
VIPHSText:
dc.b `VIPHS`,0
even
VirusConstructionSetText:
dc.b `Virus Construction Set`,0
even
VirusConstructionSetBootblockText:
dc.b `Virus Construction Set-Bootblock`,0
even
VirusSlayerText:
dc.b `Virus Slayer`,0
even
VirusV1Text:
dc.b `Virus V1`,0
even
WAFTText:
dc.b `WAFT`,0
even
WahnfriedText:
dc.b `WAHNFRIED`,0
even
WARHAWKText:
dc.b `WARHAWK`,0
even
WarsawAvengerText:
dc.b `Warsaw Avenger`,0
even
XenoText:
dc.b `Xeno`,0
even
xprzspeedV32Text:
dc.b `xprzspeed V3.2`,0
even
ZaccessV10Text:
dc.b `ZACCESS V1.0`,0
even
ZaccessV20Text:
dc.b `ZACCESS V2.0`,0
even
ZaccessV30Text:
dc.b `ZACCESS V3.0`,0
even
ZenkerText:
dc.b `ZENKER`,0
even
ZESTText:
dc.b `Z.E.S.T`,0
even
ZLXText:
dc.b `ZLX!`,0
even
ZombiText:
dc.b `Zombi I`,0