Imaginen la escena: son los años 90. Los juegos de computadora se mueven en diskettes y la piratería es la norma.
El Ingenio: La "Intro" Imborrable
En Rosario, un programador muy talentoso, que se movía bajo el alias de "Armagedón", tenía un negocio de venta de shareware y juegos. Para publicitarse, desarrolló un programita brillante: una "Intro" (una pantalla de presentación) que se "pegaba" al inicio de cada juego que vendía. (overlay)
Esta intro no era un simple cartelito. Estaba diseñada para que, si alguien copiaba ese juego o programa (es decir, pirateaba al pirata), no pudiera sacarle la publicidad. El próximo comprador vería inevitablemente el anuncio del local. Era un sello de agua digital imposible de borrar.
El programa era un secreto bien guardado, compartido solo con uno o dos colegas de confianza en Rosario.
.jpg) |
| Ingreso a la Galería Vía Florida en los 90 (San Martín 1051) |
La Traición: El Pirata de la Moto
Como en toda buena historia, aparece el conflicto. El colega de “Armagedón” tenía un socio en Buenos Aires. Este "pirata porteño" consiguió una copia de la famosa "Intro" con la promesa de no compartirla con nadie.
Pero, como dice el artículo, "pirata al fin", vio el potencial de negocio. Rompió su promesa, empezó a vender el programa de Armagedón por su cuenta y le fue tan bien que, con las ganancias del esfuerzo ajeno, se compró una moto.
Cuando Armagedón se enteró, la furia fue total. Él apenas tenía dinero, y el otro se estaba enriqueciendo gracias a su código.
.jpg) |
| "La Cueva" o "La Tinto" Entre Ríos 1071 - 1075 |
La Venganza: Nace el "Tracker"
Armagedón buscó primero la vía legal. Fue al registro de propiedad intelectual, pero el trámite era un laberinto. Un abogado amigo le bajó las esperanzas: "Ni te molestes. Aunque lo registres, se va a salir con la suya. Tiene amigos en lugares importantes".
Desesperanzado de la justicia, Armagedón optó por la venganza. Digital, por supuesto.
Decidió crear un virus.
Aunque nunca había hecho uno, sus "intros" eran técnicamente similares, ya que se "pegaban" a otros programas. Su plan era crear un "tracker" (buscador), un virus que se esparciría de máquina en máquina, silencioso e inofensivo, hasta que diera con la computadora del pirata traidor. Solo ahí, en esa máquina, el virus despertaría y empezaría a destruir lentamente el disco rígido.
Para proteger su identidad, adoptó el apodo "Armagedón", sugerido por un amigo, un nombre que sonaba potente y no tenía nada que ver con su alias habitual en el mundo informático.
El Error: "Volvete en Virus, es más Rápido"
El Día del Padre de 1993, el virus estuvo listo.
Armagedón y su "pandilla" probaron el virus en todas las computadoras que pudieron para asegurarse de que era 100% inofensivo para los inocentes… O eso creyeron.
Comenzaron la distribución de forma "quirúrgica". Le pasaron una copia del software "Vista Pro" infectado a un conocido pirata de Buenos Aires. Casi al mismo tiempo, uno de sus amigos viajó a Uruguay por negocios (que también trabajaban con el enemigo porteño) y llevó una versión 2 del virus.
Aquí es donde todo se salió de control.
El virus demostró ser más infeccioso de lo que jamás imaginaron. Unos días después, el pirata de Buenos Aires volvió a Rosario. Cuando revisaron sus diskettes, Armagedón no podía creerlo: ¡tenía la versión 2, la que se había ido a Uruguay!
El virus había viajado de Uruguay a Buenos Aires y de Buenos Aires a Rosario en cuestión de días. La broma interna fue épica:
—¿En qué te volviste de Uruguay?
—En colectivo.
—No, eso pasó de moda. La próxima vez volvete en virus que es mucho más rápido.
Las Consecuencias: El Virus "PHX"
La broma dejó de ser graciosa muy rápido. Armagedón descubrió que su creación tenía errores. Esos "pequeños" bugs que se le habían pasado hacían que el virus no fuera inofensivo para las computadoras inocentes. Estaba corrompiendo datos en todas partes.
La culpa lo carcomía. La infección se multiplicaba exponencialmente. Habían elegido demasiado bien a sus distribuidores.
Mientras tanto, el virus llegó a organizaciones antivirus internacionales. En EE.UU. lo llamaron "Willistrover III" y (gracias a un dato falso) creyeron que venía de Bolivia. Pero fue el islandés Fridrik Skulason, autor del famoso antivirus F-Prot, quien le dio el nombre con el que pasaría a la historia: PHX. Lo llamó así por un texto que el virus buscaba en las máquinas para identificar a su víctima.
El virus "PHX" estaba en todos lados: Uruguay, Paraguay, Rosario y Buenos Aires. Había infectado incluso a organismos oficiales del gobierno, que (en teoría) no deberían usar software pirata.
La Redención: El Antivirus
Irónicamente, el virus cumplió parcialmente su objetivo. El pirata porteño recibió una avalancha de quejas de clientes a los que se les borraba la información. La venganza se había servido...
Pero el plato estaba demasiado frío. La alegría de Armagedón y compañía quedó completamente opacada por la culpa de la infección masiva que había causado.
En un intento por frenar a su propia creación, crearon varios programas antivirus y curas específicas para el PHX. Empezaron a repartirlos gratuitamente y hasta montaron una "campaña de vacunación" en Rosario.
La experiencia los marcó para siempre. Aprendiendo por las malas que un virus es algo que, por definición, se sale de control.
El limpiador es eficiente: no analiza byte por byte, sino que va directo a donde sabe que está el virus.
Objetivo: Archivos ejecutables (.COM y .EXE).
Posición Clave: El virus PHX mide exactamente 822 bytes y siempre se adhiere al final del archivo.
Método: El programa salta al final del archivo y retrocede 822 bytes. Luego, lee ese bloque y verifica cuatro "marcas" o "firmas" exactas en posiciones específicas. Si las cuatro firmas coinciden, confirma la infección y avanza a la curación.
2. La Cirugía: Revertir la Infección
La infección consistía en que el virus sobrescribía el inicio del archivo original para ejecutarse primero. La cura revierte esto en dos pasos:
A. Recuperación del "ADN" Original
El virus fue diseñado para guardar los datos de arranque originales (header) dentro de sus propios 822 bytes. El limpiador tiene que hacer una distinción:
Para archivos .COM: Recupera los pocos bytes originales que el virus necesitaba para saltar al programa real.
Para archivos .EXE: Recupera y reconstruye el encabezado del archivo, incluyendo los valores originales del puntero de instrucción (IP) y de la pila (SP) para que el archivo vuelva a ser ejecutable.
B. El Corte y el Reemplazo (Truncamiento)
Con el encabezado (header) original reconstruido en memoria, el programa finaliza la cura:
Corte del Virus: Mueve el puntero del archivo justo antes de donde inician los 822 bytes del virus. Ejecuta un comando de "escritura de 0 bytes" (truncamiento), que efectivamente corta y elimina el bloque de 822 bytes del PHX.
Restauración del Inicio: Vuelve al principio del archivo y sobrescribe el inicio dañado (que antes era un salto al virus) con el cabezal original y limpio que había reconstruido.
El resultado es un archivo limpio, con su tamaño original restaurado, como si nunca hubiera sido infectado.
Facu LU6FPJ
.286c
assume cs:cseg,ds:cseg
cseg segment para public 'WIII cleaner'
org 100h
remove proc near
jmp startup_sequence
tracker_lenght equ 822
alloc_mem dw 0
lenght_hi dw 0
lenght_lo dw 0
filehandle dw 0
id db 0dh,0ah,' File cleaner for WIII',0dh,0ah
db ' (C) 1993 The Last Hackers Group - Internal Use Only',0dh,0ah
db ' Date: 31/08/1993',0dh,0ah,0dh,0ah,'$'
filespec1 db '*.com',0
filespec2 db '*.exe',0
disk_transfer_area db 080h dup (0)
header db 01ch dup (0)
buffer db tracker_lenght dup (0)
scanning db 0dh,0ah,'Scanning: $'
fileinfected db ', cleaning$'
done db ', done.$'
no_more_files: ret
clean_dir: mov ah,01ah
mov dx,offset disk_transfer_area
int 21h
mov dx,offset filespec1
call search_n_rescue
mov dx,offset filespec2
search_n_rescue: mov ah,04eh
xor cx,cx
int 21h
clean_curr_dir: cmp ax,012h
je no_more_files
mov ax,03d02h
mov dx,offset disk_transfer_area+01eh
int 21h
mov bx,ax
mov filehandle,bx
call print_scanning
mov ax,04202h
mov cx,-1
mov dx,-tracker_lenght
int 21h
mov lenght_hi,dx
mov lenght_lo,ax
mov ah,03fh
mov cx,tracker_lenght
mov dx,offset buffer
int 21h
cmp word ptr buffer+tracker_lenght-3,00828h
jne not_infected
cmp byte ptr buffer+tracker_lenght-1,093h
jne not_infected
cmp word ptr buffer,0680eh
jne not_infected
cmp word ptr buffer+2,0100h
jne not_infected
call neutralize
not_infected: mov dx,offset done
mov ax,0900h
int 21h
mov ah,03eh
int 21h
mov ah,04fh
int 21h
jmp clean_curr_dir
neutralize: mov dx,offset fileinfected
mov ax,0900h
int 21h
mov ax,04200h
xor cx,cx
xor dx,dx
int 21h
mov ah,03fh
mov dx,offset header
mov cx,01ch
int 21h
mov si,offset buffer
mov di,offset header
cmp word ptr [di+000h],'ZM'
je is_a_fucking_exe
mov ax,[si+023h]
mov bl,[si+02ah]
mov [di+000h],ax
mov [di+002h],bl
jmp neutralized
is_a_fucking_exe: mov dx,[di+016h]
add dx,[di+008h]
mov cx,dx
shl dx,4
shr cx,12
mov ax,04200h
mov bx,filehandle
int 21h
mov ah,03fh
mov cx,080h
mov dx,offset buffer
int 21h
mov ax,[si+061h]
mov bx,[si+05fh]
mov cx,[si+063h]
mov dx,[si+05ch]
mov [di+016h],ax
mov [di+014h],bx
mov [di+00eh],cx
mov [di+010h],dx
;RHP: *******************
mov ax,04202h
mov bx,filehandle
mov cx,-1
mov dx,-(tracker_lenght)
int 21h
mov [di+002h],ax
and [di+002h],01ffh
shr ax,9
shl dx,7
or dx,ax
mov [di+004h],dx
inc word ptr [di+004h]
jmp chop_file_end
neutralized: mov ax,04202h
mov bx,filehandle
mov cx,-1
mov dx,-(tracker_lenght)
int 21h
chop_file_end: mov ah,040h
xor cx,cx
int 21h
mov ax,04200h
mov bx,filehandle
xor cx,cx
xor dx,dx
int 21h
mov ah,040h
mov dx,offset header
mov cx,01ch
int 21h
ret
print_scanning: mov di,offset disk_transfer_area+01eh
xor al,al
mov cx,080h
repne scasb
mov byte ptr [di-1],'$'
mov dx,offset scanning
mov ax,0900h
int 21h
mov dx,offset disk_transfer_area+01eh
mov ax,0900h
int 21h
ret
startup_sequence: call clean_dir
int 20h
remove endp
cseg ends
end remove